tests.rs (1912B)
1 use super::{FromStrErr, MinMax, Ratio}; 2 use serde_json as _; 3 #[test] 4 fn min_max() { 5 for i in 0..1000 { 6 for j in 0..1000 { 7 assert!( 8 MinMax::<u32>::new(i, i + j).is_some_and(|m| *m.min() == i && *m.max() == i + j) 9 ); 10 } 11 } 12 } 13 #[test] 14 fn min_max_err() { 15 assert!(MinMax::new(f64::NAN, 0.0f64).is_none()); 16 } 17 #[test] 18 fn dec_string() { 19 assert_eq!("0", &super::to_dec_string(&Ratio::<u32>::new(0, 1), 0)); 20 assert_eq!( 21 "-1.33", 22 &super::to_dec_string(&Ratio::<i32>::new(-4i32, 3i32), 2) 23 ); 24 assert_eq!( 25 "-0.33", 26 &super::to_dec_string(&Ratio::<i32>::new(-1i32, 3i32), 2) 27 ); 28 assert_eq!( 29 "5.000", 30 &super::to_dec_string(&Ratio::<u32>::new(5u32, 1u32), 3) 31 ); 32 assert_eq!( 33 "0.66667", 34 &super::to_dec_string(&Ratio::<u32>::new(2, 3), 5) 35 ); 36 } 37 #[test] 38 fn from_str() { 39 assert_eq!(super::try_from_str::<u32>("4"), Ok(Ratio::new(4u32, 1u32))); 40 assert_eq!( 41 super::try_from_str::<u32>("4/8"), 42 Ok(Ratio::new(1u32, 2u32)) 43 ); 44 assert_eq!( 45 super::try_from_str::<u32>("5 9/8"), 46 Ok(Ratio::new(49u32, 8u32)) 47 ); 48 assert_eq!( 49 super::try_from_str::<i32>("-2 7/6"), 50 Ok(Ratio::new(-19i32, 6i32)) 51 ); 52 assert_eq!( 53 super::try_from_str::<i32>("-5/6"), 54 Ok(Ratio::new(-5i32, 6i32)) 55 ); 56 assert_eq!( 57 super::try_from_str::<u32>("0.1249"), 58 Ok(Ratio::new(1249u32, 10000u32)) 59 ); 60 assert_eq!( 61 super::try_from_str::<i32>("-1.33"), 62 Ok(Ratio::new(-133i32, 100i32)) 63 ); 64 assert_eq!( 65 super::try_from_str::<i32>("-0.33"), 66 Ok(Ratio::new(-33i32, 100i32)) 67 ); 68 assert_eq!(super::try_from_str::<u32>("0.0"), Ok(Ratio::new(0, 1))); 69 assert_eq!( 70 super::try_from_str::<u32>("1/0"), 71 Err(FromStrErr::DenominatorIsZero) 72 ); 73 }