Skip to content

Commit 4914666

Browse files
committed
fix(set): check ordering when comparing sets
1 parent 3307a2f commit 4914666

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

src/set.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,12 +308,8 @@ where
308308
S: BuildHasher,
309309
{
310310
#[cfg_attr(feature = "inline-more", inline)]
311-
fn eq(&self, other: &LinkedHashSet<T, S>) -> bool {
312-
if self.len() != other.len() {
313-
return false;
314-
}
315-
316-
self.iter().all(|key| other.contains(key))
311+
fn eq(&self, other: &Self) -> bool {
312+
self.len() == other.len() && self.iter().eq(other)
317313
}
318314
}
319315

tests/linked_hash_map.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,3 +498,18 @@ fn test_retain() {
498498
drop(map);
499499
assert!(c.get() == 4);
500500
}
501+
502+
#[test]
503+
fn test_order_equality() {
504+
let xs = [1, 2, 3, 4, 5, 6];
505+
let mut map1: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
506+
let mut map2: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
507+
508+
assert_eq!(map1, map2);
509+
510+
map1.to_front("4");
511+
assert_ne!(map1, map2);
512+
513+
map2.to_front("4");
514+
assert_eq!(map1, map2);
515+
}

tests/linked_hash_set.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,18 @@ fn to_back_front_order() {
512512
set.to_front(&3);
513513
assert_eq!(set.front().copied(), Some(3));
514514
}
515+
516+
#[test]
517+
fn test_order_equality() {
518+
let xs = [1, 2, 3, 4, 5, 6];
519+
let mut set1: LinkedHashSet<i32> = xs.iter().copied().collect();
520+
let mut set2: LinkedHashSet<i32> = xs.iter().copied().collect();
521+
522+
assert_eq!(set1, set2);
523+
524+
set1.to_front(&4);
525+
assert_ne!(set1, set2);
526+
527+
set2.to_front(&4);
528+
assert_eq!(set1, set2);
529+
}

0 commit comments

Comments
 (0)