diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index d5122a0..af2ce64 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -43,6 +43,7 @@ var_file="$build_dir/rs274ngc.var" base_var_file="$build_dir/rs274ngc-base.var" ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini" disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini" +disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini" output_dir="$build_dir/outputs" mkdir -p "$output_dir" cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file" @@ -823,6 +824,25 @@ for case in "${oword_reader_error_cases[@]}"; do fi grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_$fixture.err" done +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [RS274NGC] DISABLE_FANUC_STYLE_SUB, and interp_read.cc rejects +# Fanuc-style M98/M99 and bare O-word subroutine forms when enabled. +disable_fanuc_style_error_cases=( + "linuxcnc_disable_fanuc_style_m98_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m98" + "linuxcnc_disable_fanuc_style_m99_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m99" + "linuxcnc_disable_fanuc_style_bare_oword_error|DISABLE_FANUC_STYLE_SUB disabled in INI file, but found bare O-word" +) +for case in "${disable_fanuc_style_error_cases[@]}"; do + fixture=${case%%|*} + expected=${case#*|} + if INI_FILE_NAME="$disable_fanuc_style_sub_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_dump" "tests/gcode/$fixture.ngc" \ + >"$output_dir/cnc_sim_linuxcnc_$fixture.json" 2>"$output_dir/cnc_sim_linuxcnc_$fixture.err"; then + echo "expected $fixture.ngc to fail" >&2 + exit 1 + fi + grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_$fixture.err" +done # Source basis: LinuxCNC src/emc/rs274ngc/interp_o_word.cc # convert_control_functions() rejects unmatched, duplicate, and # out-of-context O-word control labels during execution. control_save_offset() diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 182e3a9..9657eb9 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -176,6 +176,7 @@ var_file="$build_dir/rs274ngc-source.var" base_var_file="$build_dir/rs274ngc-source-base.var" ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini" disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini" +disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini" multi_spindle_modes_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_modes.ini" multi_spindle_override_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_override.ini" multi_spindle_threading_file="$(pwd)/tests/gcode/linuxcnc_multi_spindle_threading.ini" @@ -1355,6 +1356,25 @@ for case in "${oword_reader_error_cases[@]}"; do fi grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err" done +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [RS274NGC] DISABLE_FANUC_STYLE_SUB, and interp_read.cc rejects +# Fanuc-style M98/M99 and bare O-word subroutine forms when enabled. +disable_fanuc_style_error_cases=( + "linuxcnc_disable_fanuc_style_m98_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m98" + "linuxcnc_disable_fanuc_style_m99_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m99" + "linuxcnc_disable_fanuc_style_bare_oword_error|DISABLE_FANUC_STYLE_SUB disabled in INI file, but found bare O-word" +) +for case in "${disable_fanuc_style_error_cases[@]}"; do + fixture=${case%%|*} + expected=${case#*|} + if INI_FILE_NAME="$disable_fanuc_style_sub_ini_file" 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_o_word.cc # convert_control_functions() rejects unmatched, duplicate, and # out-of-context O-word control labels during execution. diff --git a/tests/gcode/linuxcnc_disable_fanuc_style_bare_oword_error.ngc b/tests/gcode/linuxcnc_disable_fanuc_style_bare_oword_error.ngc new file mode 100644 index 0000000..c850bb5 --- /dev/null +++ b/tests/gcode/linuxcnc_disable_fanuc_style_bare_oword_error.ngc @@ -0,0 +1,5 @@ +G21 G90 +(Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc rejects bare O-word definitions when DISABLE_FANUC_STYLE_SUB is enabled.) +O100 +M99 +M30 diff --git a/tests/gcode/linuxcnc_disable_fanuc_style_m98_error.ngc b/tests/gcode/linuxcnc_disable_fanuc_style_m98_error.ngc new file mode 100644 index 0000000..3daeaf7 --- /dev/null +++ b/tests/gcode/linuxcnc_disable_fanuc_style_m98_error.ngc @@ -0,0 +1,6 @@ +G21 G90 +(Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc rejects M98 when DISABLE_FANUC_STYLE_SUB is enabled.) +M98 P100 +M30 +O100 +M99 diff --git a/tests/gcode/linuxcnc_disable_fanuc_style_m99_error.ngc b/tests/gcode/linuxcnc_disable_fanuc_style_m99_error.ngc new file mode 100644 index 0000000..a5524bb --- /dev/null +++ b/tests/gcode/linuxcnc_disable_fanuc_style_m99_error.ngc @@ -0,0 +1,7 @@ +G21 G90 +(Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc rejects Fanuc-style M99 when DISABLE_FANUC_STYLE_SUB is enabled.) +O100 sub +M99 +O100 endsub +O100 call +M30 diff --git a/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini b/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini new file mode 100644 index 0000000..052f26f --- /dev/null +++ b/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini @@ -0,0 +1,2 @@ +[RS274NGC] +DISABLE_FANUC_STYLE_SUB = 1