Skip to content

Commit 5cc2f90

Browse files
authored
Merge pull request xacrimon#332 from noahbkim/eq
Implement Eq and PartialEq for DashMap and DashSet
2 parents 1e21688 + 38be094 commit 5cc2f90

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/lib.rs

+34
Original file line numberDiff line numberDiff line change
@@ -1344,6 +1344,21 @@ where
13441344
}
13451345
}
13461346

1347+
impl<'a, K: 'a + Eq + Hash, V: 'a + PartialEq, S: BuildHasher + Clone> PartialEq
1348+
for DashMap<K, V, S>
1349+
{
1350+
fn eq(&self, other: &Self) -> bool {
1351+
self.len() == other.len()
1352+
&& self.iter().all(|r| {
1353+
other
1354+
.get(r.key())
1355+
.map_or(false, |ro| r.value() == ro.value())
1356+
})
1357+
}
1358+
}
1359+
1360+
impl<'a, K: 'a + Eq + Hash, V: 'a + Eq, S: BuildHasher + Clone> Eq for DashMap<K, V, S> {}
1361+
13471362
impl<K: Eq + Hash, V, S: BuildHasher + Clone> IntoIterator for DashMap<K, V, S> {
13481363
type Item = (K, V);
13491364

@@ -1432,6 +1447,25 @@ mod tests {
14321447
assert_eq!(dm.get(&0).unwrap().value(), &0);
14331448
}
14341449

1450+
#[test]
1451+
fn test_equal() {
1452+
let dm1 = DashMap::new();
1453+
let dm2 = DashMap::new();
1454+
assert_eq!(dm1, dm2);
1455+
1456+
dm1.insert(0, "Hello, world!");
1457+
assert_ne!(dm1, dm2);
1458+
1459+
dm1.insert(1, "Goodbye, world!");
1460+
assert_ne!(dm1, dm2);
1461+
1462+
dm2.insert(0, "Hello, world!");
1463+
assert_ne!(dm1, dm2);
1464+
1465+
dm2.insert(1, "Goodbye, world!");
1466+
assert_eq!(dm1, dm2);
1467+
}
1468+
14351469
#[test]
14361470
fn test_multiple_hashes() {
14371471
let dm: DashMap<u32, u32> = DashMap::default();

src/set.rs

+27
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,14 @@ impl<'a, K: 'a + Eq + Hash, S: BuildHasher + Clone> DashSet<K, S> {
383383
}
384384
}
385385

386+
impl<K: Eq + Hash, S: BuildHasher + Clone> PartialEq for DashSet<K, S> {
387+
fn eq(&self, other: &Self) -> bool {
388+
self.len() == other.len() && self.iter().all(|r| other.contains(r.key()))
389+
}
390+
}
391+
392+
impl<K: Eq + Hash, S: BuildHasher + Clone> Eq for DashSet<K, S> {}
393+
386394
impl<K: Eq + Hash, S: BuildHasher + Clone> IntoIterator for DashSet<K, S> {
387395
type Item = K;
388396

@@ -450,6 +458,25 @@ mod tests {
450458
assert_eq!(set.get(&0).as_deref(), Some(&0));
451459
}
452460

461+
#[test]
462+
fn test_equal() {
463+
let set1 = DashSet::new();
464+
let set2 = DashSet::new();
465+
assert_eq!(set1, set2);
466+
467+
set1.insert("Hello, world!");
468+
assert_ne!(set1, set2);
469+
470+
set1.insert("Goodbye, world!");
471+
assert_ne!(set1, set2);
472+
473+
set2.insert("Hello, world!");
474+
assert_ne!(set1, set2);
475+
476+
set2.insert("Goodbye, world!");
477+
assert_eq!(set1, set2);
478+
}
479+
453480
#[test]
454481
fn test_multiple_hashes() {
455482
let set = DashSet::<u32>::default();

0 commit comments

Comments
 (0)