From 96720c83e7518eda0513a63edbba1b555b07eca2 Mon Sep 17 00:00:00 2001 From: logaritmisk Date: Thu, 25 Jan 2018 11:27:58 +0100 Subject: [PATCH] Bench sub. Improve performance for sub. --- benches/bench.rs | 9 +++++++++ src/lib.rs | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/benches/bench.rs b/benches/bench.rs index 1815816..dbddcfe 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -33,11 +33,20 @@ fn insert(data: &[u64]) { } } +fn sub(a: &BitSet, b: &BitSet) { + a - b; +} + fn criterion_benchmark(c: &mut Criterion) { let data: Vec<_> = default_set(1000); c.bench_function("contains", |b| b.iter(|| contains(&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); diff --git a/src/lib.rs b/src/lib.rs index 4156b04..ae962d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -254,17 +254,15 @@ impl<'a> ops::Sub<&'a BitSet> for &'a BitSet { let mut set = self.clone(); for (key, block) in &mut set.blocks { - if let Some(value) = rhs.blocks.get(&key) { - // let n = block.count_ones(); + if let Some(value) = rhs.blocks.get(key) { + let n = block.count_ones() as i32; *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::() as usize; - set } } @@ -587,7 +585,9 @@ mod tests { 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 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;