#[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>(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);