1 #![cfg(feature = "serde")]
2 
3 use core::hash::BuildHasherDefault;
4 use fnv::FnvHasher;
5 use hashbrown::{HashMap, HashSet};
6 use serde_test::{assert_tokens, Token};
7 
8 // We use FnvHash for this test because we rely on the ordering
9 type FnvHashMap<K, V> = HashMap<K, V, BuildHasherDefault<FnvHasher>>;
10 type FnvHashSet<T> = HashSet<T, BuildHasherDefault<FnvHasher>>;
11 
12 #[test]
map_serde_tokens_empty()13 fn map_serde_tokens_empty() {
14     let map = FnvHashMap::<char, u32>::default();
15 
16     assert_tokens(&map, &[Token::Map { len: Some(0) }, Token::MapEnd]);
17 }
18 
19 #[test]
map_serde_tokens()20 fn map_serde_tokens() {
21     let mut map = FnvHashMap::default();
22     map.insert('b', 20);
23     map.insert('a', 10);
24     map.insert('c', 30);
25 
26     assert_tokens(
27         &map,
28         &[
29             Token::Map { len: Some(3) },
30             Token::Char('a'),
31             Token::I32(10),
32             Token::Char('c'),
33             Token::I32(30),
34             Token::Char('b'),
35             Token::I32(20),
36             Token::MapEnd,
37         ],
38     );
39 }
40 
41 #[test]
set_serde_tokens_empty()42 fn set_serde_tokens_empty() {
43     let set = FnvHashSet::<u32>::default();
44 
45     assert_tokens(&set, &[Token::Seq { len: Some(0) }, Token::SeqEnd]);
46 }
47 
48 #[test]
set_serde_tokens()49 fn set_serde_tokens() {
50     let mut set = FnvHashSet::default();
51     set.insert(20);
52     set.insert(10);
53     set.insert(30);
54 
55     assert_tokens(
56         &set,
57         &[
58             Token::Seq { len: Some(3) },
59             Token::I32(30),
60             Token::I32(20),
61             Token::I32(10),
62             Token::SeqEnd,
63         ],
64     );
65 }
66