Files
linuxcncWebWASM/web/app/test_browser_compatibility_s3.mjs

29 lines
1.7 KiB
JavaScript

import assert from "node:assert/strict";
import { WorkerClient } from "./worker-client.mjs";
import { runCompatibilityMatrix, performanceBudget } from "./browser-compatibility.mjs";
class CompatibilityWorker {
constructor() { this.onmessage = null; this.onerror = null; this.tick = 0; }
postMessage(message) {
if (message.kind === "SIM_STEP") this.tick += message.payload.cycles;
queueMicrotask(() => this.onmessage?.({ data: {
schema_version: 1, kind: message.kind === "HELLO" ? "CAPABILITIES" : message.kind === "SESSION_ATTACH" ? "SESSION_READY" : message.kind === "SNAPSHOT_REQUEST" ? "STATE_SNAPSHOT" : "COMMAND_RESULT",
context_id: message.context_id, session_id: message.session_id, seq: message.seq, operation_id: message.operation_id, simulation_tick: this.tick, payload: { status: "verified", tick: this.tick },
} }));
}
terminate() {}
}
const client = new WorkerClient({ worker: new CompatibilityWorker(), sessionId: "compat-s3", timeoutMs: 1000 });
const matrix = await runCompatibilityMatrix(client, { cycles: 8, chunk: 2 });
assert.equal(matrix.status, "verified");
assert.equal(matrix.logical_tick, 8);
assert.equal(matrix.chunks, 4);
assert.equal(performanceBudget({ cycles: 8, chunks: 4 }).logical_only, true);
assert.equal(performanceBudget({ cycles: 1000001, chunks: 1 }).code, "browser_performance_budget");
client.close();
const deterministic = new WorkerClient({ worker: new CompatibilityWorker() });
assert.equal(deterministic.sessionId, "ui-1");
deterministic.close();
console.log(JSON.stringify({ schema: "browser-compatibility-s3-sample.v1", status: "verified", logical_tick: matrix.logical_tick, chunks: matrix.chunks, session_id: matrix.session_id }));