Fix bug with sub.
This commit is contained in:
21
src/lib.rs
21
src/lib.rs
@@ -253,16 +253,14 @@ impl<'a> ops::Sub<&'a BitSet> for &'a BitSet {
|
|||||||
fn sub(self, rhs: &'a BitSet) -> BitSet {
|
fn sub(self, rhs: &'a BitSet) -> BitSet {
|
||||||
let mut set = self.clone();
|
let mut set = self.clone();
|
||||||
|
|
||||||
set.nbits = 0;
|
|
||||||
|
|
||||||
for (key, value) in &rhs.blocks {
|
for (key, value) in &rhs.blocks {
|
||||||
let block = set.blocks.entry(*key).or_insert(0);
|
let block = set.blocks.entry(*key).or_insert(0);
|
||||||
|
|
||||||
*block &= !value;
|
*block &= !value;
|
||||||
|
|
||||||
set.nbits += block.count_ones() as usize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set.nbits = set.blocks.values().map(|block| block.count_ones()).sum::<u32>() as usize;
|
||||||
|
|
||||||
set
|
set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,6 +581,21 @@ mod tests {
|
|||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
assert_eq!(i, expected.len());
|
assert_eq!(i, expected.len());
|
||||||
|
assert_eq!(set.len(), expected.len());
|
||||||
|
|
||||||
|
let a: BitSet = vec![1, 2, 3, 4, 5, 100, 101, 1001, 1002].into_iter().collect();
|
||||||
|
let b: BitSet = vec![1, 2, 3].into_iter().collect();
|
||||||
|
|
||||||
|
let set = &a - &b;
|
||||||
|
|
||||||
|
let mut i = 0;
|
||||||
|
let expected = [4, 5, 100, 101, 1001, 1002];
|
||||||
|
for x in &set {
|
||||||
|
assert!(expected.contains(&x));
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
assert_eq!(i, expected.len());
|
||||||
|
assert_eq!(set.len(), expected.len());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user