继续按 align-linuxcnc 约束:补 unary 和参数读取源码错误覆盖

结论:覆盖 LinuxCNC interp_read.cc 中 read_operation_unary() 未知词分支、read_parameter_setting() 缺少等号和 read_real_value() 空值错误;未扩展 smoke。

验证:./test-linuxcnc-source-link.sh;./test-native.sh。
This commit is contained in:
cnc
2026-06-02 16:25:57 +08:00
parent 05ece027c4
commit b2945cf57f
12 changed files with 59 additions and 9 deletions

View File

@@ -559,6 +559,24 @@ if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
echo "expected linuxcnc_readonly_named_parameter_assign_error.ngc to fail" >&2
exit 1
fi
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_parameter_setting() requires '=' after the parameter index, and
# read_real_value() requires a real value after '='.
parameter_setting_error_cases=(
"linuxcnc_parameter_missing_equal_error|Equal sign missing in parameter setting"
"linuxcnc_parameter_missing_value_error|No characters found in reading real value"
)
for case in "${parameter_setting_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 -q "$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_negative_sqrt_error.ngc \
>"$output_dir/cnc_sim_linuxcnc_source_negative_sqrt_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_negative_sqrt_error.err"; then
@@ -619,14 +637,28 @@ if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
fi
grep -q "Left bracket missing after unary operation name" \
"$output_dir/cnc_sim_linuxcnc_source_unary_missing_bracket_error.err"
if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_unary_unknown_word_error.ngc \
>"$output_dir/cnc_sim_linuxcnc_source_unary_unknown_word_error.json" 2>"$output_dir/cnc_sim_linuxcnc_source_unary_unknown_word_error.err"; then
echo "expected linuxcnc_unary_unknown_word_error.ngc to fail" >&2
exit 1
fi
grep -q "Unknown word starting with a" \
"$output_dir/cnc_sim_linuxcnc_source_unary_unknown_word_error.err"
unary_unknown_word_error_cases=(
"linuxcnc_unary_unknown_word_error|Unknown word starting with a"
"linuxcnc_unary_unknown_c_word_error|Unknown word starting with c"
"linuxcnc_unary_unknown_e_word_error|Unknown word starting with e"
"linuxcnc_unary_unknown_f_word_error|Unknown word starting with f"
"linuxcnc_unary_unknown_l_word_error|Unknown word starting with l"
"linuxcnc_unary_unknown_r_word_error|Unknown word starting with r"
"linuxcnc_unary_unknown_s_word_error|Unknown word starting with s"
"linuxcnc_unary_unknown_t_word_error|Unknown word starting with t"
"linuxcnc_unary_unknown_default_word_error|Unknown word where unary operation could be"
)
for case in "${unary_unknown_word_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 -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_operation() rejects unknown binary operation names by prefix,
# unknown operation characters, and expressions that reach end-of-line