Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_hal_component_runtime_evidence.mjs
2026-07-10 21:26:42 -04:00

55 lines
2.3 KiB
JavaScript

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