Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit d73a169

Browse files
committed
Fix sparse intersect bug, add more sparse / dense tests
1 parent 1c1603e commit d73a169

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

compiler/rustc_index/src/bit_set.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ fn dense_sparse_intersect<T: Idx>(
272272
sparse: &SparseBitSet<T>,
273273
) -> (SparseBitSet<T>, bool) {
274274
let mut sparse_copy = sparse.clone();
275-
sparse_intersect(&mut sparse_copy, |el| !dense.contains(*el));
275+
sparse_intersect(&mut sparse_copy, |el| dense.contains(*el));
276276
let n = sparse_copy.len();
277277
(sparse_copy, n != dense.count())
278278
}

compiler/rustc_index/src/bit_set/tests.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,25 @@ fn hybrid_bitset() {
108108
assert!(!sparse01358.union(&hybrid)); // no change
109109
assert!(hybrid.union(&sparse01358));
110110
assert!(hybrid.superset(&sparse01358) && sparse01358.superset(&hybrid));
111-
assert!(!dense10.union(&sparse01358));
112111
assert!(!dense256.union(&dense10));
113112

113+
// dense / sparse where dense superset sparse
114+
assert!(!dense10.clone().union(&sparse01358));
115+
assert!(sparse01358.clone().union(&dense10));
114116
assert!(dense10.clone().intersect(&sparse01358));
115117
assert!(!sparse01358.clone().intersect(&dense10));
116118
assert!(dense10.clone().subtract(&sparse01358));
117119
assert!(sparse01358.clone().subtract(&dense10));
118120

121+
// dense / sparse where sparse superset dense
122+
let dense038 = sparse038.to_dense();
123+
assert!(!sparse0381.clone().union(&dense038));
124+
assert!(dense038.clone().union(&sparse0381));
125+
assert!(sparse0381.clone().intersect(&dense038));
126+
assert!(!dense038.clone().intersect(&sparse0381));
127+
assert!(sparse0381.clone().subtract(&dense038));
128+
assert!(dense038.clone().subtract(&sparse0381));
129+
119130
let mut dense = dense10.clone();
120131
assert!(dense.union(&dense256));
121132
assert!(dense.superset(&dense256) && dense256.superset(&dense));

0 commit comments

Comments
 (0)