///|
pub fn run_benchmarks() -> BenchmarkReport {
  let measurements : Array[BenchmarkMeasurement] = []
  for item in benchmark_sizes() {
    let (name, token_count) = item
    measurements.push(run_benchmark_case(name, token_count))
  }
  { toolchain: "moonbit-brandbook " + version(), measurements }
}

///|
fn run_benchmark_case(name : String, token_count : Int) -> BenchmarkMeasurement {
  let source = benchmark_fixture_json(token_count)
  let start = @env.now()
  let parsed = parse_brand_document(source)
  let output = match parsed.value {
    Some(book) =>
      book.to_html() + book.to_theme_json() + book.to_tailwind_theme()
    None => diagnostics_to_text(parsed.diagnostics)
  }
  let elapsed = @env.now() - start
  {
    name,
    operations: 3,
    token_count,
    input_bytes: source.length(),
    output_bytes: output.length(),
    elapsed_units: elapsed,
  }
}