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]>
2.3 KiB
2.3 KiB
Testing
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.rspins 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 withSIM_GOLDEN_PRINT=1after an intended change; pinned for aarch64 macOS). - Export (
crates/export/tests): every format is encoded and decoded back, checking frame count, size and pixels. Whenffmpeg/ffprobeare 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
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
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.