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 }));