From 7107014806088c8863c19a847b10b31d51b44d4c Mon Sep 17 00:00:00 2001 From: Felix Stegmaier Date: Mon, 11 Feb 2019 22:06:53 +0100 Subject: [PATCH 1/2] Implement PartialEq and Eq for IndexMap --- src/indexmap.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/indexmap.rs b/src/indexmap.rs index ed5b35e7..e3110196 100644 --- a/src/indexmap.rs +++ b/src/indexmap.rs @@ -781,6 +781,34 @@ where } } +impl PartialEq> for IndexMap +where + K: Eq + Hash, + V: Eq, + S: BuildHasher, + N: ArrayLength> + ArrayLength>, + S2: BuildHasher, + N2: ArrayLength> + ArrayLength>, +{ + fn eq(&self, other: &IndexMap) -> bool { + return self.len() == other.len() + && self + .iter() + .all(|(key, value)| other.get(key).map_or(false, |v| *value == *v)) + } +} + +impl Eq for IndexMap +where + K: Eq + Hash, + V: Eq, + S: BuildHasher, + N: ArrayLength> + ArrayLength>, +{ + +} + + impl Extend<(K, V)> for IndexMap where K: Eq + Hash, From 37f773493fa8a75f57a931bbd1027ddffffbb1ae Mon Sep 17 00:00:00 2001 From: Felix Stegmaier Date: Mon, 11 Feb 2019 22:07:25 +0100 Subject: [PATCH 2/2] Add test for Eq of IndexMap --- src/indexmap.rs | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/indexmap.rs b/src/indexmap.rs index e3110196..05cec4cd 100644 --- a/src/indexmap.rs +++ b/src/indexmap.rs @@ -791,10 +791,10 @@ where N2: ArrayLength> + ArrayLength>, { fn eq(&self, other: &IndexMap) -> bool { - return self.len() == other.len() + self.len() == other.len() && self - .iter() - .all(|(key, value)| other.get(key).map_or(false, |v| *value == *v)) + .iter() + .all(|(key, value)| other.get(key).map_or(false, |v| *value == *v)) } } @@ -972,4 +972,35 @@ mod tests { mem::size_of::() // entries.length ) } + + + #[test] + fn partial_eq() { + { + let mut a: FnvIndexMap<_, _, U4> = FnvIndexMap::new(); + a.insert("k1", "v1").unwrap(); + + let mut b: FnvIndexMap<_, _, U4> = FnvIndexMap::new(); + b.insert("k1", "v1").unwrap(); + + assert!(a == b); + + b.insert("k2", "v2").unwrap(); + + assert!(a != b); + } + + { + let mut a: FnvIndexMap<_, _, U4> = FnvIndexMap::new(); + a.insert("k1", "v1").unwrap(); + a.insert("k2", "v2").unwrap(); + + let mut b: FnvIndexMap<_, _, U4> = FnvIndexMap::new(); + b.insert("k2", "v2").unwrap(); + b.insert("k1", "v1").unwrap(); + + assert!(a == b); + } + } + }