参考所有分组:补读取和圆弧 native 覆盖,测试通过

This commit is contained in:
cnc
2026-06-03 00:35:07 +08:00
parent 2ba8cd7fb8
commit 74cb5f826c
2 changed files with 78 additions and 3 deletions

View File

@@ -131,6 +131,11 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/basic
# convert_distance_mode() updates G90/G91 state, and convert_arc() routes
# R-format arcs through src/emc/rs274ngc/interp_find.cc arc-center math.
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/incremental_and_r_arc.ngc >"$output_dir/cnc_sim_linuxcnc_incremental_and_r_arc.json"
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_text()
# returns INTERP_EXECUTE_FINISH for slash-prefixed block-delete lines, and
# src/emc/rs274ngc/rs274ngc_pre.cc skips execution when block delete is on.
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_block_delete.ngc >"$output_dir/cnc_sim_linuxcnc_block_delete_off.json"
CNC_SIM_BLOCK_DELETE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_block_delete.ngc >"$output_dir/cnc_sim_linuxcnc_block_delete_on.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_rtcp_controls.ngc >"$output_dir/cnc_sim_linuxcnc_rtcp_controls.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_spindle_direction.ngc >"$output_dir/cnc_sim_linuxcnc_spindle_direction.json"
CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_spindle_modes.ngc >"$output_dir/cnc_sim_linuxcnc_spindle_modes.json"
@@ -521,6 +526,18 @@ 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_convert.cc convert_arc()
# passes unit-specific center-arc tolerance to src/emc/rs274ngc/interp_arc.cc
# arc_data_ijk(), which rejects excessive start/end radius mismatch.
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_good_imperial.ngc >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json"
if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_bad_metric.ngc \
>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.err"; then
echo "expected linuxcnc_arc_center_tolerance_bad_metric.ngc to fail" >&2
exit 1
fi
grep -Fq "Radius to end of arc differs from radius to start" \
"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_bad_metric.err"
# 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;
@@ -653,6 +670,9 @@ CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs2
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_indexed_parameters.ngc >"$output_dir/cnc_sim_linuxcnc_indexed_parameters.json"
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_named_parameter_normalization.ngc >"$output_dir/cnc_sim_linuxcnc_named_parameter_normalization.json"
INI_FILE_NAME="$ini_named_parameter_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_ini_named_parameter.ngc >"$output_dir/cnc_sim_linuxcnc_ini_named_parameter.json"
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_real_value()
# and close_and_downcase() accept whitespace around bracketed word values.
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_word_bracket_whitespace.ngc >"$output_dir/cnc_sim_linuxcnc_word_bracket_whitespace.json"
# Source basis: LinuxCNC src/emc/rs274ngc/interp_namedparams.cc lookup_named_param()
# and init_readonly_param() expose modal/unit/feed/spindle readonly parameters.
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_readonly_named_parameters.ngc >"$output_dir/cnc_sim_linuxcnc_readonly_named_parameters.json"
@@ -847,6 +867,25 @@ required_motion = {"set-units", "set-plane", "set-spindle", "rapid", "set-feed",
check(OUTPUT_DIR / "cnc_sim_linuxcnc_basic_motion.json", required_motion)
check(OUTPUT_DIR / "cnc_sim_linuxcnc_basic_mill.json", required_motion | {"tool-change"})
block_delete_off = load("cnc_sim_linuxcnc_block_delete_off.json")
if not any(
event["type"] == "linear-feed" and event["line"] == 2 and event["end"]["x"] == 5
for event in block_delete_off
):
raise SystemExit("expected LinuxCNC disabled block-delete line to execute")
block_delete_on = load("cnc_sim_linuxcnc_block_delete_on.json")
if any(
event["type"] == "linear-feed" and event["line"] == 2 and event["end"]["x"] == 5
for event in block_delete_on
):
raise SystemExit("expected LinuxCNC block-delete line to be skipped")
if not any(
event["type"] == "linear-feed" and event["line"] == 3 and event["end"]["x"] == 2
for event in block_delete_on
):
raise SystemExit("expected LinuxCNC block-delete followup line to execute")
controls = load("cnc_sim_linuxcnc_rtcp_controls.json")
kin = [event for event in controls if event["type"] == "kinematics-switch"]
if [event["reserved"] for event in kin] != [1, 0, 2]:
@@ -1466,6 +1505,15 @@ expected_arc_centers = [(5, 5, 0), (7, 15, 0), (9, 25, 0)]
if arc_centers != expected_arc_centers:
raise SystemExit(f"unexpected G90.1/G91.1 arc centers: {arc_centers!r}")
arc_center_tolerance_good = load("cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json")
if not any(
event["type"] == "arc-feed" and
event["line"] == 4 and
event["end"]["x"] == 5
for event in arc_center_tolerance_good
):
raise SystemExit("missing LinuxCNC small imperial center-format arc within tolerance")
incremental_r_arc = load("cnc_sim_linuxcnc_incremental_and_r_arc.json")
if not any(
event["type"] == "linear-feed" and
@@ -1878,6 +1926,29 @@ expected_indexed_moves = [
if indexed_moves != expected_indexed_moves:
raise SystemExit(f"unexpected LinuxCNC indexed/indirect parameter motions: {indexed_moves!r}")
word_bracket_whitespace = load("cnc_sim_linuxcnc_word_bracket_whitespace.json")
if not any(
event["type"] == "linear-feed" and
event["line"] == 3 and
event["end"]["x"] == 3
for event in word_bracket_whitespace
):
raise SystemExit("missing LinuxCNC spaced bracket word X motion")
if not any(
event["type"] == "linear-feed" and
event["line"] == 4 and
event["end"]["y"] == 3
for event in word_bracket_whitespace
):
raise SystemExit("missing LinuxCNC plus-spaced bracket word Y motion")
if not any(
event["type"] == "linear-feed" and
event["line"] == 5 and
event["end"]["x"] == -3
for event in word_bracket_whitespace
):
raise SystemExit("missing LinuxCNC minus-spaced bracket word X motion")
normalized = load("cnc_sim_linuxcnc_named_parameter_normalization.json")
normalized_moves = [
(event["line"], event["end"]["x"], event["end"]["y"])
@@ -2265,6 +2336,8 @@ echo "linuxcnc rs274 native smoke passed"
echo "dumped $output_dir/cnc_sim_linuxcnc_basic_motion.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_basic_mill.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_incremental_and_r_arc.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_block_delete_off.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_block_delete_on.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_rtcp_controls.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_spindle_direction.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_spindle_modes.json"
@@ -2289,6 +2362,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_canned_cycles_extended.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_canned_cycle_planes.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_planes.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_distance_modes.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_arc_center_tolerance_good_imperial.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_predefined_positions.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_machine_coordinates.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_cutter_comp.json"
@@ -2305,6 +2379,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_lowercase_numeric_oword.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_m98_mixed_styles_variables.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_named_parameter_exists.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_indexed_parameters.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_word_bracket_whitespace.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_named_parameter_normalization.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_ini_named_parameter.json"
echo "dumped $output_dir/cnc_sim_linuxcnc_readonly_named_parameters.json"