diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index af2ce64..a3bd422 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -44,6 +44,7 @@ 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" +tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini" output_dir="$build_dir/outputs" mkdir -p "$output_dir" cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file" @@ -688,6 +689,15 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux # 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" +CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_default.json" +if INI_FILE_NAME="$tight_arc_center_tolerance_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \ + >"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.json" 2>"$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err"; then + echo "expected linuxcnc_arc_center_tolerance_tight_metric.ngc to fail with tight INI tolerance" >&2 + exit 1 +fi +grep -Fq "Radius to end of arc differs from radius to start" \ + "$output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err" 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 @@ -2053,6 +2063,15 @@ if not any( ): raise SystemExit("missing LinuxCNC small imperial center-format arc within tolerance") +arc_center_tolerance_tight_metric_default = load("cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_default.json") +if not any( + event["type"] == "arc-feed" and + event["line"] == 5 and + event["end"]["x"] == 2 + for event in arc_center_tolerance_tight_metric_default +): + raise SystemExit("missing LinuxCNC metric center-format arc under default tolerance") + incremental_r_arc = load("cnc_sim_linuxcnc_incremental_and_r_arc.json") if not any( event["type"] == "linear-feed" and @@ -3010,6 +3029,8 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_extended_plane_cycle.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_arc_center_tolerance_tight_metric_default.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_arc_center_tolerance_tight_metric_ini.err" 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" diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 9657eb9..546e2ad 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -177,6 +177,7 @@ 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" +tight_arc_center_tolerance_ini_file="$(pwd)/tests/gcode/linuxcnc_tight_arc_center_tolerance.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" @@ -1719,6 +1720,17 @@ CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_good_imperial.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json" +CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json" +if INI_FILE_NAME="$tight_arc_center_tolerance_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.json" 2>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err"; then + echo "expected linuxcnc_arc_center_tolerance_tight_metric.ngc to fail with tight INI tolerance" >&2 + exit 1 +fi +grep -Fq "Radius to end of arc differs from radius to start" \ + "$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err" if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_arc_center_tolerance_bad_metric.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.json" 2>"$output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_bad_metric.err"; then @@ -3530,6 +3542,15 @@ if not any( ): raise SystemExit("missing source-linked small imperial center-format arc within tolerance") +arc_center_tolerance_tight_metric_default = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json").read_text()) +if not any( + event["type"] == "arc-feed" and + event["line"] == 5 and + event["end"]["x"] == 2 + for event in arc_center_tolerance_tight_metric_default +): + raise SystemExit("missing source-linked metric center-format arc under default tolerance") + g76only = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_g76only.json").read_text()) if not any( event["type"] == "comment" and @@ -4056,6 +4077,8 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_parameter_expression_assignment echo "dumped $output_dir/cnc_sim_linuxcnc_source_word_bracket_whitespace.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_m98_mixed_styles_variables.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_good_imperial.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_default.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_arc_center_tolerance_tight_metric_ini.err" echo "dumped $output_dir/cnc_sim_linuxcnc_source_g76only.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_numbered_parameters.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_rotary_probe_numbered_parameters.json" diff --git a/tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc b/tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc new file mode 100644 index 0000000..be68f5f --- /dev/null +++ b/tests/gcode/linuxcnc_arc_center_tolerance_tight_metric.ngc @@ -0,0 +1,6 @@ +G21 +F1 +G0 X0 Y0 Z0 +(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc applies CENTER_ARC_RADIUS_TOLERANCE_MM from INI before interp_arc.cc checks IJK radius mismatch.) +G2 X2 Y0 I[1 - 0.0011] +M2 diff --git a/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini b/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini new file mode 100644 index 0000000..019a6b0 --- /dev/null +++ b/tests/gcode/linuxcnc_tight_arc_center_tolerance.ini @@ -0,0 +1,2 @@ +[RS274NGC] +CENTER_ARC_RADIUS_TOLERANCE_MM = 0.001