armdb 0.7.0

sharded bitcask key-value storage optimized for NVMe
Documentation
//! WP-I perf validation: checked (`rapira::deserialize`) vs unchecked
//! (`rapira::deser_unchecked`) decode cost, to justify "no opt-in unchecked
//! codec yet". Run: `cargo bench -p armdb --bench codec_decode`.

use std::hint::black_box;

use criterion::{Criterion, criterion_group, criterion_main};

type StringVal = (u64, String);
type NumVal = (u64, u64, u32);

fn bench_codec_decode(c: &mut Criterion) {
    // A message-sized value carrying a String — the worst case (UTF-8 validation).
    let string_val: StringVal = (42, "the quick brown fox jumps over the lazy dog".into());
    let string_bytes = rapira::serialize(&string_val);

    // A flat numeric value — the best case (no strings / collections).
    let num_val: NumVal = (1, 2, 3);
    let num_bytes = rapira::serialize(&num_val);

    let mut group = c.benchmark_group("codec_decode");

    group.bench_function("string_checked", |b| {
        b.iter(|| {
            let v: StringVal = rapira::deserialize(black_box(&string_bytes)).unwrap();
            black_box(v);
        })
    });
    group.bench_function("string_unchecked", |b| {
        b.iter(|| {
            // SAFETY: bench-only baseline (not shipped). `string_bytes` is valid rapira.
            let v: StringVal =
                unsafe { rapira::deser_unchecked(black_box(&string_bytes)) }.unwrap();
            black_box(v);
        })
    });

    group.bench_function("numeric_checked", |b| {
        b.iter(|| {
            let v: NumVal = rapira::deserialize(black_box(&num_bytes)).unwrap();
            black_box(v);
        })
    });
    group.bench_function("numeric_unchecked", |b| {
        b.iter(|| {
            // SAFETY: bench-only baseline (not shipped). `num_bytes` is valid rapira.
            let v: NumVal = unsafe { rapira::deser_unchecked(black_box(&num_bytes)) }.unwrap();
            black_box(v);
        })
    });

    group.finish();
}

criterion_group!(benches, bench_codec_decode);
criterion_main!(benches);