验证 Fanuc 子程序禁用
提示词:快速推进,非纯 source-map-only,保留源依据、自动测试、本地提交且不自动推送。 结论:基于 LinuxCNC rs274ngc_pre.cc 读取 DISABLE_FANUC_STYLE_SUB 以及 interp_read.cc 对 M98、Fanuc-style M99、bare O-word 的禁用分支,新增 INI/G-code fixture 并接入 native/source-link 错误断言;./test-native.sh 和 ./test-linuxcnc-source-link.sh 通过。
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
6
tests/gcode/linuxcnc_disable_fanuc_style_m98_error.ngc
Normal file
6
tests/gcode/linuxcnc_disable_fanuc_style_m98_error.ngc
Normal file
@@ -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
|
||||
7
tests/gcode/linuxcnc_disable_fanuc_style_m99_error.ngc
Normal file
7
tests/gcode/linuxcnc_disable_fanuc_style_m99_error.ngc
Normal file
@@ -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
|
||||
2
tests/gcode/linuxcnc_disable_fanuc_style_sub.ini
Normal file
2
tests/gcode/linuxcnc_disable_fanuc_style_sub.ini
Normal file
@@ -0,0 +1,2 @@
|
||||
[RS274NGC]
|
||||
DISABLE_FANUC_STYLE_SUB = 1
|
||||
Reference in New Issue
Block a user