summaryrefslogtreecommitdiff
path: root/src/tests/effect_test_helpers.h
blob: 33355ee3503b90dc3dc6cfba406b48275a086bcb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// This file is part of the 64k demo project.
// It provides reusable test helpers for GPU effect testing.
// Includes lifecycle helpers, pixel validation, and smoke tests.

#pragma once

#include <cstdint>
#include <functional>
#include <vector>

// Forward declarations
class Effect;
class MainSequence;

// ============================================================================
// Pixel Validation Helpers
// ============================================================================

// Validate pixels using a predicate function
// Returns true if at least one pixel matches the predicate
bool validate_pixels(
    const std::vector<uint8_t>& pixels, int width, int height,
    std::function<bool(uint8_t r, uint8_t g, uint8_t b, uint8_t a)> predicate);

// Check if any pixel is non-black (rendered something)
bool has_rendered_content(const std::vector<uint8_t>& pixels, int width,
                          int height);

// Check if all pixels match a specific color (within tolerance)
bool all_pixels_match_color(const std::vector<uint8_t>& pixels, int width,
                            int height, uint8_t r, uint8_t g, uint8_t b,
                            uint8_t tolerance = 5);

// Compute simple hash of pixel data (for deterministic output checks)
uint64_t hash_pixels(const std::vector<uint8_t>& pixels);

// ============================================================================
// Effect Lifecycle Helpers
// ============================================================================

// Test that an effect can be constructed and initialized
// Returns true if lifecycle succeeds, false otherwise
bool test_effect_lifecycle(Effect* effect, MainSequence* main_seq);

// Test that an effect can render without crashing (smoke test)
// Does not validate output, only checks for crashes
bool test_effect_render_smoke(Effect* effect);