1 use toml_edit::Document; 2 3 macro_rules! float_inf_tests { 4 ($ty:ty) => {{ 5 let document = r" 6 # infinity 7 sf1 = inf # positive infinity 8 sf2 = +inf # positive infinity 9 sf3 = -inf # negative infinity 10 11 # not a number 12 sf4 = nan # actual sNaN/qNaN encoding is implementation specific 13 sf5 = +nan # same as `nan` 14 sf6 = -nan # valid, actual encoding is implementation specific 15 16 # zero 17 sf7 = +0.0 18 sf8 = -0.0 19 "; 20 21 let document = document.parse::<Document>().unwrap(); 22 let float = |k| document[k].as_float().unwrap(); 23 24 assert!(float("sf1").is_infinite()); 25 assert!(float("sf1").is_sign_positive()); 26 assert!(float("sf2").is_infinite()); 27 assert!(float("sf2").is_sign_positive()); 28 assert!(float("sf3").is_infinite()); 29 assert!(float("sf3").is_sign_negative()); 30 31 assert!(float("sf4").is_nan()); 32 assert!(float("sf4").is_sign_positive()); 33 assert!(float("sf5").is_nan()); 34 assert!(float("sf5").is_sign_positive()); 35 assert!(float("sf6").is_nan()); 36 assert!(float("sf6").is_sign_negative()); 37 38 assert_eq!(float("sf7"), 0.0); 39 assert!(float("sf7").is_sign_positive()); 40 assert_eq!(float("sf8"), 0.0); 41 assert!(float("sf8").is_sign_negative()); 42 43 let mut document = Document::new(); 44 document["sf4"] = toml_edit::value(f64::NAN.copysign(1.0)); 45 document["sf6"] = toml_edit::value(f64::NAN.copysign(-1.0)); 46 assert_eq!( 47 document.to_string(), 48 "\ 49 sf4 = nan 50 sf6 = -nan 51 " 52 ); 53 }}; 54 } 55 56 #[test] test_float()57fn test_float() { 58 float_inf_tests!(f32); 59 float_inf_tests!(f64); 60 } 61