29 lines
1.7 KiB
JavaScript
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 }));
|