///|
/// Return a JSON-like line for one benchmark case without external dependencies.
pub fn benchmark_case_line(case : BenchmarkCase) -> String {
"{\"name\":\"\{case.name}\",\"points\":\{case.points},\"mae\":\{case.summary.mae},\"rmse\":\{case.summary.rmse},\"mape\":\{case.summary.mape}}"
}
///|
/// Return benchmark rows for a log collector.
pub fn benchmark_lines(report : BenchmarkReport) -> Array[String] {
let lines : Array[String] = []
for case in report.cases {
lines.push(benchmark_case_line(case))
}
lines.push(
"{\"name\":\"aggregate\",\"points\":\{report.total_points},\"mae\":\{report.aggregate.mae},\"rmse\":\{report.aggregate.rmse}}",
)
lines
}
///|
/// Render a terminal-friendly benchmark table.
pub fn render_benchmark_table(report : BenchmarkReport) -> String {
let builder = StringBuilder()
builder.write_string("name points mae rmse confidence\n")
for case in report.cases {
builder.write_string(
"\{case.name} \{case.points} \{case.summary.mae} \{case.summary.rmse} \{case.mean_confidence}\n",
)
}
builder.write_string(
"all \{report.total_points} \{report.aggregate.mae} \{report.aggregate.rmse}\n",
)
builder.to_string()
}
///|
/// Return a plain-language benchmark interpretation.
pub fn benchmark_interpretation(report : BenchmarkReport) -> String {
if report.cases.length() == 0 {
"No benchmark cases were evaluated."
} else {
let best = match best_benchmark_case(report) {
Some(case) => case.name
None => "unknown"
}
let worst = match worst_benchmark_case(report) {
Some(case) => case.name
None => "unknown"
}
"best=\{best} worst=\{worst} cases=\{report.cases.length()} points=\{report.total_points}"
}
}
///|
/// Join benchmark metadata into one reproducible evidence block.
pub fn benchmark_evidence(report : BenchmarkReport, command : String) -> String {
let builder = StringBuilder()
builder.write_string("command: ")
builder.write_string(command)
builder.write_char('\n')
builder.write_string(benchmark_annotation(report))
builder.write_char('\n')
builder.write_string(benchmark_interpretation(report))
builder.write_char('\n')
builder.write_string(report.rendered)
builder.to_string()
}