diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-07 10:01:03 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-07 10:01:03 +0100 |
| commit | 9702ea06ced9585a705c41186f814700bc859dcd (patch) | |
| tree | d45398e443d9b561991f820869e4f200d4d86ec0 /src | |
| parent | dccbfe7f995db2e2bfe80fc611f6f053cafd9bb3 (diff) | |
test(gpu): Add automatic validation for effect test coverage
Problem: When new effects are added to demo_effects.h, developers might
forget to update test_demo_effects.cc, leading to untested code.
Solution: Added compile-time constants and runtime assertions to enforce
test coverage:
1. Added EXPECTED_POST_PROCESS_COUNT = 8
2. Added EXPECTED_SCENE_COUNT = 6
3. Runtime validation in each test function
4. Fails with clear error message if counts don't match
Error message when validation fails:
✗ COVERAGE ERROR: Expected N effects, but only tested M!
✗ Did you add a new effect without updating the test?
✗ Update EXPECTED_*_COUNT in test_demo_effects.cc
Updated CONTRIBUTING.md with mandatory test update requirement:
- Added step 3 to "Adding a New Visual Effect" workflow
- Clear instructions on updating effect counts
- Verification command examples
This ensures no effect can be added without corresponding test coverage.
Tested validation by intentionally breaking count - error caught correctly.
Diffstat (limited to 'src')
| -rw-r--r-- | src/tests/test_demo_effects.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/tests/test_demo_effects.cc b/src/tests/test_demo_effects.cc index c12345d..3292c9c 100644 --- a/src/tests/test_demo_effects.cc +++ b/src/tests/test_demo_effects.cc @@ -1,9 +1,19 @@ // This file is part of the 64k demo project. // It tests all demo effect classes for basic construction and initialization. // Validates that every effect can be instantiated and initialized without crashes. +// +// MAINTENANCE REQUIREMENT: When adding a new effect to demo_effects.h: +// 1. Add it to the appropriate test list (post_process_effects or scene_effects) +// 2. Update EXPECTED_POST_PROCESS_COUNT or EXPECTED_SCENE_COUNT below +// 3. Run test to verify: ./build/test_demo_effects +// 4. If the effect requires Renderer3D, add it to requires_3d check in test_scene_effects() #if !defined(STRIP_ALL) // Test code only - zero size impact on final binary +// Expected effect counts - UPDATE THESE when adding new effects! +static constexpr int EXPECTED_POST_PROCESS_COUNT = 8; // FlashEffect, PassthroughEffect, GaussianBlurEffect, ChromaAberrationEffect, DistortEffect, SolarizeEffect, FadeEffect, ThemeModulationEffect +static constexpr int EXPECTED_SCENE_COUNT = 6; // HeptagonEffect, ParticlesEffect, ParticleSprayEffect, MovingEllipseEffect, FlashCubeEffect, Hybrid3DEffect + #include "effect_test_helpers.h" #include "webgpu_test_fixture.h" #include "gpu/demo_effects.h" @@ -113,6 +123,16 @@ static void test_post_process_effects() { fprintf(stdout, " ✓ %d/%zu post-process effects tested\n", passed, effects.size()); + + // Validation: Ensure test coverage matches expected count + const int tested_count = static_cast<int>(effects.size()); + if (tested_count != EXPECTED_POST_PROCESS_COUNT) { + fprintf(stderr, " ✗ COVERAGE ERROR: Expected %d post-process effects, but only tested %d!\n", + EXPECTED_POST_PROCESS_COUNT, tested_count); + fprintf(stderr, " ✗ Did you add a new post-process effect without updating the test?\n"); + fprintf(stderr, " ✗ Update EXPECTED_POST_PROCESS_COUNT in test_demo_effects.cc\n"); + assert(false && "Post-process effect count mismatch - update test!"); + } } // Test 2: Scene effects @@ -171,6 +191,16 @@ static void test_scene_effects() { fprintf(stdout, " ✓ %d/%zu scene effects tested (%d skipped)\n", passed, effects.size(), skipped); + + // Validation: Ensure test coverage matches expected count + const int tested_count = static_cast<int>(effects.size()); + if (tested_count != EXPECTED_SCENE_COUNT) { + fprintf(stderr, " ✗ COVERAGE ERROR: Expected %d scene effects, but only tested %d!\n", + EXPECTED_SCENE_COUNT, tested_count); + fprintf(stderr, " ✗ Did you add a new scene effect without updating the test?\n"); + fprintf(stderr, " ✗ Update EXPECTED_SCENE_COUNT in test_demo_effects.cc\n"); + assert(false && "Scene effect count mismatch - update test!"); + } } // Test 3: Effect type classification |
