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 }