Skip to content

runner チュートリアル

一般的な single-step benchmark は immutable description として構築し、 measurement effect の前に compile します。

moonbit
let baseline = @runner.Implementation::stateless(
  "baseline", "1", input => @model.OperationResult::completed(add(input), ()),
)
let candidate = @runner.Implementation::stateless(
  "candidate", "1", input => @model.OperationResult::completed(add_fast(input), ()),
)
let plan = @runner.single_step("vector_add", scales)
  .with_immutable_input(generate, fingerprint)
  .compare([baseline, candidate])
  .against_equal(reference, (expected, actual) => expected == actual)
  .compile()
  .unwrap()
let protocol = @runner.ProtocolPreset::Development.validated()
let context = @runner.RunContext::new(environment, sink, seed, protocol)
let summary = @runner.run(plan, context)

stateful または multi-step case では fixture、implementation、oracle、sink の明示的な combinator を使います。summary の前に raw observation を保存します。

JS と native は別 run とし、elapsed value を同じ母集団として比較しません。