#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}" UPSTREAM="$LINUXCNC_ROOT/src/emc/task/emccanon.cc" SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.cc" SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh" TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp" WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs" MATRIX="$ROOT_DIR/working/04-任务矩阵.md" fail() { printf 'task_emccanon_straight_motion_status=fail\n' printf 'task_emccanon_straight_motion_error=%s\n' "$1" exit 1 } require_file() { local label="$1" local file="$2" [[ -f "$file" ]] || fail "$label missing: $file" printf 'task_emccanon_straight_motion_%s=ok\n' "$label" } require_text() { local label="$1" local file="$2" local text="$3" grep -Fq "$text" "$file" || fail "$label missing" printf 'task_emccanon_straight_motion_%s=ok\n' "$label" } require_file upstream "$UPSTREAM" require_file subset_source "$SUBSET_SRC" require_file subset_header "$SUBSET_HDR" require_file task_wrapper "$TASK_WRAPPER" require_file wasm_test "$WASM_TEST" require_file matrix "$MATRIX" for fn in \ generate_fast_move \ generate_move \ STRAIGHT_TRAVERSE \ STRAIGHT_FEED do require_text "upstream_$fn" "$UPSTREAM" "$fn" done require_text upstream_linear_move "$UPSTREAM" "EMC_TRAJ_LINEAR_MOVE" require_text upstream_interp_list "$UPSTREAM" "interp_list.append" require_text subset_traverse_decl "$SUBSET_HDR" "lc_emccanon_subset_straight_traverse" require_text subset_feed_decl "$SUBSET_HDR" "lc_emccanon_subset_straight_feed" require_text subset_linear_move_type "$SUBSET_HDR" "LcEmcCanonSubsetLinearMove" require_text subset_motion_anchor "$SUBSET_HDR" "lc_emccanon_subset_straight_motion_anchor_list" require_text subset_traverse_impl "$SUBSET_SRC" "LC_EMCCANON_SUBSET_MOTION_TRAVERSE" require_text subset_feed_impl "$SUBSET_SRC" "LC_EMCCANON_SUBSET_MOTION_FEED" require_text subset_linear_anchor "$SUBSET_SRC" "EMC_TRAJ_LINEAR_MOVE,interp_list" require_text wrapper_traverse_count "$TASK_WRAPPER" "straightTraverseCount" require_text wrapper_feed_count "$TASK_WRAPPER" "straightFeedCount" require_text wrapper_append_count "$TASK_WRAPPER" "linearMoveAppendCount" require_text wrapper_last_command "$TASK_WRAPPER" "lastInterpListCommand" require_text wrapper_linear_move "$TASK_WRAPPER" "EMC_TRAJ_LINEAR_MOVE" require_text wrapper_motion_anchor "$TASK_WRAPPER" "lc_emccanon_subset_straight_motion_anchor_list" require_text wrapper_taskintf_linear "$TASK_WRAPPER" "lc_taskintf_subset_linear_move_ex" require_text wasm_test_status "$WASM_TEST" "emccanon_straight_motion_status=ok" require_text wasm_test_traverse "$WASM_TEST" "straightTraverseCount" require_text wasm_test_feed "$WASM_TEST" "straightFeedCount" require_text wasm_test_append "$WASM_TEST" "linearMoveAppendCount" require_text wasm_test_interp_command "$WASM_TEST" "lastInterpListCommand" require_text matrix_t042_done "$MATRIX" '| T-042 | `emccanon.cc` straight traverse/feed 子集 | 完成 |' require_text matrix_t043_done "$MATRIX" '| T-043 | `emccanon.cc` dwell/path-control 子集 | 完成 |' printf 'task_emccanon_straight_motion_status=ok\n'