use std::time::Instant;
use vti_rooms::{Record, RecordStatus};
fn room(n: usize) -> Vec<Record> {
(0..n)
.map(|i| Record {
key: format!("{:032x}", i * 2_654_435_761usize),
version: i as u64 + 1,
epoch: Some(3),
status: RecordStatus::Active,
pinned: false,
sealed: Some("A".repeat(2048)),
nonce: Some("bm9uY2UtMTI".into()),
cleartext: None,
author: None,
updated_at: 1_756_000_000,
})
.collect()
}
#[test]
fn the_commitment_costs_what_it_looks_like_it_costs() {
let mut sizes: Vec<(usize, u128)> = Vec::new();
for n in [100usize, 1_000, 10_000] {
let mut records = room(n);
let started = Instant::now();
let head = vti_rooms::merkle::tree_head(&mut records).expect("commits");
let micros = started.elapsed().as_micros();
assert_eq!(head.record_count, n as u64);
sizes.push((n, micros));
println!("tree_head over {n:>6} records × 2 KiB: {micros:>8} µs");
}
let (_, small) = sizes[0];
let (_, large) = sizes[2];
assert!(
large < small.max(1) * 1_000,
"100x the records cost more than 1000x the time — that is not linear: {sizes:?}"
);
}