///|
fn main {
  let runner = @moonbench.BenchmarkRunner::new(warmup=1, iterations=3)
  let mut small_counter = 0
  let small = runner.run_timed("counter/small-step", () => {
    small_counter = small_counter + 1
    ignore(small_counter)
  })
  let mut batch_counter = 0
  let batch = runner.run_timed("counter/batch-step", () => {
    for _ in 0..<100 {
      batch_counter = batch_counter + 1
    }
    ignore(batch_counter)
  })
  let suite = @moonbench.BenchmarkSuite::new(
      title="MoonBench demo report",
      package_name="Han-Wentao/moonbench",
      package_version="0.3.0",
      target="wasm-gc",
      note="Generated by cmd/main",
    )
    .add(small)
    .add(batch)
  let baseline_text = @moonbench.BaselineSet::new()
    .add("counter/small-step", small.stats.mean_us)
    .add("counter/batch-step", batch.stats.mean_us * 1.10)
    .to_text()
  let baselines = @moonbench.BaselineSet::parse_text(baseline_text).baselines
  let comparison = baselines.compare_suite(suite, tolerance_pct=5.0)
  let gate = @moonbench.GateReport::from_comparison_report(
    comparison,
    policy=@moonbench.ThresholdPolicy::balanced(),
  )
  let scenarios = @moonbench.ScenarioCatalog::moonbench_standard().filter_priority(
    85,
  )
  let scorecard = @moonbench.ProjectScorecard::moonbench_standard(
    actual_loc=4800,
  )
  let summary = @moonbench.ReviewerSummary::moonbench_standard()
  println(suite.to_markdown())
  println(comparison.to_markdown())
  println(gate.to_markdown())
  println(scenarios.to_markdown())
  println(scorecard.to_markdown())
  println(summary.to_markdown())
  println("CSV artifact:")
  println(suite.to_csv())
  println("JSON artifact:")
  println(suite.to_json())
}