Files
cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs

73 lines
3.7 KiB
JavaScript

import assert from "node:assert/strict";
import {
createGmoccapyHalSummary,
gmoccapyHalModel,
} from "../../app/src/runtime/gmoccapy-hal-model.js";
const model = gmoccapyHalModel;
assert.equal(model.apiName, "web-rtcp-5axis-gmoccapy-hal-model");
assert.equal(model.profileId, "gmoccapy-xyzab");
assert.equal(model.nativeConfigPath.endsWith("gmoccapy_XYZAB.ini"), true);
assert.equal(model.semanticBoundary, "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only");
assert.equal(model.halFiles.length, 4);
assert.equal(model.halFiles.some((file) => file.path.endsWith("core_sim_XYZAB.hal") && file.stage === "HALFILE"), true);
assert.equal(model.halFiles.some((file) => file.path.endsWith("spindle_sim.hal") && file.stage === "HALFILE"), true);
assert.equal(model.halFiles.some((file) => file.path.endsWith("simulated_home.hal") && file.stage === "HALFILE"), true);
assert.equal(model.halFiles.some((file) => file.path.endsWith("gmoccapy_postgui.hal") && file.requiresHalcompReady), true);
const groups = new Map(model.nativePins.map((group) => [group.group, group]));
for (const groupName of [
"hard-buttons",
"jog",
"override",
"tool",
"program",
"message",
"spindle-postgui",
]) {
assert.equal(groups.has(groupName), true, `${groupName} missing`);
}
assert.equal(groups.get("hard-buttons").pins.includes("gmoccapy.h-button.button-0"), true);
assert.equal(groups.get("hard-buttons").pins.includes("gmoccapy.v-button.button-6"), true);
assert.equal(groups.get("jog").pins.includes("gmoccapy.jog.axis.jog-b-minus"), true);
assert.equal(groups.get("override").pins.includes("gmoccapy.rapid.rapid-override.direct-value"), true);
assert.equal(groups.get("tool").pins.includes("gmoccapy.toolchange-changed"), true);
assert.equal(groups.get("program").pins.includes("gmoccapy.program.current-line"), true);
assert.equal(groups.get("message").pins.includes("gmoccapy.error"), true);
assert.equal(groups.get("spindle-postgui").pins.includes("gmoccapy.spindle_at_speed_led"), true);
assert.equal(model.coreNets.length, 10);
assert.equal(model.coreNets.some((net) => net.signal === "Xpos" && net.target === "joint.0.motor-pos-fb"), true);
assert.equal(model.coreNets.some((net) => net.signal === "Bpos" && net.target === "joint.4.motor-pos-fb"), true);
assert.equal(model.coreNets.some((net) => net.signal === "estop-loop"), true);
assert.equal(model.coreNets.some((net) => net.signal === "tool-change-loop"), true);
assert.equal(model.spindleNets.length, 4);
assert.equal(model.spindleNets.some((net) => net.signal === "spindle-speed-cmd"), true);
assert.equal(model.spindleNets.some((net) => net.signal === "spindle-at-speed"), true);
assert.equal(model.postguiNets.length, 5);
assert.equal(model.postguiNets.every((net) => net.requiresHalcompReady), true);
assert.equal(model.postguiNets.some((net) => net.target === "gmoccapy.spindle_feedback_bar"), true);
assert.equal(model.postguiNets.some((net) => net.target === "gmoccapy.tooloffset-x"), true);
assert.equal(model.postguiNets.some((net) => net.simulationLoop && net.signal === "tool-change-loop"), true);
const summary = createGmoccapyHalSummary(model);
assert.equal(summary.apiName, "web-rtcp-5axis-gmoccapy-hal-model-summary");
assert.equal(summary.profileId, "gmoccapy-xyzab");
assert.equal(summary.halFileCount, 4);
assert.equal(summary.nativePinGroupCount, 7);
assert.equal(summary.nativePinCount >= 50, true);
assert.equal(summary.coreNetCount, 10);
assert.equal(summary.spindleNetCount, 4);
assert.equal(summary.postguiNetCount, 5);
assert.equal(summary.postguiRequiresHalcompReady, true);
assert.equal(summary.hasToolChangeSimulationLoop, true);
assert.equal(summary.semanticBoundary, model.semanticBoundary);
console.log("gmoccapy_hal_model_smoke=ok");