Files
hemx/hemx-core/benches/wire.rs
T
2026-07-13 09:32:46 +02:00

52 lines
1.5 KiB
Rust

//! Repeatable wire-encoding baseline: `cargo bench -p hemx-core --bench wire`.
use hemx_core::{
BuildFingerprint, Effect, EffectBatch, Payload, ResourceId, ResourceKind, ResourceRef,
EFFECT_BATCH_ABI_VERSION,
};
use std::hint::black_box;
use std::time::Instant;
const ITERATIONS: u32 = 100_000;
const ROUNDS: usize = 7;
fn representative_batch() -> EffectBatch {
let target = ResourceRef::unscoped(ResourceId::new(ResourceKind::Slot, 42));
let ops = (0..50)
.map(|index| Effect::Put {
target: target.clone(),
payload: Payload::Text(format!("item-{index}-{}", "x".repeat(64))),
})
.collect();
EffectBatch {
abi_version: EFFECT_BATCH_ABI_VERSION,
fingerprint: BuildFingerprint(7),
ops,
}
}
fn main() {
let batch = representative_batch();
for _ in 0..10_000 {
black_box(batch.to_wire());
}
let mut nanos_per_batch = [0_u128; ROUNDS];
let mut checksum = 0_usize;
for round in &mut nanos_per_batch {
let start = Instant::now();
for _ in 0..ITERATIONS {
let bytes = black_box(&batch).to_wire();
checksum = checksum.wrapping_add(black_box(bytes.len()));
}
*round = start.elapsed().as_nanos() / u128::from(ITERATIONS);
}
nanos_per_batch.sort_unstable();
println!(
"median_ns_per_batch={} wire_len={} checksum={checksum}",
nanos_per_batch[ROUNDS / 2],
batch.encoded_len(),
);
}