diff --git a/test-linuxcnc-rs274-native.sh b/test-linuxcnc-rs274-native.sh index a3bd422..e643577 100755 --- a/test-linuxcnc-rs274-native.sh +++ b/test-linuxcnc-rs274-native.sh @@ -45,6 +45,7 @@ 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" +g64_default_tolerances_ini_file="$(pwd)/tests/gcode/linuxcnc_g64_default_tolerances.ini" output_dir="$build_dir/outputs" mkdir -p "$output_dir" cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file" @@ -596,6 +597,10 @@ CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linux # convert_control_mode() sends G64 P through SET_MOTION_CONTROL_MODE() # and G64 Q through SET_NAIVECAM_TOLERANCE(), defaulting Q to P when Q is omitted. CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc >"$output_dir/cnc_sim_linuxcnc_control_mode_tolerances.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [RS274NGC] G64_DEFAULT_TOLERANCE/G64_DEFAULT_NAIVETOLERANCE, and +# interp_convert.cc convert_control_mode() uses them when G64 omits P/Q. +INI_FILE_NAME="$g64_default_tolerances_ini_file" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_g64_default_tolerances.ngc >"$output_dir/cnc_sim_linuxcnc_g64_default_tolerances.json" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_tool_length.json" CNC_SIM_RS274_VAR="$var_file" "$build_dir/linuxcnc_rs274_dump" tests/gcode/linuxcnc_dynamic_tool_length.ngc >"$output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json" # Source basis: LinuxCNC src/emc/rs274ngc/interp_convert.cc @@ -1616,6 +1621,19 @@ expected_control_mode_tolerance_states = [ if control_mode_tolerance_states != expected_control_mode_tolerance_states: raise SystemExit(f"unexpected G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}") +g64_default_tolerances = load("cnc_sim_linuxcnc_g64_default_tolerances.json") +g64_default_tolerance_states = [ + (event["line"], event["reserved"], event["feed"]) + for event in g64_default_tolerances + if event["type"] == "comment" and event["reserved"] in {640, 641} +] +expected_g64_default_tolerance_states = [ + (3, 640, 0.07), + (3, 641, 0.04), +] +if g64_default_tolerance_states != expected_g64_default_tolerance_states: + raise SystemExit(f"unexpected INI-backed G64 default tolerance states: {g64_default_tolerance_states!r}") + tool_length = load("cnc_sim_linuxcnc_tool_length.json") if not any( event["type"] == "comment" and @@ -3020,6 +3038,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_program_end_m99.json" echo "dumped $output_dir/cnc_sim_linuxcnc_coolant.json" echo "dumped $output_dir/cnc_sim_linuxcnc_feed_modes.json" echo "dumped $output_dir/cnc_sim_linuxcnc_motion_modes.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_g64_default_tolerances.json" echo "dumped $output_dir/cnc_sim_linuxcnc_tool_length.json" echo "dumped $output_dir/cnc_sim_linuxcnc_dynamic_tool_length.json" echo "dumped $output_dir/cnc_sim_linuxcnc_canned_cycle.json" diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 546e2ad..e1c5f49 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -178,6 +178,7 @@ 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" +g64_default_tolerances_ini_file="$(pwd)/tests/gcode/linuxcnc_g64_default_tolerances.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" @@ -412,6 +413,12 @@ CNC_SIM_RS274_VAR="$var_file" \ CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_control_mode_tolerances.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_control_mode_tolerances.json" +# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads +# [RS274NGC] G64_DEFAULT_TOLERANCE/G64_DEFAULT_NAIVETOLERANCE, and +# interp_convert.cc convert_control_mode() uses them when G64 omits P/Q. +INI_FILE_NAME="$g64_default_tolerances_ini_file" CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_g64_default_tolerances.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_g64_default_tolerances.json" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_tool_length.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_tool_length.json" @@ -2217,6 +2224,19 @@ expected_control_mode_tolerance_states = [ if control_mode_tolerance_states != expected_control_mode_tolerance_states: raise SystemExit(f"unexpected source-linked G64 P/Q control mode tolerance states: {control_mode_tolerance_states!r}") +g64_default_tolerances = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_g64_default_tolerances.json").read_text()) +g64_default_tolerance_states = [ + (event["line"], event["reserved"], event["feed"]) + for event in g64_default_tolerances + if event["type"] == "comment" and event["reserved"] in {640, 641} +] +expected_g64_default_tolerance_states = [ + (3, 640, 0.07), + (3, 641, 0.04), +] +if g64_default_tolerance_states != expected_g64_default_tolerance_states: + raise SystemExit(f"unexpected source-linked INI-backed G64 default tolerance states: {g64_default_tolerance_states!r}") + modal_state = json.loads((OUTPUT_DIR / "cnc_sim_linuxcnc_source_modal_state.json").read_text()) if not any( event["type"] == "rapid" and @@ -4046,6 +4066,7 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_program_end_m99.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_coolant.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_feed_modes.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_motion_modes.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_g64_default_tolerances.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_tool_length.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_dynamic_tool_length.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_canned_cycle.json" diff --git a/tests/gcode/linuxcnc_g64_default_tolerances.ini b/tests/gcode/linuxcnc_g64_default_tolerances.ini new file mode 100644 index 0000000..69ad6eb --- /dev/null +++ b/tests/gcode/linuxcnc_g64_default_tolerances.ini @@ -0,0 +1,3 @@ +[RS274NGC] +G64_DEFAULT_TOLERANCE = 0.07 +G64_DEFAULT_NAIVETOLERANCE = 0.04 diff --git a/tests/gcode/linuxcnc_g64_default_tolerances.ngc b/tests/gcode/linuxcnc_g64_default_tolerances.ngc new file mode 100644 index 0000000..d29256b --- /dev/null +++ b/tests/gcode/linuxcnc_g64_default_tolerances.ngc @@ -0,0 +1,4 @@ +G21 G90 G17 +(Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc reads G64_DEFAULT_TOLERANCE and G64_DEFAULT_NAIVETOLERANCE for G64 without P/Q.) +G64 +M30