#!/usr/bin/env bash # ============================================================ # HCIE-Rust v3.05 — Bulk All-Tests Execution Script (bash) # Usage: bash run_all_tests.sh [--no-io] [--no-4k] [--ignored] # # Flags: # --no-io Skip hcie-io tests (slow, needs PSD fixtures) # --no-4k Skip the 4K performance benchmark # --ignored Also run #[ignore] tests (visual checks, benchmarks) # ============================================================ set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT_DIR" PASS=0 FAIL=0 SKIP=0 FAILED_CRATES=() SKIPPED_CRATES=() START_TIME=$(date +%s) SKIP_IO=false SKIP_4K=false INCLUDE_IGNORED=false CARGO_ARGS=() TEST_ARGS=() PARSING_TEST_ARGS=false for arg in "$@"; do if [ "$PARSING_TEST_ARGS" = true ]; then TEST_ARGS+=("$arg") continue fi case "$arg" in --no-io) SKIP_IO=true ;; --no-4k) SKIP_4K=true ;; --ignored) INCLUDE_IGNORED=true ;; --) PARSING_TEST_ARGS=true ;; *) CARGO_ARGS+=("$arg") ;; esac done SEPARATOR() { printf '%*s\n' 80 '' | tr ' ' '='; } run_crate() { local crate="$1" local label="$2" shift 2 local -a crate_test_args=("$@") local -a cmd=(cargo test -p "$crate" "${CARGO_ARGS[@]}") if (( ${#crate_test_args[@]} > 0 || ${#TEST_ARGS[@]} > 0 )); then cmd+=(-- "${crate_test_args[@]}" "${TEST_ARGS[@]}") fi SEPARATOR printf '[%s] Running:' "$label" printf ' %q' "${cmd[@]}" printf '\n' SEPARATOR if "${cmd[@]}" 2>&1; then PASS=$((PASS + 1)) else FAIL=$((FAIL + 1)) FAILED_CRATES+=("$crate") fi } run_ignored_tests() { local crate="$1" local -a cmd=(cargo test -p "$crate" "${CARGO_ARGS[@]}" -- --ignored "${TEST_ARGS[@]}") if "${cmd[@]}" 2>&1; then PASS=$((PASS + 1)) else FAIL=$((FAIL + 1)) FAILED_CRATES+=("${crate}[ignored]") fi } display_summary() { local elapsed=$(( $(date +%s) - START_TIME )) echo "" SEPARATOR echo " BULK TEST EXECUTION COMPLETE" echo " Test runs passed: $PASS" echo " Test runs failed: $FAIL" echo " Crates skipped: $SKIP" if (( ${#FAILED_CRATES[@]} > 0 )); then echo " Failed crates: ${FAILED_CRATES[*]}" fi if (( ${#SKIPPED_CRATES[@]} > 0 )); then echo " Skipped crates: ${SKIPPED_CRATES[*]}" fi echo " Elapsed time: ${elapsed}s" SEPARATOR [ "$FAIL" -eq 0 ] && echo " ALL CRATES PASSED" || echo " $FAIL crate(s) have failing tests" exit "$FAIL" } # ────────────────────────────────────────────────────────── # Layer 1: DATA # ────────────────────────────────────────────────────────── run_crate "hcie-protocol" "Layer 1" run_crate "hcie-color" "Layer 1" # ────────────────────────────────────────────────────────── # Layer 2: ENGINE CORE # ────────────────────────────────────────────────────────── run_crate "hcie-blend" "Layer 2" run_crate "hcie-brush-engine" "Layer 2" run_crate "hcie-draw" "Layer 2" run_crate "hcie-composite" "Layer 2" run_crate "hcie-filter" "Layer 2" run_crate "hcie-selection" "Layer 2" run_crate "hcie-vector" "Layer 2" run_crate "hcie-history" "Layer 2" if [ "$SKIP_IO" = true ]; then echo "[SKIP] hcie-io (--no-io flag)" SKIP=$((SKIP + 1)) SKIPPED_CRATES+=("hcie-io") else run_crate "hcie-io" "Layer 2" fi run_crate "psd" "Layer 2" run_crate "hcie-vision" "Layer 2" run_crate "hcie-build-info" "Layer 2" # ────────────────────────────────────────────────────────── # Layer 4: ENGINE API # ────────────────────────────────────────────────────────── if [ "$SKIP_4K" = true ]; then run_crate "hcie-engine-api" "Layer 4" --skip benchmark_4k_stroke_on_multilayer_document else run_crate "hcie-engine-api" "Layer 4" fi # ────────────────────────────────────────────────────────── # Layer 6: GUI — egui # ────────────────────────────────────────────────────────── run_crate "hcie-gui-egui" "Layer 6" # ────────────────────────────────────────────────────────── # Layer 6: GUI — iced # ────────────────────────────────────────────────────────── run_crate "hcie-iced-gui" "Layer 6" # ────────────────────────────────────────────────────────── # Brush Catalogs # ────────────────────────────────────────────────────────── run_crate "hcie-dry-media-brushes" "Brushes" run_crate "hcie-paint-brushes" "Brushes" run_crate "hcie-digital-brushes" "Brushes" run_crate "hcie-watercolor-brushes" "Brushes" run_crate "hcie-ink-brushes" "Brushes" # ────────────────────────────────────────────────────────── # Ignored tests (visual checks, benchmarks) # ────────────────────────────────────────────────────────── if [ "$INCLUDE_IGNORED" = true ]; then echo "" SEPARATOR echo "Running IGNORED tests (visual checks, benchmarks)" SEPARATOR run_ignored_tests hcie-engine-api run_ignored_tests hcie-brush-engine run_ignored_tests hcie-iced-gui run_ignored_tests hcie-fx fi display_summary