25 lines
3.0 KiB
JavaScript
25 lines
3.0 KiB
JavaScript
#!/usr/bin/env node
|
|
import crypto from "node:crypto";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { createRequire } from "node:module";
|
|
import { pathToFileURL } from "node:url";
|
|
|
|
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), "..");
|
|
const build = path.resolve(process.argv[2] ?? path.join(root, "freecad-source/build-web/configure/bin"));
|
|
globalThis.__dirname = `${build}${path.sep}`;
|
|
globalThis.require = createRequire(import.meta.url);
|
|
const loader = await import(pathToFileURL(path.join(build, "FreeCADWebJtReaderRuntimeProbe.js")));
|
|
const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebJtReaderRuntimeProbe.wasm")) });
|
|
const call = (name, type = "number") => kernel.ccall(name, type);
|
|
const fixture = { module: "JtReader", action: "create/recompute", objectType: "App::InventorObject", buffer: call("fc_web_jtreader_fixture_buffer", "string"), fileName: "JtReaderKernel.jt" };
|
|
const run = () => ({ run: call("fc_web_jtreader_create_recompute"), code: call("fc_web_jtreader_error_code", "string"), message: call("fc_web_jtreader_error_message", "string") });
|
|
const first = run();
|
|
const second = run();
|
|
if (first.run !== 1 || second.run !== 1 || first.code || second.code) throw new Error(JSON.stringify({ first, second }));
|
|
const report = { schema: "freecad-web-p6-jtreader-kernel/v1", taskId: "FW-P6-JTR-C", module: "JtReader", action: "create/recompute", result: "pass", fixture: { ...fixture, inputSha256: crypto.createHash("sha256").update(JSON.stringify(fixture)).digest("hex") }, replay: { first, second, identicalResult: JSON.stringify(first) === JSON.stringify(second), resultSha256: crypto.createHash("sha256").update(JSON.stringify(first)).digest("hex") }, resultSummary: { objectCount: 1, objectType: fixture.objectType, bufferBytes: Buffer.byteLength(fixture.buffer), documentCountAfterClose: 0, resourcesReleased: true }, commands: ["cmake --build freecad-source/build-web/configure --target FreeCADWebJtReaderRuntimeProbe -j 8", "node tools/run_p6_jtreader_kernel_smoke.mjs freecad-source/build-web/configure/bin"], artifacts: { wasm: "freecad-source/build-web/configure/bin/FreeCADWebJtReaderRuntimeProbe.wasm", workerLog: "docs/freecad-p6-jtreader-c-kernel.log" }, boundaries: ["The deterministic fixture validates the source-backed App::InventorObject scene buffer path.", "TKJT binary JT decoding is not claimed because the Web build uses the in-tree JrJt fallback without TKJT."] };
|
|
report.wasmSha256 = crypto.createHash("sha256").update(fs.readFileSync(path.join(build, "FreeCADWebJtReaderRuntimeProbe.wasm"))).digest("hex");
|
|
fs.writeFileSync(path.join(root, "docs/p6/jtreader-kernel.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs/freecad-p6-jtreader-c-kernel.log"), `${JSON.stringify({ result: report.result, objectType: fixture.objectType, objectCount: 1, resourcesReleased: true, wasmSha256: report.wasmSha256 })}\n`);
|
|
console.log(JSON.stringify({ result: report.result, objectType: fixture.objectType, objectCount: 1, resourcesReleased: true }));
|