///|
/// Wasm/package-facing helpers for M5-NATIVE-WASM-DIFF.
///|
pub fn package_id() -> String {
"lockwire/wasm"
}
///|
pub(all) struct DiffFingerprint {
scenario : String
seed : Int
digest : @core.SimDigest
} derive(Eq, Debug)
///|
pub fn p2p_trace_log(
seed~ : Int,
backend~ : @core.BackendProfile,
) -> @trace.TraceLog {
@sim.run_p2p_demo(seed~).to_trace_log(backend~)
}
///|
pub fn p2p_fingerprint(
seed~ : Int,
backend~ : @core.BackendProfile,
) -> DiffFingerprint {
{
scenario: "p2p",
seed,
digest: p2p_trace_log(seed~, backend~).portable_digest(seed~),
}
}
///|
pub fn p2p_native_wasm_match(seed~ : Int) -> Bool {
p2p_fingerprint(seed~, backend=@core.SimNative).digest ==
p2p_fingerprint(seed~, backend=@core.SimWasm).digest
}
///|
pub fn p2p_digest_line(seed~ : Int) -> String {
let fingerprint = p2p_fingerprint(seed~, backend=@core.SimNative)
"scenario=" +
fingerprint.scenario +
"|seed=" +
fingerprint.seed.to_string() +
"|trace_digest=" +
fingerprint.digest.state_digest.to_string() +
"|rng_steps=" +
fingerprint.digest.rng_steps.to_string() +
"|event_count=" +
fingerprint.digest.event_count.to_string()
}
///|
pub fn p2p_benchmark_report(
seed~ : Int,
backend~ : @core.BackendProfile,
) -> @trace.RuntimeBenchmarkReport {
@sim.p2p_benchmark_report(seed~, backend~)
}
///|
pub fn p2p_native_wasm_benchmark_match(seed~ : Int) -> Bool {
let native = p2p_benchmark_report(seed~, backend=@core.SimNative)
let wasm = p2p_benchmark_report(seed~, backend=@core.SimWasm)
native.digest == wasm.digest &&
native.metric_value("events/run") == wasm.metric_value("events/run") &&
native.metric_value("trace-bytes/run") == wasm.metric_value("trace-bytes/run")
}
///|
pub fn p2p_benchmark_line(seed~ : Int) -> String {
p2p_benchmark_report(seed~, backend=@core.SimNative).to_text()
}