///|
/// Measure the full in-memory read/decode/validate pipeline, without network I/O.
async fn measure(
label : String,
input : String,
records : Int32,
sse~ : Bool,
) -> Unit {
let samples : Array[Double] = []
for run in 0..<9 {
// Allow coroutine cleanup between samples outside the timed region.
@moon_async.pause()
let start = @bench.monotonic_clock_start()
let reader = @io.MemoryReader() <| writer => { writer.write(input) }
defer reader.close()
let valid = if sse {
@zod_async.validate_sse_json(reader, @core.unknown(), _ => ()).valid
} else {
@zod_async.validate_jsonl(reader, @core.unknown(), _ => ()).valid
}
assert_eq(valid, records)
let elapsed = @bench.monotonic_clock_end(start) / 1000.0
if run >= 2 {
samples.push(elapsed)
}
}
samples.sort()
println(
"\{label}: median \{samples[3]} ms (7 samples, 2 warmups, \{records} records)",
)
}
///|
async fn main {
measure(
"JSONL short",
"{\"name\":\"Ada\",\"active\":true}\n".repeat(20000),
20000,
sse=false,
)
measure(
"SSE short",
"data: {\"name\":\"Ada\"}\n\n".repeat(20000),
20000,
sse=true,
)
let long_record = "\"" + "a".repeat(16384) + "\"\n"
measure("JSONL 16 KiB", long_record.repeat(500), 500, sse=false)
}