58 KiB
58 KiB
HCIE-Rust v3.05 — Complete Test Inventory
Generated: 2026-07-23 Project root:
/mnt/extra/00_PROJECTS/hcie-rust-v3.05Total: ~415+
#[test]functions across 23+ crates organized in 6 layers.
Table of Contents
- Layer 1: DATA
- Layer 2: ENGINE CORE
- hcie-blend — tests/blend_modes.rs
- hcie-brush-engine — tests/stamp.rs
- hcie-brush-engine — src/lib.rs (internal)
- hcie-draw — tests/draw_pixels.rs
- hcie-composite — tests/
- hcie-composite — src/test_composite.rs
- hcie-filter — tests/filters.rs
- hcie-selection — tests/mask_ops.rs
- hcie-vector — src/lib.rs (internal)
- hcie-history — tests/history_state.rs
- hcie-history — src/lib.rs (internal)
- hcie-fx — src/parser.rs (internal)
- hcie-io — src/test_psd_composite.rs
- hcie-psd — src/
- hcie-vision — src/smart_patch.rs
- hcie-build-info — src/lib.rs
- Layer 4: ENGINE API
- hcie-engine-api — tests/visual_regression.rs
- hcie-engine-api — tests/vector_creation_history.rs
- hcie-engine-api — tests/meadow_check.rs
- hcie-engine-api — tests/leaves_check.rs
- hcie-engine-api — tests/stamp_floor_check.rs
- hcie-engine-api — tests/bitmap_brush_stamp.rs
- hcie-engine-api — tests/selection_clear.rs
- hcie-engine-api — tests/performance_stroke_4k.rs
- hcie-engine-api — src/stroke_brush.rs (internal)
- Layer 6: GUI — egui
- Layer 6: GUI — iced
- hcie-iced-gui — tests/selection_test.rs
- hcie-iced-gui — tests/feature_scorecard.rs
- hcie-iced-gui — tests/raster_test.rs
- hcie-iced-gui — src/app.rs (internal)
- hcie-iced-gui — src/app/transform_dirty.rs
- hcie-iced-gui — src/color_picker.rs
- hcie-iced-gui — src/ai_chat.rs
- hcie-iced-gui — src/ai_script.rs
- hcie-iced-gui — src/screenshot.rs
- hcie-iced-gui — src/sidebar/mod.rs
- hcie-iced-gui — src/theme.rs
- hcie-iced-gui — src/viewer/mod.rs
- hcie-iced-gui — src/settings.rs
- hcie-iced-gui — src/cli.rs
- hcie-iced-gui — src/canvas/shader_canvas.rs
- hcie-iced-gui — src/canvas/texture_update.rs
- hcie-iced-gui — src/selection/state.rs
- hcie-iced-gui — src/panels/menus.rs
- hcie-iced-gui — src/panels/styles.rs
- hcie-iced-gui — src/panels/custom_shapes.rs
- hcie-iced-gui — src/panels/brushes.rs
- hcie-iced-gui — src/panels/svg_editor.rs
- hcie-iced-gui — src/panels/title_bar.rs
- hcie-iced-gui — src/vector_edit.rs
- hcie-iced-gui — src/widgets/plain_slider.rs
- hcie-iced-gui — src/dock/state.rs
- hcie-iced-gui — src/dock/manager.rs
- hcie-iced-gui — src/dock/sizing.rs
- hcie-iced-gui — src/dock/persistence.rs
- hcie-iced-gui — src/dock/view.rs
- hcie-iced-gui — src/dock/preview.rs
- hcie-iced-gui — src/dock/floating.rs
- Brush Catalog Crates
Layer 1: DATA
hcie-protocol — tests/helpers.rs
| Line | Function | Summary |
|---|---|---|
| 4 | test_to_u32_from_u32_roundtrip |
Tests that packing and unpacking RGBA colors to/from u32 round-trips correctly for several test colors. |
| 20 | test_color_constants |
Verifies that TRANSPARENT, BLACK, WHITE, and RED constants have the expected RGBA values. |
| 28 | test_lerp_boundaries |
Confirms linear interpolation at t=0, t=0.5, and t=1 returns correct boundary/midpoint values. |
| 35 | test_color_lerp |
Verifies color lerp between two RGBA colors at 0.5 blend produces expected midpoint values. |
| 46 | test_lerp_clamp |
Confirms lerp clamps t values below 0 and above 1 to the range endpoints. |
| 52 | test_clamp |
Tests the clamp function with in-range, below-min, and above-max values. |
| 59 | test_distance |
Verifies Euclidean distance calculation (3-4-5 triangle) and zero-distance for same point. |
| 65 | test_point_in_rect |
Tests point_in_rect with points inside and outside a rectangle. |
| 72 | test_thumbnail_nearest |
Tests nearest-neighbor thumbnail generation from a 2×1 RGBA image to 1×1. |
| 83 | test_selection_rect_from_mask |
Verifies extracting a bounding rectangle from a selection mask with a 2×2 selected region. |
| 95 | test_blank_mask_no_selection |
Confirms a mask of all zeros returns None from selection_rect_from_mask. |
| 101 | test_blend_mode_all_contains_all |
Asserts that BlendMode::ALL contains exactly 28 blend modes. |
| 106 | test_all_tools_listed |
Asserts that Tool::ALL contains exactly 36 tools. |
| 111 | test_expand_dirty_bounds |
Tests expanding dirty bounds with a given rectangle, verifying the union result. |
| 118 | test_version_string_format |
Checks that the version string starts with "3." (expected format). |
| 125 | from_u32_to_u32_roundtrip |
Property-based test using proptest to verify u32 round-trip for random RGBA values. |
hcie-color — tests/color_roundtrip.rs
| Line | Function | Summary |
|---|---|---|
| 4 | test_gamma_encode_boundary_zero |
Verifies gamma encoding of 0.0 equals 0.0. |
| 9 | test_gamma_encode_boundary_one |
Verifies gamma encoding of 1.0 equals 1.0. |
| 14 | test_gamma_decode_boundary_zero |
Verifies gamma decoding of 0.0 equals 0.0. |
| 19 | test_gamma_decode_boundary_one |
Verifies gamma decoding of 1.0 equals 1.0. |
| 24 | test_gamma_roundtrip |
Ensures gamma encode→decode round-trip preserves values within 0.01 epsilon for 7 test values. |
| 33 | test_srgb_to_linear_black |
Confirms sRGB black [0,0,0] converts to linear [0.0, 0.0, 0.0]. |
| 38 | test_srgb_to_linear_white |
Confirms sRGB white [255,255,255] converts to linear [1.0, 1.0, 1.0]. |
| 47 | srgb_linear_roundtrip |
Property-based test verifying sRGB→linear→sRGB round-trip preserves values. |
| 58 | test_rgb_to_hsl_basic |
Tests RGB→HSL conversion for pure red, expecting H=0, S=1, L=0.5. |
| 66 | test_rgb_to_hsl_gray |
Tests RGB→HSL for gray (0.5,0.5,0.5), expecting S=0. |
| 74 | test_linear_to_srgb_clamps |
Confirms linear→sRGB clamps values below 0 to 0 and above 1 to 255. |
Layer 2: ENGINE CORE
hcie-blend — tests/blend_modes.rs
| Line | Function | Summary |
|---|---|---|
| 5 | test_normal_zero_opacity_identity |
Verifies that blending with opacity=0 returns the destination unchanged for Normal mode. |
| 13 | test_normal_full_opacity |
Verifies that Normal mode with opacity=1 outputs the source pixel unchanged. |
| 21 | test_opacity_zero_no_mutation_for_all_modes |
Confirms that opacity=0 returns dst unchanged for every blend mode (except PassThrough). |
| 38 | test_specific_blend_modes |
Parametric test (rstest) checking specific blend modes (Multiply, Screen, etc.) produce valid alpha. |
| 51 | test_transparent_src_normal |
Verifies that a fully transparent source leaves the destination unchanged. |
| 59 | test_all_modes_produce_valid_alpha |
Ensures all blend modes with opacity=0.5 produce valid u8 alpha values. |
| 70 | test_multiply_darkens |
Verifies Multiply blend mode darkens the destination channel. |
| 78 | test_screen_lightens |
Verifies Screen blend mode lightens the destination channel. |
| 87 | identity_at_zero_opacity |
Property-based test: random pixels blended with opacity 0 always equal the destination for all modes. |
hcie-brush-engine — tests/stamp.rs
| Line | Function | Summary |
|---|---|---|
| 13 | test_generate_brush_stamp_size |
Verifies a round brush stamp of size 10 produces a 20×20 square stamp buffer. |
| 25 | test_generate_brush_stamp_center_nonzero |
Confirms the center pixel of a hardness=1.0 round stamp is opaque. |
| 34 | test_generate_brush_stamp_hardness_gradient |
Checks that soft (0.0) and hard (1.0) stamps have the same buffer length. |
| 45 | test_brush_spacing_pixels |
Verifies brush_spacing_pixels returns size×ratio for 0.5 ratio and minimum ~0.2 for 0.0 ratio. |
| 57 | test_jitter_offset_within_bounds |
Confirms zero jitter amount produces zero offset. |
| 64 | test_bitmap_stamp_fallback_to_round |
Verifies that an empty bitmap stamp falls back to a round stamp (non-empty buffer). |
hcie-brush-engine — src/lib.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 4241 | watercolor_detail_count_is_hard_bounded |
Verifies watercolor detail counts (satellites, splatters, blooms) stay within WATERCOLOR_MAX_DABS_PER_SAMPLE for sizes 0.5–1024. |
| 4257 | every_specialized_style_is_noop_at_zero_pressure |
Tests that all 28 specialized brush styles produce zero-painted pixels when pressure is 0. |
| 4328 | blender_preserves_uniform_color_and_transparency |
Verifies the Blender brush doesn't change uniform color fields and doesn't paint on empty areas. |
| 4352 | rotated_dab_uses_single_channel_stroke_mask |
Confirms rotated dabs write into a single-channel stroke mask during specialized stroke drawing. |
| 4389 | rotated_pen_respects_stroke_opacity_cap |
Verifies three overlapping pen dabs at 50% flow stay within the 50% stroke opacity cap (~128 alpha). |
| 4430 | pigment_mix_is_subtractive_and_bounded |
Confirms pigment mixing is subtractive (red+blue → dark purple) and respects blend factor boundaries. |
| 4447 | diagnostic_watercolor_sample_latency |
Diagnostic benchmark (ignored) measuring round dab and watercolor brush latency at various sizes. |
hcie-draw — tests/draw_pixels.rs
| Line | Function | Summary |
|---|---|---|
| 4 | test_draw_filled_rect |
Draws a filled red rectangle and checks the center pixel is red. |
| 14 | test_draw_filled_rect_outside |
Confirms pixels outside a drawn rectangle remain unchanged (transparent). |
| 22 | test_draw_filled_circle |
Draws a filled green circle and checks the center pixel is green. |
| 30 | test_draw_filled_ellipse |
Draws a filled blue ellipse and checks the center pixel is blue. |
| 38 | test_draw_line |
Draws a yellow horizontal line and checks a pixel on the line. |
| 56 | test_flood_fill |
Performs flood fill from (0,0) and checks that the filled area is red. |
| 64 | test_draw_with_mask_restricts_pixels |
Draws a rect with a mask where only pixel (0,0) is masked; verifies only that pixel is painted. |
| 84 | test_line_at_edge |
Draws a diagonal line from corner to corner and checks the start pixel. |
hcie-composite — tests/
| File | Line | Function | Summary |
|---|---|---|---|
| pass_through.rs | 24 | test_pass_through_group_skipped_in_composite |
Verifies child layers in a PassThrough group blend directly onto the background (Multiply on white→gray). |
| pass_through.rs | 56 | test_pass_through_group_invisible_children |
Confirms invisible children of a PassThrough group are excluded and only background appears. |
| pass_through.rs | 78 | test_pass_through_group_with_opacity |
Documents current MVP behavior: PassThrough group opacity is skipped so child blends at full strength. |
| ff_visibility.rs | 20 | test_composite_visibility_from_protocol_layer |
Tests composite with protocol layers toggling visibility of background and top layers, printing opaque pixel counts. |
| visibility.rs | 17 | test_composite_visibility_toggle |
Tests compositing with both visible, background hidden, top hidden, and both hidden, asserting correct opaque pixel counts. |
hcie-composite — src/test_composite.rs
| Line | Function | Summary |
|---|---|---|
| 5 | test_composite_basic |
Basic composite test: single red layer output, then two layers (red background, blue overlay) checking top-wins compositing. |
hcie-filter — tests/filters.rs
| Line | Function | Summary |
|---|---|---|
| 22 | test_blur_does_not_panic |
Applies box_blur with radius 2 and checks dimensions remain valid. |
| 30 | test_gaussian_blur_does_not_panic |
Applies gaussian_blur with radius 2 and checks dimensions remain valid. |
| 38 | test_motion_blur_does_not_panic |
Applies motion_blur with distance 5, angle 45 and checks dimensions remain valid. |
| 46 | test_invert_filter |
Applies invert filter and verifies at least one pixel changed value. |
| 55 | test_grayscale_filter |
Applies grayscale filter and verifies R, G, B values differ by at most 3 (effectively gray). |
| 69 | test_filter_ids |
Checks that filter_ids() returns at least one filter and includes "invert" and "box_blur". |
| 78 | test_sharpen_does_not_panic |
Applies sharpen filter and checks dimensions remain valid. |
| 86 | test_unknown_filter_is_noop |
Confirms applying a nonexistent filter name leaves pixels unchanged. |
| 94 | test_unsharp_mask_does_not_panic |
Applies unsharp_mask with radius 2, amount 0.5 and checks dimensions remain valid. |
| 102 | test_brightness_contrast |
Applies brightness_contrast filter and confirms output contains non-zero pixel values. |
| 110 | test_hue_saturation_does_not_panic |
Applies hue_saturation filter and checks dimensions remain valid. |
| 118 | test_emboss_does_not_panic |
Applies emboss filter and checks dimensions remain valid. |
| 126 | test_find_edges_does_not_panic |
Applies find_edges filter and checks dimensions remain valid. |
hcie-selection — tests/mask_ops.rs
| Line | Function | Summary |
|---|---|---|
| 2 | test_create_rect_mask_full |
Creates a 4×4 rect mask covering the full area and verifies all values are 255. |
| 8 | test_create_rect_mask_partial |
Creates a partial rect mask (1,1 to 2,2 in 4×4) and verifies inside/outside pixels. |
| 15 | test_create_ellipse_mask |
Creates an ellipse mask and verifies center is selected, corner is not. |
| 22 | test_invert_mask |
Inverts a mask and verifies 255→0 and 0→255. |
| 31 | test_invert_twice_is_identity |
Inverts a mask twice and confirms the result equals the original. |
| 45 | test_grow_mask |
Grows a single selected pixel by 1 and verifies more pixels become selected. |
| 54 | test_grow_zero_is_noop |
Confirms growing by 0 leaves the mask unchanged. |
| 66 | test_shrink_mask |
Shrinks a fully-selected mask by 1 and verifies fewer selected pixels. |
| 74 | test_shrink_zero_is_noop |
Confirms shrinking by 0 leaves the mask unchanged. |
| 82 | test_grow_shrink_roundtrip |
Grows then shrinks a mask by 1 and verifies it returns to the original state. |
| 97 | test_feather_mask |
Feathers a 3×3 selected area with radius 1 and checks center remains 255 and corners are feathered. |
| 110 | test_feather_zero_is_noop |
Confirms feathering with radius 0 leaves the mask unchanged. |
| 119 | test_mask_at |
Tests mask_at with and without a mask, checking correct values returned at various positions. |
| 131 | test_magic_wand |
Tests magic wand selection on a 2×2 pixel grid, checking seed and adjacent same-color pixels are selected. |
| 143 | test_lasso_fill_mask |
Fills a 5×5 mask with a square lasso and verifies the center pixel is filled. |
hcie-vector — src/lib.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 1101 | test_crescent_sharp_tips |
Verifies the crescent shape's outer and inner ellipse arcs meet exactly at both tips. |
| 1129 | test_bubble_tail_points |
Verifies the speech bubble contains the tail tip and inner connection points. |
| 1154 | test_rotate_point |
Tests rotating a point 90° around a center and verifies correct output coordinates. |
| 1167 | svg_points_follow_shape_angle |
Verifies SVG-backed shape rotation applies correctly around bounds center. |
hcie-history — tests/history_state.rs
| Line | Function | Summary |
|---|---|---|
| 31 | test_history_new_is_empty |
Verifies a new HistoryManager has len=0, can_undo=false, can_redo=false, index=-1. |
| 40 | test_history_push_undo_redo |
Pushes two pixel changes, undoes one step (checking pixel value), then redoes. |
| 65 | test_history_undo_twice_is_stable |
Verifies double-undo doesn't go past the bottom of the history stack. |
| 79 | test_history_redo_twice_is_stable |
Verifies double-redo doesn't go past the top of the history stack. |
| 94 | test_history_max_steps |
Pushes 10 actions with max_steps=3 and verifies only 3 are retained. |
| 108 | test_history_new_action_truncates_redo |
Undoes, then pushes a new action; verifies redo stack is truncated. |
| 133 | test_history_jump_to |
Pushes 3 actions, jumps to index -1, verifies at bottom with full redo stack. |
| 161 | test_entry_description |
Tests that entry_description returns the action description for valid indices and None for invalid. |
hcie-history — src/lib.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 126 | first_entry_can_redo_from_pre_history_cursor |
Verifies the first history entry can be redone after undo when cursor starts at pre-history state. |
hcie-fx — src/parser.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 1671 | test_parse_asl_emboss |
Tests parsing an ASL file for emboss styles, verifying styles are non-empty with UUIDs and effects. Ignored by default (requires fixture). |
hcie-io — src/test_psd_composite.rs
| Line | Function | Summary |
|---|---|---|
| 3 | test_psd_import_sizes_and_offsets |
Imports Example3-mini.psd, checks background has >1M non-zero pixels and named layers have correct data. |
| 43 | test_psd_composite_against_ref |
Full composite comparison of PSD layers against reference PNG, asserting MAE < 2.0 and match ≥ 88%. |
| 241 | test_layer_pixels_direct |
Compares raw layer pixels (layer 0 and all layers) against reference PNG pixel-by-pixel per layer. |
| 301 | test_base_generated_2_vs_merged |
Compares our composited output against ImageMagick-extracted PSD merged image. |
| 345 | test_blend_normal |
Tests basic src-over compositing with known RGBA values and prints expected vs actual. |
| 364 | test_teal_circle_emboss_debug |
Imports base_test_generated_2.psd, extracts the BevelEmboss effect from the teal circle layer. |
| 378 | test_base_generated_2_no_effects |
Composites with all effects disabled and compares against reference to measure baseline error. |
| 420 | test_base_generated_2_composite |
Composite and compare base_test_generated_2.psd against reference PNG. |
| 428 | test_hc_emboss_composite |
Composite and compare hc_emboss.psd against its reference PNG. |
| 438 | test_base_generated_2_effect_isolation |
Disables effects layer-by-layer, measuring MAE delta to isolate which effects contribute most to error. |
| 491 | test_check_soft_orange_pixels |
Prints RGBA values of specific pixels in Soft Orange Shape and Pink Rectangle layers. |
| 516 | test_find_orange_pixels |
Finds non-zero pixel bounds in Soft Orange Shape layer and samples pixels. |
| 555 | test_layer_bounds |
Computes and prints non-zero pixel bounds for every layer in base_test_generated_2.psd. |
| 584 | test_check_layer_offsets |
Finds leftmost/topmost non-zero pixels to determine layer position offsets. |
| 621 | test_save_layer_pixels |
Saves each layer as a separate PNG to /tmp for visual inspection. |
| 635 | test_pixel_layer_contributions |
Prints RGBA contributions from each layer at 5 specific pixel coordinates. |
| 658 | test_load_test_2_psd |
Loads and composites all PSDs from test_2 directory, printing load/composite times. |
| 696 | test_per_layer_effects_vs_photoshop_export |
Per-layer effect comparison: applies effects to each layer and compares against Photoshop-exported PNGs. |
| 795 | test_test2_effects_mae |
Computes MAE for all PSDs in test_2 directory against JPG references and prints average. |
| 861 | test_sultan_effects_mae |
Full sultan.psd composite analysis: per-layer skip analysis, grid-based MAE breakdown, debug saves. |
| 1057 | test_emboss_optimize |
emboss.psd detailed analysis: channel MAE, opaque-only MAE, regional grid, horizontal/vertical line scans, saves debug heatmaps. |
| 1246 | test_effects_survive_ffi_boundary |
Verifies that effects parsed from PSD survive the PSD→protocol layer boundary (effects > 0). |
| 1276 | test_ffi_bincode_roundtrip |
Verifies bincode serialization/deserialization round-trip preserves all layer effects. |
hcie-psd — src/
| File | Line | Function | Summary |
|---|---|---|---|
| lib.rs | 341 | psd_signature_fail |
Verifies that loading a PNG file through Psd::from_bytes returns a PSD signature error. |
| psd_channel.rs | 357 | does_not_read_beyond_rle_channels_bytes |
Verifies RLE channel insertion doesn't read beyond channel bytes by testing 1×1 layer with RLE-compressed Red channel. |
| sections/file_header_section.rs | 291 | valid_channel_count |
Verifies ChannelCount::new accepts all channel counts from 1 to 56. |
| sections/file_header_section.rs | 300 | invalid_channel_count |
Verifies ChannelCount::new rejects 0 and 57. |
| sections/file_header_section.rs | 307 | incorrect_file_header_section_length |
Verifies a 25-byte input returns IncorrectLength error. |
| sections/file_header_section.rs | 317 | first_four_bytes_incorrect |
Tests that invalid first 4 bytes (wrong PSD signature) returns InvalidSignature error. |
| sections/file_header_section.rs | 329 | version_incorrect |
Tests that wrong version number returns InvalidVersion error. |
| sections/file_header_section.rs | 339 | invalid_reserved_section |
Tests that wrong reserved section returns InvalidReserved error. |
hcie-vision — src/smart_patch.rs
| Line | Function | Summary |
|---|---|---|
| 415 | identity_patch_on_uniform_regions_is_stable |
Smart patch on two identical uniform 120-gray 16×16 layers; verifies output changes by at most 1 per channel. |
| 433 | patch_interior_moves_toward_source_gradient |
Patches a gradient source into a uniform destination; verifies exterior unchanged and interior follows gradient direction. |
hcie-build-info — src/lib.rs
| Line | Function | Summary |
|---|---|---|
| 31 | generated_version_contains_the_same_build_id |
Verifies build_id() > 0 and VERSION string ends with "+build.{BUILD_ID}". |
Layer 4: ENGINE API
hcie-engine-api — tests/visual_regression.rs
| Line | Function | Summary |
|---|---|---|
| 39 | white_canvas_empty_document |
Validates blank 8×8 transparent document produces deterministic SHA-256 hash. |
| 58 | green_rect_draw_and_composite |
Draws a green rectangle and checks center pixel + deterministic hash. |
| 79 | red_rect_over_green_rect |
Two-layer composite (green bottom, red top) verifying top layer wins + hash. |
| 109 | vector_rect_golden |
Adds a vector rect shape and verifies rendering through Engine API with hash. |
| 145 | brush_stroke_golden |
Draws a brush stroke and verifies deterministic output via golden hash. |
| 178 | invert_filter_golden |
Applies invert filter and validates pixel values + deterministic hash. |
| 200 | undo_after_rect_golden |
Draws then undoes a rectangle; verifies composite hash matches initial state. |
| 221 | vector_fill_toggle_and_delete |
Creates vector rect, toggles fill on/off, deletes shape, verifying state at each step. |
hcie-engine-api — tests/vector_creation_history.rs
| Line | Function | Summary |
|---|---|---|
| 35 | first_vector_shape_is_one_atomic_layer_transaction |
Verifies first vector shape auto-creates vector layer as one history transaction with correct description. |
| 71 | later_vector_shapes_each_add_one_snapshot |
Verifies later vector shapes on the same layer each add one snapshot and undo correctly reduces shape count. |
hcie-engine-api — tests/meadow_check.rs
| Line | Function | Summary |
|---|---|---|
| 18 | meadow_brush_visual_check |
Manual visual check: renders Meadow brush strokes to 512×512 canvas and saves PNG; asserts colored pixels exist. |
hcie-engine-api — tests/leaves_check.rs
| Line | Function | Summary |
|---|---|---|
| 11 | leaves_brush_visual_check |
Manual visual check: renders Leaf brush strokes and saves to PNG; asserts colored pixels exist. |
hcie-engine-api — tests/stamp_floor_check.rs
| Line | Function | Summary |
|---|---|---|
| 11 | stamp_floor_brush_visual_check |
Manual visual check: renders Dirt/StampFloor brush strokes and saves to PNG; asserts colored pixels exist. |
hcie-engine-api — tests/bitmap_brush_stamp.rs
| Line | Function | Summary |
|---|---|---|
| 4 | bitmap_brush_stamp_shape |
Tests bitmap brush stamp produces roughly square bounding box (~8×8) with enough painted pixels. |
hcie-engine-api — tests/selection_clear.rs
| Line | Function | Summary |
|---|---|---|
| 30 | clear_selection_pixels_clears_inside_and_preserves_outside |
Creates 3×3 opaque layer, selects center pixel, clears selection; verifies center cleared, outside preserved. |
hcie-engine-api — tests/performance_stroke_4k.rs
| Line | Function | Summary |
|---|---|---|
| 41 | benchmark_4k_stroke_on_multilayer_document |
Performance benchmark: 10 layers on 3840×2160 canvas, 100 stroke segments with per-segment timing. |
hcie-engine-api — src/stroke_brush.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 547 | watercolor_dirty_radius_covers_jitter_and_scatter |
Verifies brush_dirty_radius for watercolor with jitter/scatter matches expected value 74.8. |
Layer 6: GUI — egui
hcie-gui-egui — tests/canvas_engine.rs
| Line | Function | Summary |
|---|---|---|
| 23 | canvas_widget_creation |
Tests CanvasWidget can be created and rendered in an egui test UI. |
| 41 | canvas_widget_zoom_0_1 |
Tests canvas widget renders with zoom=0.1. |
| 45 | canvas_widget_zoom_0_5 |
Tests canvas widget renders with zoom=0.5. |
| 49 | canvas_widget_zoom_1_0 |
Tests canvas widget renders with zoom=1.0. |
| 53 | canvas_widget_zoom_2_0 |
Tests canvas widget renders with zoom=2.0. |
| 57 | canvas_widget_zoom_4_0 |
Tests canvas widget renders with zoom=4.0. |
| 61 | canvas_widget_zoom_8_0 |
Tests canvas widget renders with zoom=8.0. |
| 65 | canvas_widget_zoom_min |
Tests canvas widget renders at ZOOM_MIN. |
| 69 | canvas_widget_zoom_max |
Tests canvas widget renders at ZOOM_MAX. |
| 83 | canvas_widget_pen |
Tests canvas widget with Pen tool. |
| 87 | canvas_widget_brush |
Tests canvas widget with Brush tool. |
| 91 | canvas_widget_eraser |
Tests canvas widget with Eraser tool. |
| 95 | canvas_widget_rect |
Tests canvas widget with VectorRect tool. |
| 99 | canvas_widget_line |
Tests canvas widget with VectorLine tool. |
| 103 | canvas_widget_select |
Tests canvas widget with Select tool. |
| 107 | canvas_widget_lasso |
Tests canvas widget with Lasso tool. |
| 111 | canvas_widget_magic_wand |
Tests canvas widget with MagicWand tool. |
| 115 | canvas_widget_eyedropper |
Tests canvas widget with Eyedropper tool. |
| 119 | canvas_widget_flood_fill |
Tests canvas widget with FloodFill tool. |
| 123 | canvas_widget_gradient |
Tests canvas widget with Gradient tool. |
| 127 | canvas_widget_move |
Tests canvas widget with Move tool. |
| 131 | canvas_widget_crop |
Tests canvas widget with Crop tool. |
| 136 | canvas_widget_with_pan |
Tests canvas widget with pan offset applied. |
| 146 | canvas_widget_with_selection |
Tests canvas widget with a selection rectangle active. |
| 156 | canvas_widget_lasso_with_points |
Tests canvas widget with Lasso tool and lasso points. |
| 167 | canvas_widget_text_active |
Tests canvas widget with Text tool and draft text active. |
| 181 | app_document_zoom_roundtrip |
Tests Zoom round-trip for many zoom values (0.1–64.0) through AppDocument. |
| 193 | engine_composite_after_draw |
Tests Engine compositing after drawing a green rectangle through AppDocument. |
| 207 | engine_multi_layer_composite |
Tests multi-layer compositing through AppDocument (adds layer, draws red rect, checks pixel). |
| 218 | transform_handle_variants |
Basic match test ensuring all TransformHandle variants exist. |
| 232 | selection_transform_from_engine_empty_mask |
Tests SelectionTransform::from_engine with empty mask produces empty transform. |
| 241 | zoom_clamp_values |
Tests zoom clamping for values from -1.0 to 100.0 stays within [ZOOM_MIN, ZOOM_MAX]. |
| 257 | event_bus_events_dispatched_to_engine |
Tests that engine undo changes composite pixel values through AppDocument. |
| 267 | test_text_layer_rotation |
Adds rotated text layer and verifies at least one non-transparent pixel was rasterized. |
hcie-gui-egui — tests/gui_audit.rs
| Line | Function | Summary |
|---|---|---|
| 6 | test_all_tools_in_toolbox_groups |
Verifies every Tool variant is present in TOOL_SLOTS. |
| 23 | test_all_tools_have_labels |
Verifies every tool has a non-empty label(). |
| 32 | test_all_tools_have_icons |
Verifies every tool has a non-empty icon(). |
| 41 | test_all_blend_modes_have_labels |
Verifies every BlendMode has a non-empty label(). |
| 50 | test_tools_menu_coverage |
Verifies expected tools in menu are defined in Tool::ALL. |
| 81 | test_view_menu_panels_match |
Verifies panel labels are unique. |
| 102 | test_all_tools_layer_type_known |
Calls allowed_layer_type() on every tool to ensure it doesn't panic. |
| 110 | test_feature_flags_are_non_empty |
Verifies all_features() returns non-empty flags including "layers", "undo_redo", "selection". |
| 123 | test_app_event_variants_exist |
Creates an EventBus to verify the module exists. |
| 131 | test_dock_panels_have_icons |
Verifies all HciePane variants have icons. |
| 154 | test_shape_tools_consistency |
Verifies 15 specific shape tools return true for is_shape_tool(). |
| 181 | test_raster_tools_consistency |
Verifies raster tools are also raster_compatible. |
| 194 | test_brush_presets |
Verifies 5 brush presets have positive size and opacity. |
| 211 | test_canvas_presets |
Verifies 1080p and Instagram canvas presets have correct dimensions. |
hcie-gui-egui — tests/widget_ui.rs
| Line | Function | Summary |
|---|---|---|
| 24 | plain_slider_default_range |
Tests slider with in-range value (50 in 0..100) stays at 50. |
| 29 | plain_slider_out_of_range_clamps |
Tests slider clamps value above range to max. |
| 34 | plain_slider_negative_clamps |
Tests slider clamps negative value to range min. |
| 39 | plain_slider_suffix |
Tests slider renders with "px" suffix. |
| 49 | plain_slider_integer_type |
Tests slider with i32 integer type. |
| 58 | plain_slider_custom_width |
Tests slider with custom width. |
| 68 | plain_slider_both_themes |
Tests slider renders with both ProDark and PhotoshopLight themes. |
| 79 | tool_state_default_active_tool_is_brush |
Verifies default active tool is Brush. |
| 85 | tool_state_default_colors |
Verifies default primary (black) and secondary (white) colors. |
| 92 | tool_state_default_pressure |
Verifies default pressure is 1.0. |
| 98 | tool_state_default_not_drawing |
Verifies default state has is_drawing=false, no drag start, no selection rect. |
| 106 | tool_state_default_tool_configs |
Verifies active_size() returns a positive value. |
| 113 | tool_state_default_brush_presets |
Verifies default brush presets exist and active preset is "basic_round". |
| 120 | tool_state_pinned_panels_default |
Verifies default pinned panels include Tools, Brushes & Tips, Color Palette, Layers. |
| 129 | app_document_new_defaults |
Tests AppDocument default state (name, zoom=1, no textures, empty buffer). |
| 139 | app_document_engine_accessible |
Verifies AppDocument wraps Engine with correct canvas dimensions. |
| 147 | app_document_default_name |
Tests AppDocument name is set correctly. |
| 153 | event_bus_push_pop |
Tests EventBus push and pop single event. |
| 166 | event_bus_fifo_order |
Tests EventBus maintains FIFO order. |
| 177 | event_bus_drain |
Tests EventBus drain returns all events. |
| 189 | event_bus_tool_changed |
Tests EventBus pushes/reads ToolChanged event. |
| 197 | event_bus_zoom_set |
Tests EventBus pushes/reads ZoomSet event. |
| 205 | event_bus_theme_changed |
Tests EventBus pushes/reads ThemeChanged event. |
| 216 | event_bus_apply_filter |
Tests EventBus pushes/reads ApplyFilter event with params. |
| 226 | event_bus_multiple_events |
Tests EventBus with three selection events in sequence. |
| 238 | event_bus_new_empty |
Tests new EventBus is empty. |
| 245 | event_bus_doc_created |
Tests EventBus pushes/reads DocCreated event with name, width, height. |
| 260 | tool_button_selected |
Tests ToolButton renders in selected state. |
| 268 | tool_button_unselected |
Tests ToolButton renders in unselected state. |
| 276 | tool_button_both_themes |
Tests ToolButton renders with both themes. |
| 286 | plain_slider_logarithmic |
Tests slider in logarithmic mode. |
| 296 | plain_slider_snap_steps |
Tests slider with snap steps. |
| 306 | plain_slider_percent_suffix |
Tests slider with "%" suffix. |
| 316 | plain_slider_u8_range |
Tests slider with u8 range. |
| 325 | plain_slider_usize_range |
Tests slider with usize range. |
| 334 | selection_op_variants |
Tests SelectionOp enum variants can be constructed. |
| 343 | event_bus_selection_shrink |
Tests EventBus SelectionShrink event. |
| 351 | event_bus_selection_feather |
Tests EventBus SelectionFeather event. |
| 359 | event_bus_selection_erode |
Tests EventBus SelectionErode event. |
| 367 | event_bus_selection_fade |
Tests EventBus SelectionFade event. |
| 375 | event_bus_clipboard_cut |
Tests EventBus ClipboardCut event. |
| 383 | event_bus_clipboard_paste_special |
Tests EventBus ClipboardPasteSpecial event. |
| 391 | event_bus_layer_added |
Tests EventBus LayerAdded event. |
| 399 | event_bus_layer_deleted |
Tests EventBus LayerDeleted(42) event. |
| 407 | event_bus_rotate_clockwise |
Tests EventBus RotateClockwise event. |
| 415 | event_bus_rotate_counter_clockwise |
Tests EventBus RotateCounterClockwise event. |
| 423 | event_bus_rotate_180 |
Tests EventBus Rotate180 event. |
| 431 | event_bus_rotate_layer |
Tests EventBus RotateLayer(45) event. |
| 439 | event_bus_flip_horizontal |
Tests EventBus FlipHorizontal event. |
| 447 | event_bus_flip_vertical |
Tests EventBus FlipVertical event. |
| 455 | event_bus_layer_clear |
Tests EventBus LayerClear event. |
| 463 | event_bus_transform_start |
Tests EventBus TransformStart event. |
| 471 | event_bus_image_size |
Tests EventBus ImageSize event. |
| 479 | event_bus_canvas_size |
Tests EventBus CanvasSize event. |
| 487 | event_bus_ai_chat_submit |
Tests EventBus AiChatSubmit event. |
| 495 | event_bus_adjustment_brightness_contrast |
Tests EventBus ApplyAdjustmentBrightnessContrast event. |
| 505 | event_bus_adjustment_hue_saturation |
Tests EventBus ApplyAdjustmentHueSaturation event. |
| 515 | event_bus_vector_shape_deleted |
Tests EventBus VectorShapeDeleted event. |
| 523 | event_bus_file_export_import |
Tests EventBus Export/Import/ImportBrushes events. |
| 534 | event_bus_align_all_axes |
Tests EventBus AlignLayer event for all 6 align axes (HCenter, VCenter, Top, Bottom, Left, Right). |
hcie-gui-egui — src/brush_import.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 604 | test_extract_desc_block_names |
Tests extracting descriptor block names from an ABR brush file; verifies names are descriptive. |
| 623 | test_abr_import_with_names |
Tests importing ABR brush presets; verifies bitmap presets have descriptive names. |
Layer 6: GUI — iced
hcie-iced-gui — tests/selection_test.rs
| Line | Function | Summary |
|---|---|---|
| 11 | test_selection_transform_is_empty |
Verifies empty SelectionTransform returns true for is_empty(). |
| 24 | test_selection_transform_with_data |
Verifies non-empty SelectionTransform returns false for is_empty(). |
| 37 | test_crop_state_lifecycle |
Tests CropState: start_drag, update_drag, end_drag, confirm lifecycle. |
| 63 | test_crop_cancel |
Tests CropState cancel restores idle state. |
| 73 | test_transform_handle_cursor_hints |
Verifies cursor_hint() returns correct strings for Move, TopLeft, Rotate handles. |
| 80 | selection_modes_combine_alpha_without_losing_soft_edges |
Tests combine_masks with Replace, Add, Subtract, Intersect modes. |
| 99 | irregular_mask_bounds_and_fill_spans_are_exact |
Tests mask_bounds and selected_spans on irregular mask. |
| 109 | crop_clamps_drag_and_cancel_restores_idle_state |
Tests CropState start_drag_clamped, update_drag clamped to canvas, cancel restores state. |
| 120 | clipboard_transform_is_centered_and_transform_geometry_is_safe |
Tests centered_transform produces correct position and sanitize_geometry handles NaN/negative sizes. |
| 136 | inverse_affine_identity_sampling_is_exact |
Verifies the inverse-affine rasterizer preserves identity placement exactly. |
| 159 | rotated_bounds_expand_to_cover_corners |
Tests that rotated bounds include every corner rather than clipping to unrotated box. |
| 177 | rotated_handle_hit_test_and_resize_share_geometry |
Verifies rotated handle hit-testing and opposite-corner anchoring during resize. |
| 204 | rotation_drag_adds_delta_to_original_angle |
Verifies rotation uses drag-start delta and retains pre-existing rotation. |
hcie-iced-gui — tests/feature_scorecard.rs
| Line | Function | Summary |
|---|---|---|
| 55 | semantic_menu_dispatch_has_no_positional_message |
Verifies menu uses semantic MenuCommand dispatch not positional (usize, usize). |
| 73 | cut_does_not_dispatch_copy |
Verifies Cut uses distinct MenuCommand::Cut not menu-alias-based Copy. |
| 91 | cycle_three_canvas_selection_clipboard_crop_text_paths_are_connected |
Verifies selection overlay, distinct cut, transform placement, crop lifecycle, text multiline, gradient, canvas input parity, and pen/spray distinct. |
| 152 | screenshot_cli_uses_native_capture_and_panel_crop |
Verifies screenshot CLI uses native window capture and panel crop functions. |
| 170 | cycle_one_state_paths_are_complete_and_persisted |
Verifies dock drop targets, theme sync isolation, and sidebar mode persistence. |
| 211 | cycle_two_vector_completion_paths_are_connected |
Verifies vector screen-constant handles, constrained drag, layer-bound cancel, boolean result, and clamped controls. |
| 252 | cycle_four_panel_and_document_paths_are_connected |
Verifies layer hierarchy controls, style cancel/restore, immutable previews, filter schema coverage, document path identity, and close-save continuation. |
| 316 | cycle_five_practical_paths_are_connected |
Verifies AI real streaming, reasoning transcript, validated script output, viewer deterministic navigation, and safe edit. |
hcie-iced-gui — tests/raster_test.rs
| Line | Function | Summary |
|---|---|---|
| 6 | linear_gradient_interpolates_and_respects_mask |
Tests linear gradient interpolation with pixel mask applied. |
| 27 | radial_gradient_uses_distance_from_origin |
Tests radial gradient using distance from origin. |
hcie-iced-gui — src/app.rs (internal)
| Line | Function | Summary |
|---|---|---|
| 1536 | move_commit_pushes_one_named_snapshot |
Tests apply_transform_to_layer pushes exactly one history entry named "Move Selection". |
| 10083 | popup_and_menu_escape_priority_is_stable |
Tests overlay_escape_target returns correct priority ordering. |
| 10098 | document_tab_close_uses_semantic_continuations |
Tests document_close_disposition for dirty, clean, last-tab, and invalid scenarios. |
| 10119 | document_tab_close_keeps_active_index_safe |
Tests active_index_after_document_close produces safe indices. |
| 10128 | selection_sync_request_is_consumed_once |
Tests consume_selection_sync_request flag is consumed once and stays false until reset. |
| 10140 | dirty_region_union_retains_all_updates_before_view |
Tests union_regions correctly merges two overlapping regions. |
| 10152 | proximate_identical_color_is_skipped |
Tests is_proximate_to_last returns true for identical colors (diff=0 ≤ threshold). |
| 10163 | proximate_small_slider_step_skipped |
Tests is_proximate_to_last returns true for +1 channel change. |
| 10171 | large_change_not_proximate |
Tests is_proximate_to_last returns false for +3 in all channels. |
| 10179 | three_unit_change_exceeds_threshold |
Tests is_proximate_to_last returns false for single +3 channel change. |
| 10187 | mixed_small_changes_are_proximate |
Tests is_proximate_to_last returns true for +1 in all channels. |
hcie-iced-gui — src/app/transform_dirty.rs
| Line | Function | Summary |
|---|---|---|
| 70 | consecutive_positions_retain_old_and_new_extents |
Tests that two consecutive transform positions produce correct old+new union bounds. |
hcie-iced-gui — src/color_picker.rs
| Line | Function | Summary |
|---|---|---|
| 1048 | rgb_hsl_roundtrip_preserves_channels_with_rounding_tolerance |
Tests RGB→HSL→RGB roundtrip for 4 colors with ≤1 tolerance per channel. |
| 1059 | rgb_hsv_roundtrip_preserves_channels_with_rounding_tolerance |
Tests RGB→HSV→RGB roundtrip for 4 colors with ≤1 tolerance per channel. |
| 1070 | hex_parser_preserves_or_explicitly_updates_alpha |
Tests parse_hex_color with 6-digit, 8-digit, and invalid hex strings. |
hcie-iced-gui — src/ai_chat.rs
| Line | Function | Summary |
|---|---|---|
| 794 | canvas_context_replaces_only_latest_user_payload |
Tests build_messages_json replaces only the latest user message with canvas context. |
| 818 | transcript_includes_reasoning_and_tool_results |
Tests transcript_text includes reasoning and tool messages correctly. |
hcie-iced-gui — src/ai_script.rs
| Line | Function | Summary |
|---|---|---|
| 244 | generated_output_must_parse_before_run_is_enabled |
Tests validate_script_output accepts valid DSL and rejects invalid input. |
hcie-iced-gui — src/screenshot.rs
| Line | Function | Summary |
|---|---|---|
| 126 | physical_crop_scales_and_clamps |
Tests physical_crop_rect scaling rounds outward and clamps to viewport. |
hcie-iced-gui — src/sidebar/mod.rs
| Line | Function | Summary |
|---|---|---|
| 858 | every_subtool_has_an_svg_icon |
Tests that every tool in TOOL_SLOTS has a resolvable SVG icon path. |
hcie-iced-gui — src/theme.rs
| Line | Function | Summary |
|---|---|---|
| 65 | theme_state_retains_and_reports_selected_preset |
Tests ThemeState preset changes are retained and colors updated accordingly. |
hcie-iced-gui — src/viewer/mod.rs
| Line | Function | Summary |
|---|---|---|
| 989 | navigation_wraps_deterministically |
Tests ViewerState prev/next wraps correctly with 2 images. |
| 999 | supported_extensions_are_case_insensitive |
Tests is_supported_image is case-insensitive and rejects non-image files. |
hcie-iced-gui — src/settings.rs
| Line | Function | Summary |
|---|---|---|
| 367 | legacy_settings_default_new_cycle_one_fields |
Tests deserializing legacy settings (without new fields) gets safe defaults. |
hcie-iced-gui — src/cli.rs
| Line | Function | Summary |
|---|---|---|
| 206 | parses_full_screenshot_and_startup_file |
Tests CLI parses --screenshot flag with output file and startup file. |
| 223 | parses_named_panel_screenshot |
Tests CLI parses --screenshot-panel flag. |
| 229 | parses_svg_editor_screenshot |
Tests CLI parses --screenshot-svg-editor flag. |
| 237 | rejects_duplicate_positional_files |
Tests CLI rejects multiple positional file arguments. |
| 242 | supports_dash_prefixed_file_after_terminator |
Tests CLI supports dash-prefixed filenames after -- terminator. |
hcie-iced-gui — src/canvas/shader_canvas.rs
| Line | Function | Summary |
|---|---|---|
| 1282 | selection_overlay_uses_one_texture_sample |
Verifies the WGSL shader uses exactly one textureSample(selection_texture call (anti-regression for nine-sample detector). |
hcie-iced-gui — src/canvas/texture_update.rs
| Line | Function | Summary |
|---|---|---|
| 196 | retained_shader_reference_keeps_stable_allocation_and_dirty_budget |
Tests that retained shader reference keeps stable allocation and correct dirty budget over 120 updates. |
| 227 | legacy_arc_copy_on_write_reproduction_is_full_canvas |
Demonstrates that Arc::get_mut on a cloned Arc returns None, forcing 33MB fallback clone (documents removed CoW fallback). |
| 237 | packed_update_is_exact_and_bounds_checked |
Tests TextureUpdate::pack produces correct rows and rejects invalid regions. |
| 253 | diagnostic_4k_dirty_staging_latency |
Diagnostic benchmark (ignored) measuring 4K dirty region staging latency and byte reduction vs legacy. |
hcie-iced-gui — src/selection/state.rs
| Line | Function | Summary |
|---|---|---|
| 188 | selection_texture_encodes_membership_and_border_once |
Tests encode_selection_texture correctly classifies interior (128), border (255), and empty (0). |
| 212 | feathered_mask_uses_existing_threshold |
Tests feathered mask encoding: values >127 become 255 (border), ≤127 become 0 (outside). |
hcie-iced-gui — src/panels/menus.rs
| Line | Function | Summary |
|---|---|---|
| 1205 | enabled_menu_leaves_have_commands |
Verifies enabled menu items always have a command and submenus never have commands. |
| 1232 | recent_file_commands_are_path_based |
Tests recent file menu items use path-based commands, not positional indices. |
| 1253 | implemented_static_menu_leaves_match_audited_set |
Snapshot test: verifies all 153 enabled menu entries match expected paths. |
| 1423 | context_cut_is_enabled_and_distinct_from_copy |
Verifies context Cut uses MenuCommand::Cut with enabled=true. |
| 1432 | shared_menu_metrics_keep_rows_compact_and_gutters_stable |
Verifies MENU_ROW_HEIGHT, paddings, gutters, and arrow character are within expected ranges. |
hcie-iced-gui — src/panels/styles.rs
| Line | Function | Summary |
|---|---|---|
| 319 | tooltip_balloon_is_opaque_and_uses_theme_contrast_tokens |
Tests tooltip balloon background opacity, text color, border, and shadow in two themes. |
hcie-iced-gui — src/panels/custom_shapes.rs
| Line | Function | Summary |
|---|---|---|
| 211 | responsive_grid_adds_columns_as_width_grows |
Tests grid_column_count adds one column per ~64px of width (with margin). |
hcie-iced-gui — src/panels/brushes.rs
| Line | Function | Summary |
|---|---|---|
| 874 | catalog_contains_every_engine_brush_style |
Asserts BRUSH_STYLES has exactly 34 entries. |
| 879 | category_filter_keeps_expected_groups |
Tests category_matches_style for various category combinations. |
| 900 | media_crates_expose_complete_unique_catalog |
Verifies all media brush crates combined give exactly 47 unique presets. |
hcie-iced-gui — src/panels/svg_editor.rs
| Line | Function | Summary |
|---|---|---|
| 874 | straight_paths_retain_author_nodes |
Tests straight SVG paths retain their exact node count. |
| 882 | curved_paths_fall_back_to_dense_visual_nodes |
Tests curved SVG paths flatten to ≥19 visual nodes. |
| 892 | selection_updates_numeric_inputs_and_snap_is_deterministic |
Tests node selection updates x/y inputs, snap function works correctly, and toggling snap off. |
hcie-iced-gui — src/panels/title_bar.rs
| Line | Function | Summary |
|---|---|---|
| 299 | menu_anchors_are_deterministic_across_viewport_widths |
Tests menu_anchor_x calculation for various indices and viewport widths. |
hcie-iced-gui — src/vector_edit.rs
| Line | Function | Summary |
|---|---|---|
| 386 | overlap_selection_cycles_without_external_counter |
Tests cycle_selection cycles through hit indices in reverse order without external state. |
| 397 | handle_hit_area_is_screen_constant_across_zoom |
Tests hit_test_handle returns correct handle at two different zoom levels. |
| 416 | rotation_handle_offset_is_screen_constant_at_low_zoom |
Tests rotation handle offset is screen-constant at 0.25 zoom. |
| 430 | every_resize_handle_prevents_inversion_and_nan |
Tests all 8 resize handles prevent inversion and NaN with extreme/finite deltas. |
| 463 | shift_aspect_and_alt_center_constraints_hold |
Tests Shift+Alt resize preserves 2:1 aspect ratio and original center. |
| 480 | drag_is_deterministic_and_rejects_non_finite_input |
Tests transform_shape returns correct moved bounds and handles NaN gracefully. |
| 498 | rotated_handle_hit_test_uses_rotated_position |
Tests hit_test_handle works correctly with a 90° rotated shape. |
hcie-iced-gui — src/widgets/plain_slider.rs
| Line | Function | Summary |
|---|---|---|
| 442 | percentage_format_parse_and_clamp_are_stable |
Tests slider format_value with "%" suffix and parse_value clamping. |
| 450 | hover_typing_accepts_only_numeric_fragments |
Tests typing state accepts "-" and numeric fragments, rejects "px". |
| 460 | pointer_mapping_respects_endpoints_and_step |
Tests value_at maps 0→0%, 100→100%, 33→~33%. |
hcie-iced-gui — src/dock/state.rs
| Line | Function | Summary |
|---|---|---|
| 161 | pane_labels_round_trip |
Tests PaneType::from_label round-trip is case-sensitive. |
| 168 | pane_drops_support_all_regions_and_preserve_one_canvas |
Tests all dock drop regions accept non-Canvas panes and reject Center for non-Canvas. |
| 195 | canvas_drop_is_rejected_and_auto_hide_restores_uniquely |
Tests Canvas pane drops reject, auto-hide/restore works, and invariants hold. |
| 214 | floating_panel_redocks_at_preview_target_and_can_minimize |
Tests floating panel float, redock at target, auto-hide floating, and invariants. |
| 234 | global_release_clears_click_only_and_floating_drag_state |
Tests cancel_transient_drags clears both drag and floating_drag state. |
hcie-iced-gui — src/dock/manager.rs
| Line | Function | Summary |
|---|---|---|
| 145 | policy_matrix_allows_only_tool_edges |
Tests DockDropPolicy::accepts rejects Canvas for Center and allows non-Canvas for edges. |
| 162 | document_cannot_close_auto_hide_or_float |
Tests DockDropPolicy::accepts_placement rejects Canvas for Closed, AutoHidden, Floating. |
hcie-iced-gui — src/dock/sizing.rs
| Line | Function | Summary |
|---|---|---|
| 436 | policy_values_prioritize_canvas_and_bound_color_picker |
Tests panel_size_policy values for Canvas (min 320×240, grow priority) and ColorPicker (preferred 280×460, bounded). |
| 451 | subtree_constraints_follow_split_axis |
Tests aggregate_subtree_policy produces correct min/max for Canvas+ColorPicker split. |
| 462 | default_and_compact_viewports_have_feasible_bounds |
Tests both 1280×820 and 1100×700 viewports satisfy all panel minimums in default dock. |
| 483 | color_picker_does_not_receive_vertical_surplus_with_list_sibling |
Tests vertical surplus distribution keeps ColorPicker within its height bounds with a Layers sibling. |
| 509 | structure_rebalance_avoids_oversized_color_picker |
Tests StructureChanged rebalance corrects 50/50 split to give Canvas >60%. |
| 526 | user_resize_preserves_valid_and_clamps_invalid_ratios |
Tests constrain_user_resize_ratio preserves 0.7 and clamps 0.95 to a feasible range. |
| 536 | window_growth_gives_surplus_to_canvas |
Tests WindowResize rebalance gives all extra width to Canvas, not utility panels. |
| 555 | color_picker_minimum_height_is_420 |
Asserts ColorPicker minimum height policy is exactly 420 pixels. |
hcie-iced-gui — src/dock/persistence.rs
| Line | Function | Summary |
|---|---|---|
| 171 | persisted_layout_round_trips_without_runtime_ids |
Tests PersistedDockLayout serialization strips runtime Pane IDs and round-trips with valid invariants. |
| 180 | malformed_tree_deduplicates_and_injects_canvas |
Tests restore handles duplicate panels (two Layers) by deduplicating and injecting Canvas. |
| 201 | missing_new_fields_are_serde_compatible |
Tests that minimal JSON ({"tree":null}) deserializes with empty auto_hidden and floating. |
| 208 | ratio_sanitization_accepts_extreme_finite_values_only |
Tests sanitized_ratio accepts 0.02, clamps 0.999→0.99, and converts NaN→0.5. |
| 221 | floating_round_trip_clamps_and_redocks_uniquely |
Tests floating panel serialization, clamp within viewport, and unique redock. |
hcie-iced-gui — src/dock/view.rs
| Line | Function | Summary |
|---|---|---|
| 707 | title_bar_uses_explicit_drag_handle_and_separate_controls |
Verifies the dock title bar uses explicit mouse_area drag handle and separate controls, not Fill space. |
hcie-iced-gui — src/dock/preview.rs
| Line | Function | Summary |
|---|---|---|
| 198 | centers_are_never_approved |
Tests approved_target returns None for grid center point. |
| 210 | outer_and_pane_edges_are_approved |
Tests approved_target correctly identifies left outer edge and top pane edge. |
| 230 | narrow_viewport_clamps_to_empty_bounds |
Tests narrow viewport (toolbox > viewport width) produces zero-size grid. |
| 239 | edge_classification_matches_iced_thirds_and_priority |
Tests pane_edge returns correct edge within first third and None in middle. |
| 257 | outer_edge_uses_iced_dynamic_thickness_and_priority |
Tests outer_edge returns correct edge within first 10px and None beyond. |
hcie-iced-gui — src/dock/floating.rs
| Line | Function | Summary |
|---|---|---|
| 118 | default_rect_clamps_to_small_viewports |
Tests default_rect clamps position so 240×180 window fits in 4-pane viewport. |
Brush Catalog Crates
| Crate | File | Line | Function | Summary |
|---|---|---|---|---|
hcie-dry-media-brushes |
src/lib.rs | 246 | dry_media_catalog_is_complete_and_unique |
Verifies exactly 19 dry media presets with unique IDs. |
hcie-paint-brushes |
src/lib.rs | 129 | paint_catalog_is_complete_and_unique |
Verifies exactly 7 paint presets with unique IDs. |
hcie-digital-brushes |
src/lib.rs | 144 | digital_catalog_separates_raster_and_vector_tools |
Verifies 5 digital presets and 2 vector brush presets. |
hcie-watercolor-brushes |
src/lib.rs | 438 | presets_count |
Verifies exactly 8 watercolor presets. |
hcie-watercolor-brushes |
src/lib.rs | 443 | all_presets_use_watercolor_style |
Verifies all watercolor presets use BrushStyle::Watercolor. |
hcie-watercolor-brushes |
src/lib.rs | 450 | splat_dimensions |
Verifies render_watercolor_splat produces SPLAT_SIZE×SPLAT_SIZE×4 pixels. |
hcie-watercolor-brushes |
src/lib.rs | 456 | splat_has_nonzero_alpha |
Verifies the rendered splat has at least one visible (non-zero alpha) pixel. |
hcie-ink-brushes |
src/lib.rs | 141 | ink_catalog_is_complete_and_unique |
Verifies exactly 8 ink presets with unique IDs. |
Summary
| Category | Approx. Count |
|---|---|
| Layer 1: DATA (protocol, color) | 27 |
| Layer 2: ENGINE CORE (blend, brush, draw, composite, filter, selection, vector, history, fx, io, psd, vision, build-info) | ~155 |
| Layer 4: ENGINE API | 15 |
| Layer 6: GUI — egui (canvas_engine, gui_audit, widget_ui, brush_import) | ~90 |
| Layer 6: GUI — iced (selection, feature_scorecard, raster, app, dock, panels, widgets, color, ai, etc.) | ~120+ |
| Brush catalog crates | 8 |
| Total | ~415+ |