54 lines
1.0 KiB
Rust
54 lines
1.0 KiB
Rust
#[macro_use]
|
|
extern crate criterion;
|
|
extern crate rand;
|
|
|
|
extern crate bit_set;
|
|
|
|
use std::iter::FromIterator;
|
|
|
|
use criterion::Criterion;
|
|
use rand::{Rng, SeedableRng, XorShiftRng};
|
|
|
|
use bit_set::BitSet;
|
|
|
|
fn default_set<C: FromIterator<u64>>(n: usize) -> C {
|
|
let mut rng = XorShiftRng::from_seed([0, 1, 2, 3]);
|
|
|
|
(0..n).map(|_| rng.next_u64()).collect()
|
|
}
|
|
|
|
fn contains(data: &[u64]) {
|
|
let set = BitSet::new();
|
|
|
|
for v in data {
|
|
set.contains(v);
|
|
}
|
|
}
|
|
|
|
fn insert(data: &[u64]) {
|
|
let mut set = BitSet::new();
|
|
|
|
for v in data {
|
|
set.insert(*v);
|
|
}
|
|
}
|
|
|
|
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);
|
|
criterion_main!(benches);
|