commonware-utils 2026.3.0

Leverage common functionality across multiple primitives.
Documentation
use commonware_utils::rational::BigRationalExt;
use criterion::{criterion_group, Criterion};
use num_rational::BigRational;

fn bench_log2_ceil(c: &mut Criterion) {
    let cases = [
        BigRational::from_frac_u64(1, 2),
        BigRational::from_frac_u64(1, 4),
        BigRational::from_frac_u64(3, 4),
        BigRational::from_frac_u64(3, 8),
        BigRational::from_frac_u64(7, 8),
        BigRational::from_frac_u64(15, 16),
        BigRational::from_frac_u64(511, 512),
        BigRational::from_frac_u64(1023, 1024),
    ];

    for value in cases.iter() {
        for precision in [4, 8, 12] {
            c.bench_function(
                &format!(
                    "{}/value={}:{} precision={}",
                    module_path!(),
                    value.numer(),
                    value.denom(),
                    precision
                ),
                |b| {
                    b.iter(|| value.log2_ceil(precision));
                },
            );
        }
    }
}

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