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) {
let string_val: StringVal = (42, "the quick brown fox jumps over the lazy dog".into());
let string_bytes = rapira::serialize(&string_val);
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(|| {
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(|| {
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);