129 lines
7.7 KiB
JavaScript
129 lines
7.7 KiB
JavaScript
import assert from "node:assert/strict";
|
|
|
|
import { xyzacTrtProfile } from "../../app/src/profiles/xyzac-trt.js";
|
|
import { getFiveAxisProfile, fiveAxisProfiles } from "../../app/src/profiles/index.js";
|
|
import { createPyvcpHalBindingSummary, xyzacTrtPyvcpPanelSchema } from "../../app/src/panel-schema/xyzac-trt-pyvcp.js";
|
|
import { createLinuxCncBoundaryAdapter, createLinuxCncBoundaryReadiness } from "../../app/src/runtime/linuxcnc-boundary-adapter.js";
|
|
import { createLinuxCncKinematicsRuntime } from "../../app/src/runtime/linuxcnc-kinematics-runtime.js";
|
|
import { createProfileSourceReferenceSummary } from "../../app/src/profiles/source-reference-map.js";
|
|
|
|
assert.equal(xyzacTrtProfile.id, "xyzac-trt");
|
|
assert.equal(xyzacTrtProfile.iniPath.endsWith("xyzac-trt.ini"), true);
|
|
assert.deepEqual(xyzacTrtProfile.coordinates, ["X", "Y", "Z", "A", "C"]);
|
|
assert.equal(xyzacTrtProfile.kinematics, "xyzac-trt-kins");
|
|
assert.equal(xyzacTrtProfile.machineName, "sim-xyzac-trt-kins (switchkins)");
|
|
assert.equal(xyzacTrtProfile.display.jogAxes.join(""), "XYZC");
|
|
assert.equal(xyzacTrtProfile.rs274ngc.halPinVars, true);
|
|
assert.equal(xyzacTrtProfile.traj.coordinates, "XYZAC");
|
|
assert.equal(xyzacTrtProfile.axisLimits.A.max, 50);
|
|
assert.equal(xyzacTrtProfile.jointConfig.length, 5);
|
|
assert.equal(xyzacTrtProfile.halui.mdiCommands.join(","), "M429,M428,M430");
|
|
assert.equal(xyzacTrtProfile.hal.halcmd.switchkinsSelectNet.target, "motion.switchkins-type");
|
|
assert.equal(xyzacTrtProfile.hal.halcmd.feedbackNets.length, 5);
|
|
assert.equal(xyzacTrtProfile.hal.halcmd.offsetNets.length, 4);
|
|
assert.equal(xyzacTrtProfile.toolTable.toolCount, 10);
|
|
assert.equal(xyzacTrtProfile.toolTable.tools[1].zOffset, 15);
|
|
assert.equal(xyzacTrtProfile.kinematicsParameters.sparm, "identityfirst");
|
|
assert.equal(xyzacTrtProfile.remaps.map((remap) => remap.code).join(","), "M428,M429,M430");
|
|
assert.equal(xyzacTrtProfile.remaps.every((remap) => remap.analogOutputIndex === 3), true);
|
|
assert.equal(xyzacTrtProfile.halPins.includes("motion.switchkins-type"), true);
|
|
assert.equal(xyzacTrtProfile.halPins.includes("xyzac-trt-kins.tool-offset"), true);
|
|
assert.equal(xyzacTrtProfile.promotionAllowed, false);
|
|
assert.equal(xyzacTrtProfile.linuxCncKinematicsReady, false);
|
|
assert.deepEqual(fiveAxisProfiles.map(({ id }) => id), ["xyzac-trt", "xyzbc-trt", "gmoccapy-xyzab"]);
|
|
|
|
const xyzbcTrtProfile = getFiveAxisProfile("xyzbc-trt");
|
|
assert.equal(xyzbcTrtProfile.id, "xyzbc-trt");
|
|
assert.equal(xyzbcTrtProfile.iniPath.endsWith("xyzbc-trt.ini"), true);
|
|
assert.deepEqual(xyzbcTrtProfile.coordinates, ["X", "Y", "Z", "B", "C"]);
|
|
assert.equal(xyzbcTrtProfile.kinematics, "xyzbc-trt-kins");
|
|
assert.equal(xyzbcTrtProfile.kinematicsModuleId, "xyzbc-trt");
|
|
assert.equal(xyzbcTrtProfile.machineName, "sim-xyzbc-trt-kins (switchkins)");
|
|
assert.equal(xyzbcTrtProfile.traj.coordinates, "XYZBC");
|
|
assert.equal(xyzbcTrtProfile.axisLimits.B.max, 36000);
|
|
assert.equal(xyzbcTrtProfile.hal.halcmd.feedbackNets.some((net) => net.target === "xyzbc-trt-gui.tilt-b"), true);
|
|
assert.equal(xyzbcTrtProfile.halPins.includes("xyzbc-trt-kins.x-offset"), true);
|
|
assert.equal(xyzbcTrtProfile.panelSchema.id, "xyzbc-trt-switchkins-pyvcp");
|
|
|
|
const sourceSummary = createProfileSourceReferenceSummary("xyzac-trt");
|
|
assert.equal(sourceSummary.referenceCount >= 8, true);
|
|
assert.equal(sourceSummary.kinds.includes("tool_table"), true);
|
|
assert.equal(sourceSummary.sourceRequiredCount >= 3, true);
|
|
assert.equal(sourceSummary.promotionAllowed, false);
|
|
assert.equal(sourceSummary.semanticBoundary, "profile_source_map_only_not_runtime_proof");
|
|
assert.ok(sourceSummary.references.some((reference) => reference.path.endsWith("xyzac-trt.ini")));
|
|
assert.ok(sourceSummary.references.some((reference) => reference.path.endsWith("trtfuncs.c")));
|
|
|
|
const xyzbcSourceSummary = createProfileSourceReferenceSummary("xyzbc-trt");
|
|
assert.equal(xyzbcSourceSummary.referenceCount >= 7, true);
|
|
assert.ok(xyzbcSourceSummary.references.some((reference) => reference.path.endsWith("xyzbc-trt.ini")));
|
|
assert.ok(xyzbcSourceSummary.references.some((reference) => reference.path.endsWith("xyzbc-trt-kins.c")));
|
|
|
|
const gmoccapyXyzabProfile = getFiveAxisProfile("gmoccapy-xyzab");
|
|
assert.equal(gmoccapyXyzabProfile.id, "gmoccapy-xyzab");
|
|
assert.deepEqual(gmoccapyXyzabProfile.coordinates, ["X", "Y", "Z", "A", "B"]);
|
|
assert.equal(gmoccapyXyzabProfile.kinematics, "trivkins coordinates=xyzab");
|
|
assert.equal(gmoccapyXyzabProfile.tcpCapable, false);
|
|
assert.equal(gmoccapyXyzabProfile.rtcpProof, false);
|
|
assert.equal(gmoccapyXyzabProfile.promotionAllowed, false);
|
|
assert.equal(gmoccapyXyzabProfile.hal.postguiRequiresHalcompReady, true);
|
|
assert.equal(gmoccapyXyzabProfile.hal.halcmd.toolChange.strategy, "iocontrol-loopback");
|
|
assert.equal(gmoccapyXyzabProfile.hal.halcmd.toolChange.manualGmoccapyPinsConnected, false);
|
|
const gmoccapySourceSummary = createProfileSourceReferenceSummary("gmoccapy-xyzab");
|
|
assert.equal(gmoccapySourceSummary.referenceCount >= 10, true);
|
|
assert.ok(gmoccapySourceSummary.references.some((reference) => reference.path.endsWith("gmoccapy_XYZAB.ini")));
|
|
assert.ok(gmoccapySourceSummary.references.some((reference) => reference.path.endsWith("gmoccapy_postgui.hal")));
|
|
|
|
const panelSummary = createPyvcpHalBindingSummary(xyzacTrtPyvcpPanelSchema);
|
|
assert.equal(panelSummary.schemaId, "xyzac-trt-switchkins-pyvcp");
|
|
assert.equal(panelSummary.controlCount, 5);
|
|
assert.equal(panelSummary.buttonCount, 4);
|
|
assert.deepEqual(panelSummary.mdiCommands, ["M429", "M428", "M430"]);
|
|
assert.ok(panelSummary.halNets.some((net) => net.target === "halui.mdi-command-01"));
|
|
assert.equal(panelSummary.promotionAllowed, false);
|
|
|
|
const adapter = createLinuxCncBoundaryAdapter();
|
|
assert.equal(adapter.apiName, "web-rtcp-5axis-linuxcnc-boundary-adapter");
|
|
assert.equal(adapter.profileId, "xyzac-trt");
|
|
assert.equal(adapter.runtimeReady, false);
|
|
assert.equal(adapter.kinematicsRuntimeReady, false);
|
|
assert.equal(adapter.interpreterRuntimeReady, false);
|
|
assert.equal(adapter.linuxCncKinematicsReady, false);
|
|
assert.equal(adapter.promotionAllowed, false);
|
|
assert.equal(adapter.profileSummary.coordinates, "XYZAC");
|
|
assert.equal(adapter.profileSummary.jointCount, 5);
|
|
assert.equal(adapter.profileSummary.mdiCommandCount, 3);
|
|
assert.equal(adapter.profileSummary.toolCount, 10);
|
|
assert.equal(adapter.profileSummary.feedbackNetCount, 5);
|
|
assert.equal(adapter.adapterPoints.pyvcpSchemaId, "xyzac-trt-switchkins-pyvcp");
|
|
assert.equal(adapter.adapterPoints.halPins.includes("halui.mdi-command-00"), true);
|
|
|
|
const readiness = createLinuxCncBoundaryReadiness(adapter);
|
|
assert.equal(readiness.ready, false);
|
|
assert.equal(readiness.linuxCncKinematicsReady, false);
|
|
assert.equal(readiness.promotionAllowed, false);
|
|
assert.ok(readiness.missing.includes("kinematics runtime"));
|
|
assert.ok(readiness.missing.includes("interpreter/remap runtime"));
|
|
|
|
const runtime = await createLinuxCncKinematicsRuntime({ moduleId: "xyzac-trt" });
|
|
const kinematicsAdapter = createLinuxCncBoundaryAdapter({
|
|
runtime: {
|
|
kinematicsWasm: runtime.readiness(),
|
|
interpreterWasm: null,
|
|
},
|
|
});
|
|
const kinematicsReadiness = createLinuxCncBoundaryReadiness(kinematicsAdapter);
|
|
assert.equal(kinematicsAdapter.runtimeReady, false);
|
|
assert.equal(kinematicsAdapter.kinematicsRuntimeReady, true);
|
|
assert.equal(kinematicsAdapter.interpreterRuntimeReady, false);
|
|
assert.equal(kinematicsAdapter.linuxCncKinematicsReady, true);
|
|
assert.equal(kinematicsAdapter.promotionAllowed, true);
|
|
assert.equal(kinematicsAdapter.fullLinuxCncProgramExecutionReady, false);
|
|
assert.equal(kinematicsAdapter.semanticBoundary, "linuxcnc_kinematics_wasm_runtime_connected");
|
|
assert.equal(kinematicsReadiness.ready, true);
|
|
assert.equal(kinematicsReadiness.linuxCncKinematicsReady, true);
|
|
assert.equal(kinematicsReadiness.fullLinuxCncProgramExecutionReady, false);
|
|
assert.ok(kinematicsReadiness.missing.includes("interpreter/remap runtime"));
|
|
|
|
console.log("profile_boundary_smoke=ok");
|