ir_sink のチュートリアル

この短いチュートリアルでは、ir_sink の短縮形を使って、ベンチマークのイベントをメモリと JSONL 記録の両方につなぎます。

クイックスタート

moon add Luna-Flow/mare_mark@0.3.0
import {
  "Luna-Flow/mare_mark/model",
  "Luna-Flow/mare_mark/ir_sink",
}
test "memory and record in one sink" {
  let memory = @ir_sink.in_memory()
  let record = @ir_sink.jsonl()
  let sink = @ir_sink.tee(memory.as_sink(), record.as_sink())
  (sink.emit_validation)(@model.Validation::new(Valid, "reference", "loop", "1024"))
  inspect(memory.validations.length(), content="1")
  inspect(record.to_jsonl().contains("\"status\":\"valid\""), content="true")
}

日常的な作業

ライターへストリーミングする

test "stream" {
  let lines : Array[String] = []
  let sink = @ir_sink.jsonl_stream(line => lines.push(line), "stdout")
  (sink.emit_validation)(@model.Validation::new(Unsupported("no NaN support"), "reference", "fast", "8"))
  inspect(lines[0].contains("\"status\":\"unsupported\""), content="true")
}

シンクを @runner.RunContext::new に渡してください。完全な実行は runner のチュートリアルに示しています。

さらに先へ

ここで返されるものはすべて @event の型です。独自のシンクと記録の形式については event のチュートリアルを参照してください。

よくある落とし穴

  • ir_sink と event の値を混在させる。 同じ型なので問題なく動作します。変換は不要です。

次のステップ