use bytes::BytesMut; use commonware_codec::{EncodeSize, Write}; use commonware_utils::bitmap::BitMap; use criterion::{criterion_group, Criterion}; use std::hint::black_box; fn bench_write(c: &mut Criterion, size: u64) { let bitmap = BitMap::::ones(size); let encoded_size = bitmap.encode_size(); let mut buf = BytesMut::with_capacity(encoded_size); c.bench_function( &format!("{}/size={size} chunk_size={CHUNK_SIZE}", module_path!()), |b| { b.iter(|| { buf.clear(); black_box(&bitmap).write(&mut buf); black_box(buf.len()); }); }, ); } fn benchmark_write(c: &mut Criterion) { for size in [64, 1 << 10, 1 << 14, 1 << 18, 1 << 22, 1 << 26] { bench_write::<4>(c, size); bench_write::<8>(c, size); bench_write::<16>(c, size); bench_write::<32>(c, size); } } criterion_group! { name = benches; config = Criterion::default().sample_size(10); targets = benchmark_write, }