///|
fn benchmark_item(index : Int) -> @core.EvidenceItem {
let content = "benchmark-evidence-" + index.to_string()
@core.EvidenceItem::new(
"BENCH-" + index.to_string(),
index,
"Benchmark evidence " + index.to_string(),
"evidence/" + index.to_string() + ".pdf",
@core.Category::PdfDocument,
@digest.compute_string_digest(content),
@core.SourceNote::default_note("benchmark"),
)
}
///|
fn benchmark_batch(count : Int) -> @pipeline.EvidenceBatch {
let items : Array[@core.EvidenceItem] = []
for index = 1; index <= count; index = index + 1 {
items.push(benchmark_item(index))
}
@pipeline.EvidenceBatch::from_items(items)
}
///|
fn run_benchmark(count : Int) -> String {
let batch = benchmark_batch(count)
let started = @env.now()
let assessment = @pipeline.assess_batch(
batch,
@pipeline.BatchPolicy::strict(),
)
let elapsed = (@env.now() - started).reinterpret_as_int64()
@pipeline.format_benchmark_line(
count,
elapsed,
assessment.snapshot.canonical_bytes(),
assessment.archive_ready(),
assessment.snapshot.digest,
assessment.verification.merkle_root,
)
}
///|
fn main {
println("MoonBit Notary benchmark")
println(
"items | elapsed_ms | items_per_second | canonical_bytes | archive_ready | snapshot | merkle",
)
println("--- | ---: | ---: | ---: | --- | --- | ---")
for count in [100, 1000, 5000] {
println(run_benchmark(count))
}
}