///|
fn run_case(events : Int) -> Unit {
let sim = @moonsim.Sim::new(seed=2026UL)
let started = @bench.monotonic_clock_start()
let mut index = 0
while index < events {
ignore(sim.schedule_at(index % 997, "benchmark event", priority=index % 5))
index = index + 1
}
let executed = sim.run_until_idle()
let elapsed_us = @bench.monotonic_clock_end(started)
let throughput = if elapsed_us <= 0.0 {
0.0
} else {
events.to_double() * 1_000_000.0 / elapsed_us
}
println(
"events=" +
events.to_string() +
" executed=" +
executed.to_string() +
" elapsed_us=" +
elapsed_us.to_string() +
" throughput_events_per_second=" +
throughput.to_string() +
" digest=" +
sim.digest().to_string(),
)
}
///|
fn main {
println("moonsim scheduler benchmark")
println(
"测量包含事件入队和执行;不同机器的耗时不可直接比较。",
)
run_case(1_000)
run_case(10_000)
run_case(100_000)
}