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