import assert from "node:assert/strict"; import { createLinuxCncKinematicsRuntime } from "../../app/src/runtime/linuxcnc-kinematics-runtime.js"; import { buildRtcpFrame } from "../../app/src/runtime/rtcp-frame.js"; const runtime = await createLinuxCncKinematicsRuntime({ moduleId: "xyzac-trt" }); const readiness = runtime.readiness(); assert.equal(runtime.apiName, "web-rtcp-5axis-linuxcnc-kinematics-runtime"); assert.equal(runtime.moduleId, "xyzac-trt"); assert.equal(runtime.loaded, true); assert.equal(runtime.sourceMode, "source-derived-kinematics-wasm"); assert.equal(runtime.semanticBoundary, "linuxcnc_kinematics_wasm_c_abi"); assert.equal(runtime.executionContext, "direct"); assert.equal(runtime.wasmFile, "linuxcnc_xyzac_trt_kinematics.wasm"); assert.equal(readiness.loaded, true); assert.equal(readiness.executionContext, "direct"); assert.equal(readiness.supportedModules.includes("xyzac-trt"), true); assert.equal(runtime.switchRc, 0); const linuxCncKinematicsResult = runtime.frameForJoints([10, 20, 30, 25, 40]); assert.equal(linuxCncKinematicsResult.moduleId, "xyzac-trt"); assert.equal(linuxCncKinematicsResult.forward.rc, 0); assert.equal(linuxCncKinematicsResult.inverse.rc, 0); assert.deepEqual( linuxCncKinematicsResult.inverse.joints.map((value) => Math.round(value * 1e6) / 1e6), [10, 20, 30, 25, 40], ); const frame = buildRtcpFrame({ axisPose: { x: 10, y: 20, z: 30, a: 25, b: 0, c: 40 }, activeLine: 777, kinsType: "tcp-xyzac", rtcpEnabled: true, linuxCncKinematicsResult, }); assert.equal(frame.sourceMode, "source-derived-kinematics-wasm"); assert.equal(frame.semanticBoundary, "linuxcnc_kinematics_wasm_c_abi"); assert.equal(frame.readiness.linuxCncKinematicsReady, true); assert.equal(frame.readiness.promotionAllowed, true); assert.equal(frame.readiness.fullLinuxCncProgramExecutionReady, false); assert.equal(frame.kinematicsModuleId, "xyzac-trt"); assert.equal(frame.kinematicsForwardRc, 0); assert.equal(frame.kinematicsInverseRc, 0); assert.equal(frame.jointPose[3].value, 25); assert.equal(frame.jointPose[4].value, 40); assert.equal(frame.tcpPose.x, linuxCncKinematicsResult.forward.pose.x); assert.equal(frame.tcpPose.y, linuxCncKinematicsResult.forward.pose.y); assert.equal(frame.tcpPose.z, linuxCncKinematicsResult.forward.pose.z); console.log("linuxcnc_kinematics_runtime_smoke=ok");