diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index e8a2cda..dfa3d83 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -746,9 +746,13 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_machine_coordinates.ngc >"$output_dir/cnc_sim_linuxcnc_machine_coordinates.json" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_cutter_comp.ngc >"$output_dir/cnc_sim_linuxcnc_cutter_comp.json" # Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc rejects -# M6, M66, G43, G71.0, and G98/G99 while cutter compensation is active; -# compensated corner and G40 exit checks also reject gouging/arc exits. +# G28/G30, G54-G59.3, G61/G64, M6, M66, G43, G71.0, and G98/G99 while +# cutter compensation is active; compensated corner and G40 exit checks also +# reject gouging/arc exits. cutter_comp_execution_error_cases=( + "linuxcnc_cutter_comp_control_mode_error|Cannot change control mode with cutter radius compensation on" + "linuxcnc_cutter_comp_coordinate_system_error|Cannot change coordinate systems with cutter radius compensation on" + "linuxcnc_cutter_comp_home_error|Cannot use g28 or g30 with cutter radius comp" "linuxcnc_cutter_comp_tool_change_error|Cannot change tools with cutter radius compensation on" "linuxcnc_cutter_comp_wait_input_error|Cannot wait for digital input with cutter radius compensation on" "linuxcnc_cutter_comp_tool_offset_error|Cannot change tool offset with cutter radius compensation on" diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 1228729..6e3f975 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -1454,6 +1454,26 @@ fi grep -q "Cannot change tool offset with cutter radius compensation on" \ "$output_dir/cnc_sim_linuxcnc_source_cutter_comp_tool_offset_error.err" # Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc +# convert_control_mode(), convert_coordinate_system(), and convert_home() +# reject control-mode changes, coordinate-system changes, and G28/G30 while +# cutter radius compensation is active. +cutter_comp_g_error_cases=( + "linuxcnc_cutter_comp_control_mode_error|Cannot change control mode with cutter radius compensation on" + "linuxcnc_cutter_comp_coordinate_system_error|Cannot change coordinate systems with cutter radius compensation on" + "linuxcnc_cutter_comp_home_error|Cannot use g28 or g30 with cutter radius comp" +) +for case in "${cutter_comp_g_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 +# Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc # convert_m() rejects M63-M65/M67-M68/M48-M53 while cutter radius # compensation is active before enqueueing digital/analog output or override # canon side effects. diff --git a/tests/gcode/linuxcnc_cutter_comp_control_mode_error.ngc b/tests/gcode/linuxcnc_cutter_comp_control_mode_error.ngc new file mode 100644 index 0000000..797aa3b --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_control_mode_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +G64 diff --git a/tests/gcode/linuxcnc_cutter_comp_coordinate_system_error.ngc b/tests/gcode/linuxcnc_cutter_comp_coordinate_system_error.ngc new file mode 100644 index 0000000..d2f13ee --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_coordinate_system_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +G55 diff --git a/tests/gcode/linuxcnc_cutter_comp_home_error.ngc b/tests/gcode/linuxcnc_cutter_comp_home_error.ngc new file mode 100644 index 0000000..241a16a --- /dev/null +++ b/tests/gcode/linuxcnc_cutter_comp_home_error.ngc @@ -0,0 +1,3 @@ +G21 G90 G17 +G41 D1 +G28