1 #![allow(clippy::eq_op)]
2 
3 use serde::de::IntoDeserializer;
4 use serde::Deserialize;
5 use serde_derive::Deserialize;
6 use serde_yaml::{Number, Value};
7 use std::f64;
8 
9 #[test]
test_nan()10 fn test_nan() {
11     let pos_nan = serde_yaml::from_str::<Value>(".nan").unwrap();
12     assert!(pos_nan.is_f64());
13     assert_eq!(pos_nan, pos_nan);
14 
15     let neg_fake_nan = serde_yaml::from_str::<Value>("-.nan").unwrap();
16     assert!(neg_fake_nan.is_string());
17 
18     let significand_mask = 0xF_FFFF_FFFF_FFFF;
19     let bits = (f64::NAN.to_bits() ^ significand_mask) | 1;
20     let different_pos_nan = Value::Number(Number::from(f64::from_bits(bits)));
21     assert_eq!(pos_nan, different_pos_nan);
22 }
23 
24 #[test]
test_digits()25 fn test_digits() {
26     let num_string = serde_yaml::from_str::<Value>("01").unwrap();
27     assert!(num_string.is_string());
28 }
29 
30 #[test]
test_into_deserializer()31 fn test_into_deserializer() {
32     #[derive(Debug, Deserialize, PartialEq)]
33     struct Test {
34         first: String,
35         second: u32,
36     }
37 
38     let value = serde_yaml::from_str::<Value>("xyz").unwrap();
39     let s = String::deserialize(value.into_deserializer()).unwrap();
40     assert_eq!(s, "xyz");
41 
42     let value = serde_yaml::from_str::<Value>("- first\n- second\n- third").unwrap();
43     let arr = Vec::<String>::deserialize(value.into_deserializer()).unwrap();
44     assert_eq!(arr, &["first", "second", "third"]);
45 
46     let value = serde_yaml::from_str::<Value>("first: abc\nsecond: 99").unwrap();
47     let test = Test::deserialize(value.into_deserializer()).unwrap();
48     assert_eq!(
49         test,
50         Test {
51             first: "abc".to_string(),
52             second: 99
53         }
54     );
55 }
56