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