diff --git a/src/lib.rs b/src/lib.rs index 49eabfd1..63232410 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1463,6 +1463,28 @@ impl Default for OrderMap } } +impl PartialEq> for OrderMap + where K: Hash + Eq, + V1: PartialEq, + S1: BuildHasher, + S2: BuildHasher +{ + fn eq(&self, other: &OrderMap) -> bool { + if self.len() != other.len() { + return false; + } + + self.iter().all(|(key, value)| other.get(key).map_or(false, |v| *value == *v)) + } +} + +impl Eq for OrderMap + where K: Eq + Hash, + V: Eq, + S: BuildHasher +{ +} + #[cfg(test)] mod tests { use super::*; @@ -1642,4 +1664,19 @@ mod tests { assert_eq!(a, b); } } + + #[test] + fn partial_eq_and_eq() { + let mut map_a = OrderMap::new(); + map_a.insert(1, "1"); + map_a.insert(2, "2"); + let mut map_b = map_a.clone(); + assert_eq!(map_a, map_b); + map_b.remove(&1); + assert_ne!(map_a, map_b); + + let map_c: OrderMap<_, String> = map_b.into_iter().map(|(k, v)| (k, v.to_owned())).collect(); + assert_ne!(map_a, map_c); + assert_ne!(map_c, map_a); + } }