///|
/// Reproducible workload fixtures used by `moon bench --release`.
fn benchmark_left() -> RoaringBitmap {
let values : Array[Int] = []
for value in 0..<6_000 {
values.push(value * 3)
}
RoaringBitmap::from_array(values).unwrap()
}
///|
fn benchmark_right() -> RoaringBitmap {
let values : Array[Int] = []
for value in 0..<6_000 {
values.push(value * 5 + 1)
}
RoaringBitmap::from_array(values).unwrap()
}
///|
test (b : @bench.T) {
let left = benchmark_left()
let right = benchmark_right()
b.bench(name="union_two_dense_blocks", fn() {
b.keep(left.union(right).cardinality())
})
b.bench(name="intersection_two_dense_blocks", fn() {
b.keep(left.intersection(right).cardinality())
})
b.bench(name="encode_canonical_words", fn() {
b.keep(left.encode_words().length())
})
b.bench(name="encode_run_words", fn() {
b.keep(left.encode_run_words().unwrap().length())
})
b.bench(name="rank_dense_bitmap", fn() { b.keep(left.rank(12_345)) })
b.bench(name="select_dense_bitmap", fn() { b.keep(left.select(4_000)) })
}