55 lines
2.3 KiB
JavaScript
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");
|