Skip to content

Commit a209ea5

Browse files
authored
Merge pull request #23 from overvenus/eqs
Implement PartialEq and Eq
2 parents a4c54da + 8d8e6f4 commit a209ea5

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

src/lib.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,28 @@ impl<K, V, S> Default for OrderMap<K, V, S>
14741474
}
14751475
}
14761476

1477+
impl<K, V1, S1, V2, S2> PartialEq<OrderMap<K, V2, S2>> for OrderMap<K, V1, S1>
1478+
where K: Hash + Eq,
1479+
V1: PartialEq<V2>,
1480+
S1: BuildHasher,
1481+
S2: BuildHasher
1482+
{
1483+
fn eq(&self, other: &OrderMap<K, V2, S2>) -> bool {
1484+
if self.len() != other.len() {
1485+
return false;
1486+
}
1487+
1488+
self.iter().all(|(key, value)| other.get(key).map_or(false, |v| *value == *v))
1489+
}
1490+
}
1491+
1492+
impl<K, V, S> Eq for OrderMap<K, V, S>
1493+
where K: Eq + Hash,
1494+
V: Eq,
1495+
S: BuildHasher
1496+
{
1497+
}
1498+
14771499
#[cfg(test)]
14781500
mod tests {
14791501
use super::*;
@@ -1653,4 +1675,19 @@ mod tests {
16531675
assert_eq!(a, b);
16541676
}
16551677
}
1678+
1679+
#[test]
1680+
fn partial_eq_and_eq() {
1681+
let mut map_a = OrderMap::new();
1682+
map_a.insert(1, "1");
1683+
map_a.insert(2, "2");
1684+
let mut map_b = map_a.clone();
1685+
assert_eq!(map_a, map_b);
1686+
map_b.remove(&1);
1687+
assert_ne!(map_a, map_b);
1688+
1689+
let map_c: OrderMap<_, String> = map_b.into_iter().map(|(k, v)| (k, v.to_owned())).collect();
1690+
assert_ne!(map_a, map_c);
1691+
assert_ne!(map_c, map_a);
1692+
}
16561693
}

0 commit comments

Comments
 (0)