///|
fn main {
let sim = @moonsim.Sim::new(seed=300UL)
let states = ["green", "yellow", "red", "red"]
ignore(
sim.install_timer(
@moonsim.timer_plan("light:cycle", start_after=0, interval=5, times=8),
),
)
for i in 0..<8 {
let state = states[i % states.length()]
ignore(sim.schedule_at(i * 5, "light:" + state))
sim.set_gauge("phase_index", i)
if state == "green" {
sim.inc_counter("green_phases")
} else if state == "red" {
sim.inc_counter("red_phases")
}
}
for car in 0..<12 {
let arrive = sim.next_range(0, 40)
ignore(sim.schedule_at(arrive, "car:" + car.to_string() + ":arrive"))
sim.inc_counter("cars")
sim.sample("arrival_tick", arrive)
}
ignore(sim.run_until_idle())
let arrivals = sim.metrics().summary("arrival_tick")
println("traffic simulation")
println("cars=" + sim.metrics().counter("cars").to_string())
println("green_phases=" + sim.metrics().counter("green_phases").to_string())
println("red_phases=" + sim.metrics().counter("red_phases").to_string())
println("arrival_min=" + arrivals.min.to_string())
println("arrival_max=" + arrivals.max.to_string())
println(
"events_executed=" + sim.metrics().counter("events_executed").to_string(),
)
println("digest=" + sim.digest().to_string())
}