///|
pub struct BenchArgs {
run_all : Bool
csv : Bool
startup_phases : Bool
list_only : Bool
rows : Array[String]?
}
///|
fn parse_benchmark_rows(raw : String) -> Array[String] raise {
let rows : Array[String] = []
for part in raw.split(",") {
let row = part.trim().to_owned()
if row != "" {
rows.push(row)
}
}
guard rows.length() > 0 else {
fail("--rows must select at least one benchmark row")
}
rows
}
///|
fn parse_bench_arg_values(args : ArrayView[String]) -> BenchArgs raise {
let mut run_all = false
let mut csv = false
let mut startup_phases = false
let mut list_only = false
let mut rows : Array[String]? = None
let mut i = 0
while i < args.length() {
match args[i] {
"--all" => run_all = true
"--csv" => csv = true
"--startup-phases" => startup_phases = true
"--list" => list_only = true
"--rows" => {
guard i + 1 < args.length() else {
fail("--rows requires a comma-separated value")
}
rows = Some(parse_benchmark_rows(args[i + 1]))
i += 1
}
flag => fail("unknown benchmark flag: " + flag)
}
i += 1
}
{ run_all, csv, startup_phases, list_only, rows, }
}