mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-14 19:27:05 -04:00
Pin exact CPU pixel hashes of the simulation effects refactored into shared GPU plans in M13.23 (CC Rainfall/Snowfall/Star Burst/Bubbles/Drizzle/Hair/ Mr. Mercury, Caustics, Wave World, Foam, Shatter, Card Dance, Card Wipe): 404 frames over default and non-default settings, four times incl. a seek backwards, 8 and 32 bpc, full and half resolution. Verified bit-identical between7a5a93b(before M13.23) and808ca70(after). Co-Authored-By: Claude Opus 5.5 <[email protected]>
48 lines
2.3 KiB
Markdown
48 lines
2.3 KiB
Markdown
# Testing
|
|
|
|
```sh
|
|
cargo test --workspace # everything
|
|
cargo xtask ci # fmt, clippy -D warnings, tests, layers, assets, wasm
|
|
```
|
|
|
|
## What the tests cover
|
|
|
|
- **Engine commands** (`crates/engine/src/tests*.rs`): every command family, including undo and
|
|
redo, and that every menu entry resolves to a registered command.
|
|
- **Rendering** (`crates/render`): pixel checks on small compositions, for blend modes, masks,
|
|
mattes, time remapping, 3D projection, lighting and shadows. Fast paths (the layer cache, the
|
|
affine compositor, blurs, motion blur accumulation) are checked against their reference
|
|
implementations.
|
|
- **Effects** (`crates/effects`): each effect has a determinism test and at least one behaviour
|
|
test (identity at neutral settings, known pixel results, or simulations giving the same frame
|
|
whether you seek straight to it or play up to it). A registry-wide test checks that effects
|
|
which read the clock are declared time-dependent. `crates/effects/tests/sim_golden.rs` pins
|
|
exact pixel hashes of the simulation effects the GPU shares plans with (CC Rainfall … Card
|
|
Wipe) at several settings, times, bit depths and resolutions, so any change to their CPU output
|
|
fails (re-pin with `SIM_GOLDEN_PRINT=1` after an intended change; pinned for aarch64 macOS).
|
|
- **Export** (`crates/export/tests`): every format is encoded and decoded back, checking frame
|
|
count, size and pixels. When `ffmpeg`/`ffprobe` are installed they are used as an outside
|
|
check; they are never linked or shipped.
|
|
- **Automation** (`crates/automation`, `apps/effectcraft-cli/tests`): MCP protocol round trips and
|
|
the command-line tool's JSON output.
|
|
- **Interface** (`crates/ui-egui`): headless egui_kittest tests for panels and dialogs.
|
|
|
|
## Looking at the interface without a window
|
|
|
|
```sh
|
|
cargo run -p effectcraft-ui-egui --example snapshot -- --out ui.png \
|
|
--step '{"method":"engine.execute","params":{"command":"layer.select","params":{"layers":["#2"]}}}'
|
|
```
|
|
|
|
Each `--step` is a control-channel request; `{"method":"snap","params":{"path":"x.png"}}` writes an
|
|
intermediate image.
|
|
|
|
## Benchmarks
|
|
|
|
```sh
|
|
cargo run --release -p effectcraft-cli -- bench --n 10 --play 30
|
|
```
|
|
|
|
prints per-layer and per-effect timings for one frame, and playback timings with and without the
|
|
layer cache.
|