继续按 align-linuxcnc 约束:补极坐标 native 覆盖,测试通过

结论:补齐 LinuxCNC interp_read.cc、interp_internal.cc、interp_find.cc 极坐标路径,以及 interp_convert.cc 扩展平面 arc/NURBS 错误 fixture 的 native 校验;./test-native.sh 与 ./test-linuxcnc-source-link.sh 均通过,未扩展 smoke。
This commit is contained in:
cnc
2026-06-02 23:51:22 +08:00
parent 55c75ffe80
commit b7610d1b96
2 changed files with 47 additions and 0 deletions

View File

@@ -478,6 +478,52 @@ 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_canned_cycle_planes.ngc >"$output_dir/cnc_sim_linuxcnc_canned_cycle_planes.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_planes.ngc >"$output_dir/cnc_sim_linuxcnc_arc_planes.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_distance_modes.ngc >"$output_dir/cnc_sim_linuxcnc_arc_distance_modes.json"
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_atsign()
# and read_carat() parse @/^ polar words; src/emc/rs274ngc/interp_internal.cc
# enhance_block() restricts polar coordinates to G17 motion without X/Y words;
# src/emc/rs274ngc/interp_find.cc find_ends() maps absolute polar radius/angle
# to XY endpoints and rejects G53 or origin-indeterminate polar motions.
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_polar_coordinates.ngc >"$output_dir/cnc_sim_linuxcnc_polar_coordinates.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_polar_coordinate_variants.ngc >"$output_dir/cnc_sim_linuxcnc_polar_coordinate_variants.json"
polar_coordinate_error_cases=(
"linuxcnc_polar_g18_error|Cannot use polar coordinate except in G17 plane"
"linuxcnc_polar_with_x_error|Cannot specify both polar coordinate and X word"
"linuxcnc_polar_with_y_error|Cannot specify both polar coordinate and Y word"
"linuxcnc_polar_g92_error|Polar coordinates can only be used for motion"
"linuxcnc_polar_g53_error|Cannot use polar coordinates with G53"
"linuxcnc_polar_radius_origin_error|Must specify angle in polar coordinate if at the origin"
"linuxcnc_polar_incremental_radius_origin_error|Incremental motion with polar coordinates is indeterminate when at the origin"
"linuxcnc_polar_incremental_theta_origin_error|G91 motion with polar coordinates is indeterminate when at the origin"
)
for case in "${polar_coordinate_error_cases[@]}"; do
fixture=${case%%|*}
expected=${case#*|}
if 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_convert.cc convert_arc()
# rejects arcs in extended planes, and convert_nurbs() requires canonical
# XY/YZ/ZX planes before NURBS setup.
extended_plane_error_cases=(
"linuxcnc_extended_plane_arc_error|Cannot do an arc in planes G17.1, G18.1, or G19.1"
"linuxcnc_g62_extended_plane_error|one plane must be selected for nurbs: XY, YZ, ZX"
)
for case in "${extended_plane_error_cases[@]}"; do
fixture=${case%%|*}
expected=${case#*|}
if 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
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_predefined_positions.ngc >"$output_dir/cnc_sim_linuxcnc_predefined_positions.json"
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"