# HCIE-Rust v3.05 — Test Analysis > Generated: 2026-07-23 > Project root: `/mnt/extra/00_PROJECTS/hcie-rust-v3.05` --- ## 1. Status Assessment ### 1.1 Active Tests (fully functional, run by default) All `#[test]` functions without `#[ignore]` that do not depend on missing fixture files. **Approximately ~400 tests** across 24 crates. ### 1.2 Inactive, Skipped, or Conditionally Disabled Tests | Test | Crate | File:Line | Reason | |------|-------|-----------|--------| | `meadow_brush_visual_check` | `hcie-engine-api` | tests/meadow_check.rs:18 | `#[ignore = "manual visual check"]` — requires human inspection of output PNG | | `leaves_brush_visual_check` | `hcie-engine-api` | tests/leaves_check.rs:11 | `#[ignore = "manual visual check"]` — requires human inspection of output PNG | | `stamp_floor_brush_visual_check` | `hcie-engine-api` | tests/stamp_floor_check.rs:11 | `#[ignore = "manual visual check"]` — requires human inspection of output PNG | | `diagnostic_watercolor_sample_latency` | `hcie-brush-engine` | src/lib.rs:4447 | `#[ignore = "diagnostic benchmark"]` — performance measurement, not pass/fail | | `diagnostic_4k_dirty_staging_latency` | `hcie-iced-gui` | src/canvas/texture_update.rs:253 | `#[ignore = "diagnostic benchmark"]` — performance measurement, not pass/fail | | `test_parse_asl_emboss` | `hcie-fx` | src/parser.rs:1671 | `#[ignore = "requires /tmp/kra_test/emboss_full.asl fixture"]` — missing fixture | | `test_psd_composite_against_ref` | `hcie-io` | lib.rs:43 | Runtime skip if `Example3-mini.psd` not found (IS found → active) | | `test_base_generated_2_vs_merged` | `hcie-io` | lib.rs:301 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_base_generated_2_no_effects` | `hcie-io` | lib.rs:378 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_base_generated_2_composite` | `hcie-io` | lib.rs:420 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_hc_emboss_composite` | `hcie-io` | lib.rs:428 | Runtime skip if `hc_emboss.psd` not found (MISSING → inactive) | | `test_base_generated_2_effect_isolation` | `hcie-io` | lib.rs:438 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_check_soft_orange_pixels` | `hcie-io` | lib.rs:491 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_find_orange_pixels` | `hcie-io` | lib.rs:516 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_layer_bounds` | `hcie-io` | lib.rs:555 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_check_layer_offsets` | `hcie-io` | lib.rs:584 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_save_layer_pixels` | `hcie-io` | lib.rs:621 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_pixel_layer_contributions` | `hcie-io` | lib.rs:635 | Runtime skip if `base_test_generated_2.psd` not found (MISSING → inactive) | | `test_per_layer_effects_vs_photoshop_export` | `hcie-io` | lib.rs:696 | Runtime skip if base PSD not found (MISSING → inactive) | | `test_sultan_effects_mae` | `hcie-io` | lib.rs:861 | Runtime skip if `sultan.psd` not found (MISSING → inactive) | | `test_emboss_optimize` | `hcie-io` | lib.rs:1057 | Runtime skip if `emboss.psd` not found (FOUND → active if it uses `emboss.psd`) | | `test_effects_survive_ffi_boundary` | `hcie-io` | lib.rs:1246 | Runtime skip if base PSD not found (MISSING → inactive) | | `test_ffi_bincode_roundtrip` | `hcie-io` | lib.rs:1276 | Runtime skip if base PSD not found (MISSING → inactive) | **Total conditionally inactive: ~17 tests** (mostly `hcie-io` PSD composite tests needing `_images/_psd_stil_test/` fixtures that do not exist in this environment). ### 1.3 Notable: Expensive / Long-Running Active Tests | Test | Crate | Est. Time | Notes | |------|-------|-----------|-------| | `benchmark_4k_stroke_on_multilayer_document` | `hcie-engine-api` | ~60s | 10 layers on 3840×2160, 100 stroke segments with per-segment timing | | `test_load_test_2_psd` | `hcie-io` | ~30-60s | Loads and composites all PSDs from test_2 | | `test_emboss_optimize` | `hcie-io` | ~30-60s | Detailed emboss analysis with line scans, heatmaps | | `test_psd_composite_against_ref` | `hcie-io` | ~10-30s | Full PSD composite against reference PNG | | `test_layer_pixels_direct` | `hcie-io` | ~10-30s | Per-layer pixel comparison | --- ## 2. Command Generation ### 2.1 Per-Crate Test Commands #### Layer 1: DATA ```bash # hcie-protocol — 16 tests (color packing, constants, lerp, distance, thumbnail, selection, blend modes, tools, version) cargo test -p hcie-protocol # hcie-color — 11 tests (gamma encode/decode, sRGB/linear, RGB/HSL) cargo test -p hcie-color ``` #### Layer 2: ENGINE CORE ```bash # hcie-blend — 9 tests (opacity identity, multiply darkens, screen lightens, all modes) cargo test -p hcie-blend # hcie-brush-engine — 13 tests (6 stamp + 7 internal) # (includes 1 ignored diagnostic benchmark) cargo test -p hcie-brush-engine cargo test -p hcie-brush-engine -- --ignored # includes diagnostic_watercolor_sample_latency # hcie-draw — 8 tests (rect, circle, ellipse, line, flood fill, mask) cargo test -p hcie-draw # hcie-composite — 5 tests (pass through, visibility toggle, basic composite) cargo test -p hcie-composite # hcie-filter — 13 tests (blur, gaussian, motion, invert, grayscale, sharpen, emboss, etc.) cargo test -p hcie-filter # hcie-selection — 15 tests (rect/ellipse mask, invert, grow, shrink, feather, magic wand, lasso) cargo test -p hcie-selection # hcie-vector — 4 tests (crescent, bubble, rotate point, SVG rotation) cargo test -p hcie-vector # hcie-history — 9 tests (new empty, push/undo/redo, max steps, jump to, entry description) cargo test -p hcie-history # hcie-fx — 1 ignored test (ASL emboss parser — requires fixture) cargo test -p hcie-fx cargo test -p hcie-fx -- --ignored # includes test_parse_asl_emboss # hcie-io — ~24 tests (PSD composite, layer analysis, effects) # Many will runtime-skip if _images/ fixtures are missing # Can be very slow (up to several minutes) cargo test -p hcie-io # hcie-psd — 8 tests (signature validation, channel RLE, file header fields) cargo test -p hcie-psd # hcie-vision — 2 tests (smart patch identity and gradient) cargo test -p hcie-vision # hcie-build-info — 1 test (build ID format) cargo test -p hcie-build-info ``` #### Layer 4: ENGINE API ```bash # Core engine API — 8 visual regression + 2 history + 5 visual checks + 1 bitmap + 1 selection + 1 performance + 1 internal cargo test -p hcie-engine-api cargo test -p hcie-engine-api -- --ignored # includes meadow, leaves, stamp_floor checks cargo test -p hcie-engine-api -- performance_stroke_4k # 4K benchmark only ``` #### Layer 6: GUI — egui ```bash # hcie-gui-egui — ~90 tests (canvas_engine, gui_audit, widget_ui, brush_import) cargo test -p hcie-gui-egui ``` #### Layer 6: GUI — iced ```bash # hcie-iced-gui — ~120+ tests (selection, feature scorecard, raster, app state, dock, # panels, widgets, color picker, AI chat, viewer, CLI, theme, settings, SVG editor, etc.) cargo test -p hcie-iced-gui ``` #### Brush Catalog Crates ```bash cargo test -p hcie-dry-media-brushes cargo test -p hcie-paint-brushes cargo test -p hcie-digital-brushes cargo test -p hcie-watercolor-brushes cargo test -p hcie-ink-brushes ``` ### 2.2 Specific Test Filter Commands ```bash # Run only the proximity dedup tests (recent color fix) cargo test -p hcie-iced-gui -- proximate # Run only the visual regression golden tests cargo test -p hcie-engine-api -- visual_regression # Run only the feature scorecard tests cargo test -p hcie-iced-gui -- feature_scorecard # Run only crop/selection tests cargo test -p hcie-iced-gui -- selection_test # Run only the GUI audit tests cargo test -p hcie-gui-egui -- gui_audit # Run only the dock sizing/layout tests cargo test -p hcie-iced-gui -- sizing # Run only the history tests cargo test -p hcie-history # Run only the PSD-related tests cargo test -p hcie-psd cargo test -p hcie-io -- psd # matches "psd" in test names in hcie-io ``` ### 2.3 Running Ignored Tests ```bash # Run all ignored tests across all crates (visual checks and benchmarks) cargo test -- --ignored # runs ALL crates cargo test -p hcie-engine-api -- --ignored cargo test -p hcie-brush-engine -- --ignored cargo test -p hcie-iced-gui -- --ignored cargo test -p hcie-fx -- --ignored ``` --- ## 3. Batch Script (.bat) File: `run_tests_categorized.bat` ```batch @echo off setlocal enabledelayedexpansion set ROOT_DIR=%~dp0 cd /d "%ROOT_DIR%" || exit /b 1 echo ============================================================ echo HCIE-Rust v3.05 — Categorized Test Runner (Windows .bat) echo Root: %ROOT_DIR% echo ============================================================ set PASS=0 set FAIL=0 set SKIP=0 :: Helper: run a category and accumulate results call :RUN_CATEGORY "Layer 1: DATA" ^ hcie-protocol ^ hcie-color call :RUN_CATEGORY "Layer 2: ENGINE CORE — Blend/Brush" ^ hcie-blend ^ hcie-brush-engine call :RUN_CATEGORY "Layer 2: ENGINE CORE — Draw/Composite/Filter" ^ hcie-draw ^ hcie-composite ^ hcie-filter call :RUN_CATEGORY "Layer 2: ENGINE CORE — Selection/Vector/History" ^ hcie-selection ^ hcie-vector ^ hcie-history call :RUN_CATEGORY "Layer 2: ENGINE CORE — IO/PSD/Vision/Build" ^ hcie-io ^ hcie-psd ^ hcie-vision ^ hcie-build-info call :RUN_CATEGORY "Layer 4: ENGINE API" ^ hcie-engine-api call :RUN_CATEGORY "Layer 6: GUI — egui" ^ hcie-gui-egui call :RUN_CATEGORY "Layer 6: GUI — iced" ^ hcie-iced-gui call :RUN_CATEGORY "Brush Catalogs" ^ hcie-dry-media-brushes ^ hcie-paint-brushes ^ hcie-digital-brushes ^ hcie-watercolor-brushes ^ hcie-ink-brushes echo ============================================================ echo SUMMARY: %PASS% passed, %FAIL% failed, %SKIP% skipped echo ============================================================ exit /b %FAIL% :: ============================================================ :: Subroutine: run a named category across multiple crates :: ============================================================ :RUN_CATEGORY set CATEGORY=%~1 shift echo. echo ============================================================ echo Category: %CATEGORY% echo ============================================================ :RUN_CATEGORY_LOOP if "%~1"=="" goto :EOF set CRATE=%~1 shift echo --- Running: %CRATE% --- cargo test -p %CRATE% if %ERRORLEVEL%==0 ( set /a PASS+=1 ) else ( set /a FAIL+=1 ) goto RUN_CATEGORY_LOOP ``` --- ## 4. Bulk Execution Script (bash) File: `run_all_tests.sh` ```bash #!/usr/bin/env bash # HCIE-Rust v3.05 — Bulk test runner # Usage: bash run_all_tests.sh [--no-io] [--no-4k] [--ignored] set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT_DIR" PASS=0 FAIL=0 SKIP=0 START_TIME=$(date +%s) # Parse flags SKIP_IO=false SKIP_4K=false INCLUDE_IGNORED=false EXTRA_ARGS=() for arg in "$@"; do case "$arg" in --no-io) SKIP_IO=true ;; --no-4k) SKIP_4K=true ;; --ignored) INCLUDE_IGNORED=true ;; *) EXTRA_ARGS+=("$arg") ;; esac done SEPARATOR() { printf '%*s\n' 80 '' | tr ' ' '=' } run_crate() { local crate="$1" local label="$2" local extra="$3" shift 3 SEPARATOR echo "[$label] Running: $crate $extra" SEPARATOR if [ -n "$extra" ]; then # shellcheck disable=SC2086 if cargo test -p "$crate" $extra "${EXTRA_ARGS[@]+${EXTRA_ARGS[@]}}" 2>&1; then PASS=$((PASS + 1)) else FAIL=$((FAIL + 1)) fi else if cargo test -p "$crate" "${EXTRA_ARGS[@]+${EXTRA_ARGS[@]}}" 2>&1; then PASS=$((PASS + 1)) else FAIL=$((FAIL + 1)) fi fi } display_summary() { local elapsed=$(( $(date +%s) - START_TIME )) echo "" SEPARATOR echo " BULK TEST EXECUTION COMPLETE" echo " Crates passed: $PASS" echo " Crates with failures: $FAIL" echo " Elapsed time: ${elapsed}s" SEPARATOR if [ "$FAIL" -eq 0 ]; then echo " ✓ ALL CRATES PASSED" else echo " ✗ $FAIL crate(s) have failing tests" fi 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" = false ]; then run_crate "hcie-io" "Layer 2" "" else echo "[SKIP] hcie-io (--no-io flag)" SKIP=$((SKIP + 1)) fi run_crate "hcie-psd" "Layer 2" "" run_crate "hcie-vision" "Layer 2" "" run_crate "hcie-build-info" "Layer 2" "" # ── Layer 4: ENGINE API ───────────────────────────────────────── if [ "$SKIP_4K" = false ]; then run_crate "hcie-engine-api" "Layer 4" "" else run_crate "hcie-engine-api" "Layer 4" "--skip benchmark_4k_stroke_on_multilayer_document" 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 cargo test -p hcie-engine-api -- --ignored || true cargo test -p hcie-brush-engine -- --ignored || true cargo test -p hcie-iced-gui -- --ignored || true cargo test -p hcie-fx -- --ignored || true fi display_summary ``` --- ## 5. Gap Analysis ### 5.1 Crates with Zero Tests These 21 crates have no `#[test]` functions, no `tests/` directory, and no `#[cfg(test)]` modules: | Crate | Layer | Risk | Notes | |-------|-------|------|-------| | `hcie-document` | Layer 3 | **HIGH** | Core document state management — layer CRUD, dirty tracking, zoom, blend mode changes. Zero tests despite being a critical engine crate. | | `hcie-tile` | Layer 2 | **HIGH** | Sparse tile-based layer storage — tile read/write, cache invalidation, dirty tracking. No tests for the incremental tile update mechanism. | | `hcie-text` | Layer 2 | **HIGH** | Vector text rendering via `fontdue` — text layout, wrapping, font loading, glyph rasterization. No tests. | | `hcie-native` | Layer 2 | **MEDIUM** | HCIE native file format I/O. Simple wrapper crate but no serialization/deserialization tests. | | `hcie-kra` | Layer 2 | **MEDIUM** | Krita (KRA) file format import/export. No roundtrip tests. | | `hcie-psd-saver` | Layer 2 | **MEDIUM** | PSD file saver. No tests. | | `hcie-ai` | Layer 5 | **MEDIUM** | Ollama/LMStudio/OpenAI chat client, templates, AI actions. No tests for the client, message building, or response parsing. | | `egui-panel-adapter` | Layer 6 | **MEDIUM** | Dynamic schema-to-widget UI binder. No tests. | | `egui-panel-filters` | Layer 6 | **MEDIUM** | Filter parameter panels. No tests for parameter binding or UI state. | | `egui-panel-ai-chat` | Layer 6 | **MEDIUM** | AI chat panel (egui). No tests. | | `egui-panel-script` | Layer 6 | **MEDIUM** | Scripting panel (egui). No tests. | | `egui-panel-ai-script` | Layer 6 | **MEDIUM** | AI-assisted script generation panel (egui). No tests. | | `iced-panel-adapter` | Layer 6 | **MEDIUM** | Schema-to-widget binder (iced). No tests. | | `iced-panel-ai-chat` | Layer 6 | **MEDIUM** | AI chat panel (iced). No tests. | | `iced-panel-script` | Layer 6 | **MEDIUM** | Scripting panel (iced). No tests. | | `panel-tuner` | Tools | **LOW** | Development tool for panel layout tuning. | | `screenshot-diff` | Tools | **LOW** | Screenshot comparison tool. | | `hcie-egui-app` | Layer 6 | **LOW** | Workspace root — no test logic expected. | | `hcie-iced-app` | Layer 6 | **LOW** | Workspace root — no test logic expected. | | `egui-winit` | Patches | **LOW** | Upstream patch — tests disabled (`autotests = false`). | ### 5.2 Modules with Incomplete Test Coverage | Module | Existing Tests | Missing Coverage | |--------|---------------|-----------------| | `hcie-io` PSD composite | 24 tests, but ~17 skip at runtime | Deterministic tests that work without fixture files (generate test PSDs programmatically) | | `hcie-engine-api` visual regression | 8 golden hash tests | No test for watercolor brush, pencil, gradient fill, crop, transform, layer effects | | `hcie-brush-engine` | 7 inline + 6 integration tests | No tests for airbrush/spray dynamics, tilt/rotation mapping, dual-brush mode | | `hcie-filter` | 13 smoke tests | No tests verifying correct pixel output values for any filter; only "does not panic" | | `hcie-psd` | 8 tests (header + signature) | No tests for image resource sections, layer info (masks, effects, patterns), channel data decompression (all `unimplemented!` stubs exist) | | `hcie-composite` | 5 tests | No tests for layer masks, clipping masks, adjustment layers, layer groups with non-PassThrough mode, blend mode combinations | | `hcie-iced-gui` dock system | ~25 tests | No tests for minimizing/maximizing panels, keyboard navigation of dock, drag-and-drop reordering of tabs | | `hcie-iced-gui` panels | ~15 tests | Brushes panel has catalog count checks but no interaction tests. Filters panel has no tests. Layer details/panel has no tests. | ### 5.3 Recommended Test Additions (Priority Order) #### Priority 1 (High Risk — Engine Core Integrity) 1. **`hcie-document`** — Unit tests for: - Layer CRUD (add/remove/reorder) - Active layer switching - Dirty flag set/clear - Zoom clamp boundaries - Blend mode changes on layers - Opacity/visibility toggle propagation 2. **`hcie-tile`** — Unit tests for: - Tile read/write at pixel level - Dirty rectangle tracking - Tile cache invalidation - Incremental tile update (the protected optimization) - Multi-resolution tile access 3. **`hcie-text`** — Unit tests for: - Font loading (valid/invalid paths) - Text layout (single line, multi-line, wrapping) - Glyph rasterization bounds - Unicode / special character handling - Text cursor positioning #### Priority 2 (Medium Risk — Feature Correctness) 4. **`hcie-io`** — Replace fixture-dependent tests with: - Programmatic PSD creation using `hcie-psd-saver` (roundtrip test) - In-memory composite with known pixel values - PNG/JPG/WebP import/export with checksum verification 5. **`hcie-filter`** — Add value verification tests: - Invert: known input → known output - Grayscale: R=G=B after filter - Brightness/Contrast: exact value mapping - Box blur: average of neighborhood 6. **`hcie-ai`** — Unit tests for: - Message formatting (system/user/assistant) - API response parsing (JSON extraction) - Template rendering - Error handling (network failure, auth error) #### Priority 3 (Lower Risk — GUI Completeness) 7. **`egui-panel-filters`** — Test filter parameter schema binding and default values 8. **`egui-panel-ai-chat`** — Test message history management, send/receive state machine 9. **`iced-panel-adapter`** — Test dynamic widget generation from schema 10. **All panel crates** — Smoke tests ensuring each panel renders without panic ### 5.4 Quick Wins (Easy to Add, High Impact) | Test | Crate | Effort | Impact | |------|-------|--------|--------| | Roundtrip: create layer → modify → undo → redo → equal original | `hcie-document` | 1 hour | Catches state corruption bugs | | Tile dirty region compute: modify tile → read dirty rect | `hcie-tile` | 2 hours | Validates the optimization in AGENTS.md | | Text measure: known string + font → expected width | `hcie-text` | 1 hour | Prevents layout regressions | | Invert filter: 5 known RGBA values → expected output | `hcie-filter` | 1 hour | Upgrades smoke test to real verification | | No-panic on empty input for every filter | `hcie-filter` | 30 min | Edge case coverage | | Fixture-free PSD composite: create 2 layers with known colors in memory, composite, verify | `hcie-io` | 3 hours | Eliminates ~17 flaky/skipped tests | ### 5.5 Test Infrastructure Improvements | Issue | Recommendation | |-------|---------------| | `hcie-io` tests silently pass when fixtures missing | Change to `panic!` with informative message, or add `#[ignore]` with fixture requirement documented | | No test coverage tracking | Add `cargo tarpaulin` or `cargo llvm-cov` to CI and report line/region coverage | | No CI integration visible | Set up GitHub Actions running: `Layer 1` → `Layer 2` → `Layer 4` → `Layer 6` sequentially with `--no-io --no-4k` for quick CI and full suite nightly | | `hcie-psd` has 12 `unimplemented!()` stubs | Add `#[should_panic]` tests that verify stubs panic as expected, or complete the implementations |