Bench sub.
Improve performance for sub.
This commit is contained in:
@@ -33,11 +33,20 @@ fn insert(data: &[u64]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sub(a: &BitSet, b: &BitSet) {
|
||||||
|
a - b;
|
||||||
|
}
|
||||||
|
|
||||||
fn criterion_benchmark(c: &mut Criterion) {
|
fn criterion_benchmark(c: &mut Criterion) {
|
||||||
let data: Vec<_> = default_set(1000);
|
let data: Vec<_> = default_set(1000);
|
||||||
|
|
||||||
c.bench_function("contains", |b| b.iter(|| contains(&data)));
|
c.bench_function("contains", |b| b.iter(|| contains(&data)));
|
||||||
c.bench_function("insert", |b| b.iter(|| insert(&data)));
|
c.bench_function("insert", |b| b.iter(|| insert(&data)));
|
||||||
|
|
||||||
|
let lhs: BitSet = default_set(1000);
|
||||||
|
let rhs: BitSet = default_set(1000);
|
||||||
|
|
||||||
|
c.bench_function("sub", |b| b.iter(|| sub(&lhs, &rhs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group!(benches, criterion_benchmark);
|
criterion_group!(benches, criterion_benchmark);
|
||||||
|
|||||||
12
src/lib.rs
12
src/lib.rs
@@ -254,17 +254,15 @@ impl<'a> ops::Sub<&'a BitSet> for &'a BitSet {
|
|||||||
let mut set = self.clone();
|
let mut set = self.clone();
|
||||||
|
|
||||||
for (key, block) in &mut set.blocks {
|
for (key, block) in &mut set.blocks {
|
||||||
if let Some(value) = rhs.blocks.get(&key) {
|
if let Some(value) = rhs.blocks.get(key) {
|
||||||
// let n = block.count_ones();
|
let n = block.count_ones() as i32;
|
||||||
|
|
||||||
*block &= !value;
|
*block &= !value;
|
||||||
|
|
||||||
// set.nbits += (block.count_ones() - n) as usize;
|
set.nbits = (set.nbits as i32 + (block.count_ones() as i32 - n)) as usize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set.nbits = set.blocks.values().map(|block| block.count_ones()).sum::<u32>() as usize;
|
|
||||||
|
|
||||||
set
|
set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -587,7 +585,9 @@ mod tests {
|
|||||||
assert_eq!(i, expected.len());
|
assert_eq!(i, expected.len());
|
||||||
assert_eq!(set.len(), 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 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 b: BitSet = vec![1, 2, 3].into_iter().collect();
|
||||||
|
|
||||||
let set = &a - &b;
|
let set = &a - &b;
|
||||||
|
|||||||
Reference in New Issue
Block a user