diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index da48530..40382bf 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -1423,6 +1423,25 @@ if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ fi grep -q "Cannot wait for digital input with cutter radius compensation on" \ "$output_dir/cnc_sim_linuxcnc_source_cutter_comp_wait_input_error.err" +# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc +# convert_m() rejects M63/M67/M49 while cutter radius compensation is active +# before enqueueing digital/analog output or override canon side effects. +cutter_comp_m_error_cases=( + "linuxcnc_cutter_comp_m63_error|Cannot set motion digital output with cutter radius compensation on" + "linuxcnc_cutter_comp_m67_error|Cannot set motion analog output with cutter radius compensation on" + "linuxcnc_cutter_comp_m49_error|Cannot disable overrides with cutter radius compensation on" +) +for case in "${cutter_comp_m_error_cases[@]}"; do + fixture=${case%%|*} + expected=${case#*|} + if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" "tests/gcode/$fixture.ngc" \ + >"$output_dir/cnc_sim_linuxcnc_source_$fixture.json" 2>"$output_dir/cnc_sim_linuxcnc_source_$fixture.err"; then + echo "expected $fixture.ngc to fail" >&2 + exit 1 + fi + grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err" +done if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_cutter_comp_g71_error.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_g71_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_cutter_comp_g71_error.err"; then diff --git a/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc new file mode 100644 index 0000000..2c38813 --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m49_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M49 diff --git a/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc new file mode 100644 index 0000000..bd70518 --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m63_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M63 P1 diff --git a/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc b/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc new file mode 100644 index 0000000..533094c --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_m67_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +M67 E0 Q1