///|
fn main {
  println("moonbit-lbm: reusable D2Q9 lattice Boltzmann solver")
  let reports = @lbm.run_benchmark_suite()
  println("-- benchmark suite --")
  println(@lbm.benchmark_suite_csv(reports[:]))
  println(
    "stable_cases=\{@lbm.stable_benchmark_count(reports[:])}/\{reports.length()}",
  )

  let simulation = @lbm.Simulation::new(
    size=@lbm.Size::new(width=24, height=12),
    options=@lbm.SimulationOptions::new(
      model=@lbm.CollisionModel::bgk(omega=1.0),
      boundary=@lbm.BoundaryMode::Periodic,
      force_x=0.000001,
    ),
  )
  simulation.set_uniform(rho=1.0, ux=0.0, uy=0.0)
  simulation.run(20)
  println("-- reusable simulation --")
  println(simulation.state_summary())
  println("checkpoint_bytes=\{simulation.checkpoint_size()}")
}