import assert from "node:assert/strict"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { createHalRuntime } from "../../../wasm-port/tests/wasm/node/hal_component_test_runtime.mjs"; const workspace = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../.."); const wasmPort = path.join(workspace, "wasm-port"); const manifest = JSON.parse(fs.readFileSync( path.join(wasmPort, "runtime/manifests/hal_component_precompile_manifest.json"), "utf8", )); const representativeHal = fs.readFileSync( path.join(wasmPort, "vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.hal"), "utf8", ); assert.equal(manifest.dynamicLoadrtSupported, false); assert.equal(manifest.unknownComponentPolicy, "blocked"); assert.ok(representativeHal.includes("loadrt mux2 names=J0_mux,J1_mux,J2_mux,J3_mux,J4_mux")); assert.ok(representativeHal.includes("loadrt scale names=rpm_rps")); assert.ok(representativeHal.includes("addf J0_mux servo-thread")); assert.ok(representativeHal.includes("addf rpm_rps servo-thread")); const { hal, loadHal, pin, setBit, setFloat, snapshot } = await createHalRuntime(); assert.equal(loadHal("xyzac-component-evidence.hal", [ "loadrt mux2 names=J0_mux,J1_mux,J2_mux,J3_mux,J4_mux", "loadrt scale names=rpm_rps", "addf J0_mux servo-thread", "addf rpm_rps servo-thread", "", ].join("\n")), 0); setFloat("J0_mux.in0", -12.5); setFloat("J0_mux.in1", 37.25); setBit("J0_mux.sel", true); setFloat("rpm_rps.in", 1200); setFloat("rpm_rps.gain", 1 / 60); setFloat("rpm_rps.offset", 0); assert.equal(hal._lchal_step_threads(1000000, 1), 0); assert.equal(pin("J0_mux.out").value, 37.25); assert.ok(Math.abs(pin("rpm_rps.out").value - 20) <= 1e-12); assert.equal(loadHal("xyzac-unknown-component.hal", "loadrt web-local-formula\n"), 2); const state = snapshot(); assert.ok(state.events.includes("loadrt:mux2:precompiled")); assert.ok(state.events.includes("loadrt:scale:precompiled")); assert.ok(state.events.includes("executed:servo-thread:J0_mux")); assert.ok(state.events.includes("executed:servo-thread:rpm_rps")); assert.ok(state.events.includes("blocked:loadrt-unknown:web-local-formula")); console.log("xyzac_trt_hal_component_manifest=ok"); console.log("xyzac_trt_hal_component_execution=ok"); console.log("xyzac_trt_unknown_loadrt_blocked=ok");