增加G90G91批量fixture验证

结论:新增 modal_incremental fixture,覆盖 G90/G91 距离模式切换、G1 模态继承和回到绝对模式;验证脚本改为批量执行所有 G-code fixture 并匹配 expected canonical events。检查:git diff --check 通过;wasm-port/tests/native/verify_native_probes.sh 通过。
This commit is contained in:
cnc
2026-06-06 22:40:46 +08:00
parent 5d5ecbd26d
commit 1827b7dd47
5 changed files with 75 additions and 14 deletions

View File

@@ -0,0 +1,5 @@
canon_event=STRAIGHT_TRAVERSE line=1 x=1 y=1 z=0 a=0 b=0 c=0 u=0 v=0 w=0
canon_event=SET_FEED_RATE rate=60
canon_event=STRAIGHT_FEED line=2 x=3 y=1 z=0 a=0 b=0 c=0 u=0 v=0 w=0
canon_event=STRAIGHT_FEED line=3 x=3 y=4 z=0 a=0 b=0 c=0 u=0 v=0 w=0
canon_event=STRAIGHT_TRAVERSE line=4 x=0 y=0 z=0 a=0 b=0 c=0 u=0 v=0 w=0

View File

@@ -0,0 +1,4 @@
G90 G0 X1.0 Y1.0
G91 G1 X2.0 F60.0
G1 Y3.0
G90 G0 X0.0 Y0.0

View File

@@ -3,7 +3,8 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
BUILD_DIR="$ROOT_DIR/build/native"
EXPECTED_EVENTS="$ROOT_DIR/tests/fixtures/canon/minimal_linear.events"
GCODE_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/gcode"
CANON_FIXTURE_DIR="$ROOT_DIR/tests/fixtures/canon"
"$ROOT_DIR/tools/build_native_probes.sh"
@@ -33,16 +34,47 @@ check_exitcode linuxcnc_interp_minimal_harness
check_exitcode linuxcnc_interp_minimal_harness.run
check_exitcode linuxcnc_rs274_compile_probe
check_fixture_output() {
local fixture="$1"
local expected="$2"
local stdout_file="$3"
grep -Fq "read=0" "$stdout_file"
grep -Fq "parse_line=0" "$stdout_file"
local line_count
line_count="$(grep -cv '^[[:space:]]*$' "$fixture")"
local line_number
for ((line_number = 1; line_number <= line_count; line_number += 1)); do
grep -Fq "execute_line_${line_number}=0" "$stdout_file"
done
while IFS= read -r expected_event; do
[[ -z "$expected_event" ]] && continue
grep -Fq "$expected_event" "$stdout_file"
done < "$expected"
}
RUN_STDOUT="$BUILD_DIR/linuxcnc_interp_minimal_harness.run.stdout.log"
check_fixture_output \
"$GCODE_FIXTURE_DIR/minimal_linear.ngc" \
"$CANON_FIXTURE_DIR/minimal_linear.events" \
"$RUN_STDOUT"
grep -Fq "read=0" "$RUN_STDOUT"
grep -Fq "execute_line_1=0" "$RUN_STDOUT"
grep -Fq "execute_line_2=0" "$RUN_STDOUT"
grep -Fq "parse_line=0" "$RUN_STDOUT"
for fixture in "$GCODE_FIXTURE_DIR"/*.ngc; do
name="$(basename "$fixture" .ngc)"
expected="$CANON_FIXTURE_DIR/$name.events"
if [[ ! -f "$expected" ]]; then
echo "missing expected canon fixture: $expected" >&2
exit 1
fi
while IFS= read -r expected_event; do
[[ -z "$expected_event" ]] && continue
grep -Fq "$expected_event" "$RUN_STDOUT"
done < "$EXPECTED_EVENTS"
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"
check_fixture_output "$fixture" "$expected" "$stdout_file"
done
echo "native probe validation complete"