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的值。 可以,因为它们是相同的类型;无需任何转换。