• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()57 fn test_float() {
58     float_inf_tests!(f32);
59     float_inf_tests!(f64);
60 }
61