diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/rust/hashbrown/tests/serde.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/third_party/rust/hashbrown/tests/serde.rs b/third_party/rust/hashbrown/tests/serde.rs new file mode 100644 index 0000000000..a642348b3b --- /dev/null +++ b/third_party/rust/hashbrown/tests/serde.rs @@ -0,0 +1,65 @@ +#![cfg(feature = "serde")] + +use core::hash::BuildHasherDefault; +use fnv::FnvHasher; +use hashbrown::{HashMap, HashSet}; +use serde_test::{assert_tokens, Token}; + +// We use FnvHash for this test because we rely on the ordering +type FnvHashMap<K, V> = HashMap<K, V, BuildHasherDefault<FnvHasher>>; +type FnvHashSet<T> = HashSet<T, BuildHasherDefault<FnvHasher>>; + +#[test] +fn map_serde_tokens_empty() { + let map = FnvHashMap::<char, u32>::default(); + + assert_tokens(&map, &[Token::Map { len: Some(0) }, Token::MapEnd]); +} + +#[test] +fn map_serde_tokens() { + let mut map = FnvHashMap::default(); + map.insert('b', 20); + map.insert('a', 10); + map.insert('c', 30); + + assert_tokens( + &map, + &[ + Token::Map { len: Some(3) }, + Token::Char('a'), + Token::I32(10), + Token::Char('c'), + Token::I32(30), + Token::Char('b'), + Token::I32(20), + Token::MapEnd, + ], + ); +} + +#[test] +fn set_serde_tokens_empty() { + let set = FnvHashSet::<u32>::default(); + + assert_tokens(&set, &[Token::Seq { len: Some(0) }, Token::SeqEnd]); +} + +#[test] +fn set_serde_tokens() { + let mut set = FnvHashSet::default(); + set.insert(20); + set.insert(10); + set.insert(30); + + assert_tokens( + &set, + &[ + Token::Seq { len: Some(3) }, + Token::I32(30), + Token::I32(20), + Token::I32(10), + Token::SeqEnd, + ], + ); +} |