81 lines
3.7 KiB
JavaScript
81 lines
3.7 KiB
JavaScript
import assert from "node:assert/strict";
|
|
|
|
import { createLinuxCncInterpreterRuntime } from "../../app/src/runtime/linuxcnc-interpreter-runtime.js";
|
|
|
|
const runtime = await createLinuxCncInterpreterRuntime();
|
|
const readiness = runtime.readiness();
|
|
|
|
assert.equal(runtime.apiName, "web-rtcp-5axis-linuxcnc-interpreter-runtime");
|
|
assert.equal(runtime.loaded, true);
|
|
assert.equal(runtime.sourceMode, "linuxcnc-interpreter-wasm");
|
|
assert.equal(runtime.semanticBoundary, "linuxcnc_interpreter_wasm_canonical_events");
|
|
assert.equal(readiness.loaded, true);
|
|
assert.equal(readiness.runProgramReady, true);
|
|
assert.equal(readiness.remapRuntimeReady, false);
|
|
assert.equal(readiness.plannerRuntimeReady, true);
|
|
assert.equal(readiness.plannerSemanticBoundary, "linuxcnc_tp_queue_runtime_timing_from_canonical_motion");
|
|
|
|
const programText = [
|
|
"G90 G17",
|
|
"G0 X0 Y0 Z0",
|
|
"G1 X10 Y2 F100",
|
|
"G1 X12 Y4 A5 C7",
|
|
"M2",
|
|
].join("\n");
|
|
const execution = runtime.runProgram(programText);
|
|
|
|
assert.equal(execution.apiName, "web-rtcp-5axis-linuxcnc-interpreter-program-execution");
|
|
assert.equal(execution.sourceMode, "linuxcnc-interpreter-wasm");
|
|
assert.equal(execution.semanticBoundary, "linuxcnc_interpreter_wasm_canonical_events");
|
|
assert.equal(execution.summary.ready, true);
|
|
assert.equal(execution.summary.motionEventCount >= 3, true);
|
|
assert.equal(execution.summary.canonicalEventCount > execution.summary.motionEventCount, true);
|
|
assert.equal(execution.summary.motionTypes.includes("STRAIGHT_TRAVERSE"), true);
|
|
assert.equal(execution.summary.motionTypes.includes("STRAIGHT_FEED"), true);
|
|
assert.equal(execution.summary.finalAxes.x, 12);
|
|
assert.equal(execution.summary.finalAxes.y, 4);
|
|
assert.equal(execution.summary.finalAxes.a, 5);
|
|
assert.equal(execution.summary.finalAxes.c, 7);
|
|
assert.equal(execution.motion[2].feedRate, 100);
|
|
assert.equal(execution.summary.remapRuntimeReady, false);
|
|
assert.equal(execution.summary.plannerRuntimeReady, true);
|
|
assert.equal(execution.plannerTiming.semanticBoundary, "linuxcnc_tp_queue_runtime_timing_from_canonical_motion");
|
|
assert.equal(execution.plannerTiming.totalSeconds > 0, true);
|
|
assert.equal(execution.plannerTiming.motionCount, execution.motion.length);
|
|
assert.equal(execution.summary.fullLinuxCncProgramExecutionReady, false);
|
|
|
|
const switchkinsProgramText = [
|
|
"G90 G17",
|
|
"M428",
|
|
"G0 X0 Y0 Z0 A0 C0",
|
|
"G1 X10 Y2 Z-1 A15 C30 F120",
|
|
"M429",
|
|
"G1 X0 Y0 Z0 A0 C0 F120",
|
|
"M2",
|
|
].join("\n");
|
|
const switchkinsExecution = runtime.runProgram(switchkinsProgramText);
|
|
|
|
assert.equal(switchkinsExecution.summary.ready, true);
|
|
assert.equal(switchkinsExecution.summary.motionEventCount, 3);
|
|
assert.equal(switchkinsExecution.summary.switchkinsEventCount, 2);
|
|
assert.deepEqual(switchkinsExecution.summary.switchkinsCodes, ["M428", "M429"]);
|
|
assert.equal(
|
|
switchkinsExecution.summary.switchkinsRemapBoundary,
|
|
"linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied",
|
|
);
|
|
assert.equal(switchkinsExecution.switchkinsEvents[0].switchkinsType, 1);
|
|
assert.equal(switchkinsExecution.switchkinsEvents[1].switchkinsType, 0);
|
|
assert.equal(switchkinsExecution.motion[0].kinsType, "tcp");
|
|
assert.equal(switchkinsExecution.motion[1].axes.a, 15);
|
|
assert.equal(switchkinsExecution.motion[1].axes.c, 30);
|
|
assert.equal(switchkinsExecution.motion[1].switchkinsCode, "M428");
|
|
assert.equal(switchkinsExecution.motion[2].kinsType, "identity");
|
|
assert.equal(switchkinsExecution.motion[2].switchkinsCode, "M429");
|
|
|
|
assert.equal(switchkinsExecution.summary.remapRuntimeReady, false);
|
|
assert.equal(switchkinsExecution.summary.plannerRuntimeReady, true);
|
|
assert.equal(switchkinsExecution.plannerTiming.totalSeconds > 0, true);
|
|
assert.equal(switchkinsExecution.summary.fullLinuxCncProgramExecutionReady, false);
|
|
|
|
console.log("linuxcnc_interpreter_runtime_smoke=ok");
|