use bytes::BytesMut;
use commonware_codec::{EncodeSize, Write};
use commonware_utils::bitmap::roaring::Bitmap;
use criterion::{criterion_group, Criterion};
use std::hint::black_box;
fn alternating_bitmap(containers: u64) -> Bitmap {
let mut bitmap = Bitmap::new();
for key in 0..containers {
let base = key << 16;
for i in 0..5000 {
bitmap.insert(base + i * 2);
}
}
bitmap
}
fn benchmark_write(c: &mut Criterion) {
let mut group = c.benchmark_group(module_path!());
for containers in [1, 16, 64] {
let bitmap = alternating_bitmap(containers);
let encoded_size = bitmap.encode_size();
let mut buf = BytesMut::with_capacity(encoded_size);
group.bench_function(format!("containers={containers} shape=bitmap"), |b| {
b.iter(|| {
buf.clear();
black_box(&bitmap).write(&mut buf);
black_box(buf.len());
});
});
}
group.finish();
}
criterion_group! {
name = benches;
config = Criterion::default().sample_size(50);
targets = benchmark_write,
}