Closed
Description
While playing AoC 2020 I've encountered a very strange issue with HashSet::contains()
- it reports that an item is NOT present in the set, although it is. Here is a MCVE:
use std::collections::VecDeque;
//use std::collections::HashSet;
use hashbrown::HashSet;
pub fn main() {
let mut deque = (0..10).collect::<VecDeque<usize>>();
let mut seen_a = HashSet::new();
let mut seen_b = HashSet::new();
for i in 0..100 {
if !seen_a.insert(deque.clone()) {
if !seen_b.contains(&deque) {
println!("{:3}: {:?}", i, deque);
}
}
// already inserted
// seen_a.insert(deque.clone());
seen_b.insert(deque.clone());
deque.rotate_left(1);
}
}
Expected behavior:
The application does not print anything
Actual behavior
The application prints:
10: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
11: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
12: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
13: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
14: [4, 5, 6, 7, 8, 9, 0, 1, 2, 3]
15: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
23: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
24: [4, 5, 6, 7, 8, 9, 0, 1, 2, 3]
25: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
26: [6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
27: [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
28: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7]
29: [9, 0, 1, 2, 3, 4, 5, 6, 7, 8]
30: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
31: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
39: [9, 0, 1, 2, 3, 4, 5, 6, 7, 8]
40: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
41: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
42: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
43: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
44: [4, 5, 6, 7, 8, 9, 0, 1, 2, 3]
45: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
46: [6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
47: [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
55: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
56: [6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
57: [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
58: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7]
59: [9, 0, 1, 2, 3, 4, 5, 6, 7, 8]
60: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
61: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
62: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
63: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
71: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
72: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
73: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
74: [4, 5, 6, 7, 8, 9, 0, 1, 2, 3]
75: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
76: [6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
77: [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
78: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7]
79: [9, 0, 1, 2, 3, 4, 5, 6, 7, 8]
87: [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
88: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7]
89: [9, 0, 1, 2, 3, 4, 5, 6, 7, 8]
90: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
91: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
92: [2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
93: [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
94: [4, 5, 6, 7, 8, 9, 0, 1, 2, 3]
95: [5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
The issue is NOT reproducible with std::collections::HashSet
. Just comment out the hashbrown import and uncomment the std one.
Hashbrown version: 0.9.1
rustc 1.48.0 (7eac88abb 2020-11-16)
Metadata
Metadata
Assignees
Labels
No labels