Files
OxideJS-New/crates/oxide_vm/tests/bench_tests.rs
T

38 lines
1.1 KiB
Rust

use oxide_compiler::compiler::Compiler;
use oxide_parser::Allocator;
use oxide_vm::vm::Vm;
#[test]
fn bench_1m_property_reads() {
use std::time::Instant;
let allocator = Allocator::default();
let source = "({a: 1, b: 2, c: 3, d: 4, e: 5}).e";
let program = oxide_parser::parse(&allocator, source).expect("parse failed");
let module = Compiler::new().compile(&program).expect("compile failed");
let mut vm = Vm::new();
vm.run(&module).expect("vm run failed");
for _ in 0..100 {
vm.rerun().ok();
}
const N: usize = 1_000_000;
let start = Instant::now();
for _ in 0..N {
vm.rerun().ok();
}
let elapsed = start.elapsed();
let ns_per = elapsed.as_nanos() as f64 / N as f64;
println!(
"1M IC property reads: {:.2}ms ({:.0} ns/read)",
elapsed.as_secs_f64() * 1000.0,
ns_per
);
if cfg!(debug_assertions) {
println!(" (debug build -- skipping timing assertion)");
} else {
assert!(ns_per < 500.0, "{} ns/read exceeds 500ns target", ns_per);
}
}