lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

percent.rs (1446B)


      1 mod common;
      2 
      3 use core::str::FromStr;
      4 
      5 use radroots_core::{RadrootsCorePercent, RadrootsCorePercentParseError};
      6 
      7 #[test]
      8 fn ratio_roundtrip() {
      9     let pct = RadrootsCorePercent::from_ratio(common::dec("0.125"));
     10     assert_eq!(pct.value, common::dec("12.5"));
     11     assert_eq!(pct.to_ratio(), common::dec("0.125"));
     12 }
     13 
     14 #[test]
     15 fn parses_percent_strings() {
     16     let pct = RadrootsCorePercent::from_str("12.5%").unwrap();
     17     assert_eq!(pct.value, common::dec("12.5"));
     18 
     19     let pct = RadrootsCorePercent::from_str(" 12.5 ").unwrap();
     20     assert_eq!(pct.value, common::dec("12.5"));
     21 
     22     assert_eq!(
     23         RadrootsCorePercent::from_str("nope"),
     24         Err(RadrootsCorePercentParseError::InvalidNumber)
     25     );
     26 }
     27 
     28 #[test]
     29 fn of_money_and_quantized() {
     30     let base = common::money("20.00", "USD");
     31     let pct = RadrootsCorePercent::from_str("10").unwrap();
     32     let out = pct.of_money(&base);
     33     assert_eq!(out.amount, common::dec("2.00"));
     34 
     35     let tiny = common::money("0.05", "USD");
     36     let pct = RadrootsCorePercent::from_str("10").unwrap();
     37     let rounded = pct.of_money_quantized(&tiny);
     38     assert_eq!(rounded.amount, common::dec("0.01"));
     39 }
     40 
     41 #[test]
     42 fn display_and_parse_error_display_paths_are_exercised() {
     43     let pct = RadrootsCorePercent::from_str("12.5%").unwrap();
     44     assert_eq!(pct.to_string(), "12.5%");
     45     assert_eq!(
     46         RadrootsCorePercentParseError::InvalidNumber.to_string(),
     47         "invalid percent string"
     48     );
     49 }