summaryrefslogtreecommitdiffstats
path: root/third_party/rust/slab/tests/serde.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/slab/tests/serde.rs')
-rw-r--r--third_party/rust/slab/tests/serde.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/third_party/rust/slab/tests/serde.rs b/third_party/rust/slab/tests/serde.rs
new file mode 100644
index 0000000000..1d4a204e47
--- /dev/null
+++ b/third_party/rust/slab/tests/serde.rs
@@ -0,0 +1,49 @@
+#![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<T>(Slab<T>);
+
+impl<T: PartialEq> PartialEq for SlabPartialEq<T> {
+ 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::<usize>::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,
+ ],
+ );
+}