commonware-utils 2026.3.0

Leverage common functionality across multiple primitives.
Documentation
use commonware_utils::bitmap::BitMap;
use criterion::{criterion_group, Criterion};
use rand::{rngs::StdRng, Rng, SeedableRng};
use std::hint::black_box;

fn bench_count_ones<const CHUNK_SIZE: usize>(c: &mut Criterion, size: u64) {
    let mut rng = StdRng::seed_from_u64(size);
    let mut bitmap = BitMap::<CHUNK_SIZE>::with_capacity(size);
    for _ in 0..size {
        bitmap.push(rng.gen::<bool>());
    }
    c.bench_function(
        &format!("{}/size={size} chunk_size={CHUNK_SIZE}", module_path!()),
        |b| {
            b.iter(|| black_box(&bitmap).count_ones());
        },
    );
}

fn benchmark_count_ones(c: &mut Criterion) {
    for size in [64, 1 << 10, 1 << 14, 1 << 18, 1 << 22, 1 << 28] {
        bench_count_ones::<4>(c, size);
        bench_count_ones::<8>(c, size);
        bench_count_ones::<16>(c, size);
        bench_count_ones::<32>(c, size);
    }
}

criterion_group! {
    name = benches;
    config = Criterion::default().sample_size(10);
    targets = benchmark_count_ones,
}