1 #![cfg(feature = "serde")]
2 #![warn(rust_2018_idioms)]
3 
4 use serde::{Deserialize, Serialize};
5 use serde_test::{assert_tokens, Token};
6 use slab::Slab;
7 
8 #[derive(Debug, Serialize, Deserialize)]
9 #[serde(transparent)]
10 struct SlabPartialEq<T>(Slab<T>);
11 
12 impl<T: PartialEq> PartialEq for SlabPartialEq<T> {
eq(&self, other: &Self) -> bool13     fn eq(&self, other: &Self) -> bool {
14         self.0.len() == other.0.len()
15             && self
16                 .0
17                 .iter()
18                 .zip(other.0.iter())
19                 .all(|(this, other)| this.0 == other.0 && this.1 == other.1)
20     }
21 }
22 
23 #[test]
test_serde_empty()24 fn test_serde_empty() {
25     let slab = Slab::<usize>::new();
26     assert_tokens(
27         &SlabPartialEq(slab),
28         &[Token::Map { len: Some(0) }, Token::MapEnd],
29     );
30 }
31 
32 #[test]
test_serde()33 fn test_serde() {
34     let vec = vec![(1, 2), (3, 4), (5, 6)];
35     let slab: Slab<_> = vec.iter().cloned().collect();
36     assert_tokens(
37         &SlabPartialEq(slab),
38         &[
39             Token::Map { len: Some(3) },
40             Token::U64(1),
41             Token::I32(2),
42             Token::U64(3),
43             Token::I32(4),
44             Token::U64(5),
45             Token::I32(6),
46             Token::MapEnd,
47         ],
48     );
49 }
50