diff --git a/test-all-native.sh b/test-all-native.sh index f8b3534..10e69af 100755 --- a/test-all-native.sh +++ b/test-all-native.sh @@ -560,6 +560,8 @@ grep -F 'convert_lathe_diameter_mode() scales G7/G8 X words and G76 I/J/K words' grep -F 'tests/gcode/linuxcnc_lathe_diameter_mode.ngc' test-native.sh >/dev/null grep -F 'tests/gcode/linuxcnc_lathe_diameter_g76.ngc' test-native.sh >/dev/null grep -F 'tests/gcode/linuxcnc_readonly_named_parameters.ngc' test-native.sh >/dev/null +grep -F 'read_n_number()' test-linuxcnc-source-link.sh >/dev/null +grep -F 'tests/gcode/linuxcnc_fractional_linenumbers.ngc' test-linuxcnc-source-link.sh >/dev/null for script in \ test-native.sh \ diff --git a/test-linuxcnc-source-link.sh b/test-linuxcnc-source-link.sh index 123b905..84b3b07 100755 --- a/test-linuxcnc-source-link.sh +++ b/test-linuxcnc-source-link.sh @@ -1484,6 +1484,13 @@ cp "$base_var_file" "$var_file" CNC_SIM_RS274_VAR="$var_file" \ "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_g62_xz_nurbs.ngc \ >"$output_dir/cnc_sim_linuxcnc_source_g62_xz_nurbs.json" +# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_n_number() +# accepts and ignores the fractional suffix after an N word; execute_block() +# in src/emc/rs274ngc/interp_execute.cc still tags canon output with the +# interpreter sequence number. +CNC_SIM_RS274_VAR="$var_file" \ + "$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_fractional_linenumbers.ngc \ + >"$output_dir/cnc_sim_linuxcnc_source_fractional_linenumbers.json" CNC_SIM_RS274_SOURCE_OUTPUT_DIR="$output_dir" python3 - <<'PY' import json @@ -1521,6 +1528,18 @@ required_motion = { check_motion("cnc_sim_linuxcnc_source_basic_motion.json", required_motion) check_motion("cnc_sim_linuxcnc_source_basic_mill.json", required_motion | {"tool-change"}) +fractional_linenumbers = load("cnc_sim_linuxcnc_source_fractional_linenumbers.json") +fractional_spindle_states = [ + (event["line"], event["spindle"]) + for event in fractional_linenumbers + if event["type"] == "set-spindle" +] +if fractional_spindle_states[:3] != [(1, 300), (2, 600), (3, 1200)]: + raise SystemExit( + "unexpected source-linked fractional N-word spindle sequence: " + f"{fractional_spindle_states!r}" + ) + block_delete_off = load("cnc_sim_linuxcnc_source_block_delete_off.json") if not any( event["type"] == "linear-feed" and event["line"] == 2 and event["end"]["x"] == 5 @@ -3407,3 +3426,4 @@ echo "dumped $output_dir/cnc_sim_linuxcnc_source_g92_restore.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_g52_offset.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_g52_xz_nurbs.json" echo "dumped $output_dir/cnc_sim_linuxcnc_source_g62_xz_nurbs.json" +echo "dumped $output_dir/cnc_sim_linuxcnc_source_fractional_linenumbers.json" diff --git a/tests/gcode/linuxcnc_fractional_linenumbers.ngc b/tests/gcode/linuxcnc_fractional_linenumbers.ngc new file mode 100644 index 0000000..d9ce72b --- /dev/null +++ b/tests/gcode/linuxcnc_fractional_linenumbers.ngc @@ -0,0 +1,4 @@ +S300 +N1234 S600 +N4567.789 S1200 +M2