diff --git a/src/indexmap.rs b/src/indexmap.rs index ed5b35e7..05cec4cd 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 { + 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, @@ -944,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); + } + } + }