commonware-utils 2026.5.0

Leverage common functionality across multiple primitives.
Documentation
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<const CHUNK_SIZE: usize>(c: &mut Criterion, size: u64) {
    let bitmap = BitMap::<CHUNK_SIZE>::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,
}