rational_extensions

Extends num_rational::Ratio<T>.
git clone https://git.philomathiclife.com/repos/rational_extensions
Log | Files | Refs | README

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 }