#![cfg(feature = "serde")] #![warn(rust_2018_idioms)] use serde::{Deserialize, Serialize}; use serde_test::{assert_tokens, Token}; use slab::Slab; #[derive(Debug, Serialize, Deserialize)] #[serde(transparent)] struct SlabPartialEq(Slab); impl PartialEq for SlabPartialEq { fn eq(&self, other: &Self) -> bool { self.0.len() == other.0.len() && self .0 .iter() .zip(other.0.iter()) .all(|(this, other)| this.0 == other.0 && this.1 == other.1) } } #[test] fn test_serde_empty() { let slab = Slab::::new(); assert_tokens( &SlabPartialEq(slab), &[Token::Map { len: Some(0) }, Token::MapEnd], ); } #[test] fn test_serde() { let vec = vec![(1, 2), (3, 4), (5, 6)]; let slab: Slab<_> = vec.iter().cloned().collect(); assert_tokens( &SlabPartialEq(slab), &[ Token::Map { len: Some(3) }, Token::U64(1), Token::I32(2), Token::U64(3), Token::I32(4), Token::U64(5), Token::I32(6), Token::MapEnd, ], ); }