import test from "node:test"; import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import { StreamedJob } from "../src/lib/streamed-job.js"; import { samplePacked } from "../src/lib/packed-playback.js"; const metadata = JSON.parse(await readFile("public/data/stream.json", "utf8")); const bytes = await readFile("public/data/print-job.bin"); const full = { ...metadata, buffer: new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4) }; const request = async (url) => { const bytes = await readFile(`public${url}`); return new Response(bytes); }; const makeJob = async () => { const response = await request(`/data/stream/${metadata.version}/overview.bin`); return new StreamedJob(metadata, new Float32Array(await response.arrayBuffer()), request); }; test("所有分层数据完整覆盖原始路径且边界采样一致", async () => { const job = await makeJob(); let end = 0; for (const chunk of metadata.chunks) { assert.equal(chunk.start, end); await job.ensure(chunk.endTime, false); for (const time of [chunk.startTime + 0.001, (chunk.startTime + chunk.endTime) / 2, chunk.endTime]) { assert.deepEqual(samplePacked(job, time), samplePacked(full, time)); } end = chunk.end; } assert.equal(end, metadata.count); assert.deepEqual(job.buffer, full.buffer); }); test("失败分块可重试且不得伪造可用状态", async () => { const job = await makeJob(); job.request = async () => new Response("", { status: 503 }); await assert.rejects(job.ensure(100, false), /加载失败/); assert.equal(job.ready(100), false); assert.equal(job.pending.size, 0); job.request = request; await job.ensure(100, false); assert.equal(job.ready(100), true); }); test("演讲准备完整校验路径和原始指令", async () => { const job = await makeJob(); await job.loadAll(); assert.equal(job.loaded.size, metadata.chunks.length); assert.deepEqual(job.buffer, full.buffer); const sample = samplePacked(job, metadata.duration * 0.63); assert.match(job.commands[sample.line], /^G1/); }); test("完整路径并发加载复用请求且不阻止当前层下载", async () => { const job = await makeJob(); let requests = 0; job.request = async (...args) => { requests++; return request(...args); }; await Promise.all([job.loadAll(), job.loadAll(), job.ensure(100, false)]); assert.equal(requests, 4); assert.equal(job.fullLoad, null); assert.deepEqual(job.buffer, full.buffer); });