增加G1零进给错误fixture验证
结论:新增 g1_zero_feed 负向 fixture,固定 G1 在 feed rate 为 0 时返回 INTERP_ERROR=5、输出 LinuxCNC 对应错误文本、不产生 STRAIGHT_FEED,且失败前不更新当前位置和 #5420/#5421/#5422。检查:git diff --check 通过;wasm-port/tests/native/verify_native_probes.sh 通过。
This commit is contained in:
@@ -365,6 +365,11 @@ Current verified progress:
|
|||||||
current-position parameter visibility for `#5420`, `#5421`, and `#5422`.
|
current-position parameter visibility for `#5420`, `#5421`, and `#5422`.
|
||||||
The parameter source basis is LinuxCNC
|
The parameter source basis is LinuxCNC
|
||||||
`interp_parameter_def.hh` and `interp_namedparams.cc`.
|
`interp_parameter_def.hh` and `interp_namedparams.cc`.
|
||||||
|
- `tests/fixtures/gcode_errors/g1_zero_feed.ngc` and
|
||||||
|
`tests/fixtures/canon_errors/g1_zero_feed.expected` pin the negative
|
||||||
|
`G1` zero-feed case. The source basis is LinuxCNC
|
||||||
|
`interp_convert.cc::convert_straight()` and
|
||||||
|
`rs274ngc_return.hh::NCE_CANNOT_DO_G1_WITH_ZERO_FEED_RATE`.
|
||||||
- This proves the current extracted interpreter slice can parse and execute a
|
- This proves the current extracted interpreter slice can parse and execute a
|
||||||
simple traverse and feed move through a standalone canonical event sink.
|
simple traverse and feed move through a standalone canonical event sink.
|
||||||
|
|
||||||
@@ -667,7 +672,7 @@ traverse path:
|
|||||||
|
|
||||||
1. replace the temporary minimal `convert_g()` implementation with thin
|
1. replace the temporary minimal `convert_g()` implementation with thin
|
||||||
wrappers around more vendored interpreter conversion code,
|
wrappers around more vendored interpreter conversion code,
|
||||||
2. add a negative fixture for `G1` without feed rate to start pinning error
|
2. add `_x`/`_y`/`_z` named parameter fixture coverage and align it with
|
||||||
semantics,
|
`#5420`/`#5421`/`#5422`,
|
||||||
3. keep all source changes inside `wasm-port/` and leave `../linuxcnc/`
|
3. keep all source changes inside `wasm-port/` and leave `../linuxcnc/`
|
||||||
read-only.
|
read-only.
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "emc/rs274ngc/rs274ngc_interp.hh"
|
#include "emc/rs274ngc/rs274ngc_interp.hh"
|
||||||
#undef private
|
#undef private
|
||||||
|
|
||||||
|
#include "emc/rs274ngc/rs274ngc_return.hh"
|
||||||
#include "canon_event_sink.hh"
|
#include "canon_event_sink.hh"
|
||||||
|
|
||||||
PythonPlugin *python_plugin = nullptr;
|
PythonPlugin *python_plugin = nullptr;
|
||||||
@@ -381,6 +382,13 @@ int Interp::convert_g(block_pointer block, setup_pointer settings)
|
|||||||
SET_FEED_RATE(block->f_number);
|
SET_FEED_RATE(block->f_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((block->motion_to_be == G_1) &&
|
||||||
|
(settings->feed_mode == FEED_MODE::UNITS_PER_MINUTE) &&
|
||||||
|
(settings->feed_rate == 0.0)) {
|
||||||
|
setError("%s", NCE_CANNOT_DO_G1_WITH_ZERO_FEED_RATE);
|
||||||
|
return INTERP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
const bool incremental = settings->distance_mode == DISTANCE_MODE::INCREMENTAL;
|
const bool incremental = settings->distance_mode == DISTANCE_MODE::INCREMENTAL;
|
||||||
if (block->x_flag) {
|
if (block->x_flag) {
|
||||||
settings->current_x = incremental ? settings->current_x + block->x_number
|
settings->current_x = incremental ? settings->current_x + block->x_number
|
||||||
|
|||||||
9
wasm-port/tests/fixtures/canon_errors/g1_zero_feed.expected
vendored
Normal file
9
wasm-port/tests/fixtures/canon_errors/g1_zero_feed.expected
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
execute_line_1=5
|
||||||
|
error_text=Cannot do g1 with zero feed rate
|
||||||
|
setup.current_x=0
|
||||||
|
setup.current_y=0
|
||||||
|
setup.current_z=0
|
||||||
|
setup.parameter_5420=0
|
||||||
|
setup.parameter_5421=0
|
||||||
|
setup.parameter_5422=0
|
||||||
|
absent=canon_event=STRAIGHT_FEED
|
||||||
1
wasm-port/tests/fixtures/gcode_errors/g1_zero_feed.ngc
vendored
Normal file
1
wasm-port/tests/fixtures/gcode_errors/g1_zero_feed.ngc
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
G1 X1.0
|
||||||
@@ -5,6 +5,8 @@ ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|||||||
BUILD_DIR="$ROOT_DIR/build/native"
|
BUILD_DIR="$ROOT_DIR/build/native"
|
||||||
GCODE_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/gcode"
|
GCODE_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/gcode"
|
||||||
CANON_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/canon"
|
CANON_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/canon"
|
||||||
|
GCODE_ERROR_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/gcode_errors"
|
||||||
|
CANON_ERROR_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/canon_errors"
|
||||||
|
|
||||||
"$ROOT_DIR/tools/build_native_probes.sh"
|
"$ROOT_DIR/tools/build_native_probes.sh"
|
||||||
|
|
||||||
@@ -77,4 +79,34 @@ for fixture in "$GCODE_FIXTURE_DIR"/*.ngc; do
|
|||||||
check_fixture_output "$fixture" "$expected" "$stdout_file"
|
check_fixture_output "$fixture" "$expected" "$stdout_file"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for fixture in "$GCODE_ERROR_FIXTURE_DIR"/*.ngc; do
|
||||||
|
name="$(basename "$fixture" .ngc)"
|
||||||
|
expected="$CANON_ERROR_FIXTURE_DIR/$name.expected"
|
||||||
|
if [[ ! -f "$expected" ]]; then
|
||||||
|
echo "missing expected error fixture: $expected" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
stdout_file="$BUILD_DIR/linuxcnc_interp_minimal_harness.$name.stdout.log"
|
||||||
|
stderr_file="$BUILD_DIR/linuxcnc_interp_minimal_harness.$name.stderr.log"
|
||||||
|
"$BUILD_DIR/linuxcnc_interp_minimal_harness" "$fixture" \
|
||||||
|
>"$stdout_file" \
|
||||||
|
2>"$stderr_file"
|
||||||
|
|
||||||
|
while IFS= read -r expected_line; do
|
||||||
|
[[ -z "$expected_line" ]] && continue
|
||||||
|
if [[ "$expected_line" == absent=* ]]; then
|
||||||
|
forbidden="${expected_line#absent=}"
|
||||||
|
if grep -Fq "$forbidden" "$stdout_file"; then
|
||||||
|
echo "unexpected output in $stdout_file: $forbidden" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif [[ "$expected_line" == error_text=* ]]; then
|
||||||
|
grep -Fq "${expected_line#error_text=}" "$stderr_file"
|
||||||
|
else
|
||||||
|
grep -Fq "$expected_line" "$stdout_file"
|
||||||
|
fi
|
||||||
|
done < "$expected"
|
||||||
|
done
|
||||||
|
|
||||||
echo "native probe validation complete"
|
echo "native probe validation complete"
|
||||||
|
|||||||
Reference in New Issue
Block a user