3 lines
3.0 KiB
JavaScript
3 lines
3.0 KiB
JavaScript
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 docs = path.join(root, "docs/p6"); 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, "FreeCADWebReverseEngineeringRuntimeProbe.js"))); const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebReverseEngineeringRuntimeProbe.wasm")), print: () => {}, printErr: () => {} }); const c = (name, type = "number") => kernel.ccall(name, type); const run = () => ({ run: c("fc_web_reverseengineering_create_recompute"), error: c("fc_web_reverseengineering_action_error", "string"), objectType: c("fc_web_reverseengineering_action_object_type", "string"), length: c("fc_web_reverseengineering_action_length"), objectCount: c("fc_web_reverseengineering_action_object_count"), resourcesReleased: c("fc_web_reverseengineering_action_resources_released") }); const first = run(); const second = run(); const result = { first, second, deterministic: JSON.stringify(first) === JSON.stringify(second), pass: first.run === 1 && first.error === "" && first.objectType === "Part::Feature" && first.objectCount === 1 && first.length > 0 && first.resourcesReleased === 1 }; const fixture = { module: "ReverseEngineering", action: "create/recompute", points: [[0, 0, 0], [1, 1, 0], [2, 0, 0]], objectType: "Part::Feature" }; const hash = value => crypto.createHash("sha256").update(JSON.stringify(value)).digest("hex"); const report = { schema: "freecad-web-p6-reverseengineering-kernel/v1", taskId: "FW-P6-REV-C", module: "ReverseEngineering", action: "create/recompute", result: result.pass && result.deterministic ? "pass" : "fail", fixture: { ...fixture, inputSha256: hash(fixture) }, replay: { ...result, resultSha256: hash(result) }, commands: ["node tools/run_p6_reverseengineering_create_kernel.mjs freecad-source/build-web/configure/bin"], artifacts: { wasm: "freecad-source/build-web/configure/bin/FreeCADWebReverseEngineeringRuntimeProbe.wasm", workerLog: "docs/freecad-p6-reverseengineering-c-kernel.log" }, boundaries: ["The native App action creates a Part::Feature from ReverseEngineering.approxCurve().toShape(), recomputes, and closes the document before returning."] }; fs.writeFileSync(path.join(docs, "reverseengineering-kernel.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(root, "docs/freecad-p6-reverseengineering-c-kernel.log"), `${JSON.stringify({ result: report.result, deterministic: result.deterministic, objectType: first.objectType, length: first.length })}\n`); console.log(JSON.stringify({ result: report.result, deterministic: result.deterministic, objectType: first.objectType, length: first.length })); if (report.result !== "pass") process.exitCode = 1;
|