diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-14 02:39:49 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-14 02:39:49 +0100 |
| commit | 8dd77545b5ec2f45ce46b98dd7d94a3c4a13e290 (patch) | |
| tree | a338b9c1356da64a609621155c81d8d96f7ca7fe /src/tests/common | |
| parent | c007d7fa6ddb1936108aeca156b2a4bda425ca84 (diff) | |
Refactor duplicated test setup/teardown code into shared fixtures:
- test_math_helpers.h: Float comparison (test_near, test_near_vec3)
- AudioTestFixture: RAII wrapper for AudioEngine lifecycle
- EffectTestFixture: Combined WebGPU + AudioEngine + MainSequence
Migrated 9 test files (3 math, 6 audio) to use fixtures.
Net reduction: 54 LOC (178 insertions, 232 deletions).
All 34 tests passing.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/tests/common')
| -rw-r--r-- | src/tests/common/audio_test_fixture.cc | 19 | ||||
| -rw-r--r-- | src/tests/common/audio_test_fixture.h | 26 | ||||
| -rw-r--r-- | src/tests/common/effect_test_fixture.cc | 23 | ||||
| -rw-r--r-- | src/tests/common/effect_test_fixture.h | 28 | ||||
| -rw-r--r-- | src/tests/common/test_math_helpers.h | 18 |
5 files changed, 114 insertions, 0 deletions
diff --git a/src/tests/common/audio_test_fixture.cc b/src/tests/common/audio_test_fixture.cc new file mode 100644 index 0000000..42bf27f --- /dev/null +++ b/src/tests/common/audio_test_fixture.cc @@ -0,0 +1,19 @@ +// audio_test_fixture.cc - RAII wrapper for AudioEngine lifecycle +// Simplifies audio test setup and teardown + +#include "audio_test_fixture.h" + +AudioTestFixture::AudioTestFixture() { + m_engine.init(); +} + +AudioTestFixture::~AudioTestFixture() { + m_engine.shutdown(); +} + +void AudioTestFixture::load_music(const TrackerScore* score, + const NoteParams* samples, + const AssetId* assets, + uint32_t count) { + m_engine.load_music_data(score, samples, assets, count); +} diff --git a/src/tests/common/audio_test_fixture.h b/src/tests/common/audio_test_fixture.h new file mode 100644 index 0000000..328e167 --- /dev/null +++ b/src/tests/common/audio_test_fixture.h @@ -0,0 +1,26 @@ +// audio_test_fixture.h - RAII wrapper for AudioEngine lifecycle +// Simplifies audio test setup and teardown + +#pragma once +#include "audio/audio_engine.h" +#include "audio/gen.h" +#include "audio/tracker.h" +#include "generated/assets.h" + +// RAII wrapper for AudioEngine lifecycle +class AudioTestFixture { +public: + AudioTestFixture(); // Calls engine.init() + ~AudioTestFixture(); // Calls engine.shutdown() + + AudioEngine& engine() { return m_engine; } + + // Helper: Load tracker music data + void load_music(const TrackerScore* score, + const NoteParams* samples, + const AssetId* assets, + uint32_t count); + +private: + AudioEngine m_engine; +}; diff --git a/src/tests/common/effect_test_fixture.cc b/src/tests/common/effect_test_fixture.cc new file mode 100644 index 0000000..b403ef6 --- /dev/null +++ b/src/tests/common/effect_test_fixture.cc @@ -0,0 +1,23 @@ +// effect_test_fixture.cc - Combined WebGPU + AudioEngine + MainSequence fixture +// Simplifies GPU effect test setup + +#include "effect_test_fixture.h" +#include <stdio.h> + +EffectTestFixture::EffectTestFixture() {} + +EffectTestFixture::~EffectTestFixture() { + if (m_initialized) { + m_gpu.shutdown(); + } +} + +bool EffectTestFixture::init() { + if (!m_gpu.init()) { + fprintf(stdout, " ⚠ WebGPU unavailable - skipping test\n"); + return false; + } + m_sequence.init_test(ctx()); + m_initialized = true; + return true; +} diff --git a/src/tests/common/effect_test_fixture.h b/src/tests/common/effect_test_fixture.h new file mode 100644 index 0000000..399b5ed --- /dev/null +++ b/src/tests/common/effect_test_fixture.h @@ -0,0 +1,28 @@ +// effect_test_fixture.h - Combined WebGPU + AudioEngine + MainSequence fixture +// Simplifies GPU effect test setup + +#pragma once +#include "webgpu_test_fixture.h" +#include "audio_test_fixture.h" +#include "gpu/sequence.h" + +// Combined WebGPU + AudioEngine + MainSequence fixture +class EffectTestFixture { +public: + EffectTestFixture(); + ~EffectTestFixture(); + + // Returns false if GPU unavailable (test should skip) + bool init(); + + // Accessors + GpuContext ctx() const { return m_gpu.ctx(); } + MainSequence& sequence() { return m_sequence; } + AudioEngine& audio() { return m_audio.engine(); } + +private: + WebGPUTestFixture m_gpu; + AudioTestFixture m_audio; + MainSequence m_sequence; + bool m_initialized = false; +}; diff --git a/src/tests/common/test_math_helpers.h b/src/tests/common/test_math_helpers.h new file mode 100644 index 0000000..99e7f9d --- /dev/null +++ b/src/tests/common/test_math_helpers.h @@ -0,0 +1,18 @@ +// test_math_helpers.h - Math utilities for test code +// Common floating-point comparison helpers + +#pragma once +#include <cmath> +#include "util/mini_math.h" + +// Floating-point comparison with epsilon tolerance +inline bool test_near(float a, float b, float epsilon = 1e-6f) { + return fabs(a - b) < epsilon; +} + +// Vector comparison +inline bool test_near_vec3(vec3 a, vec3 b, float epsilon = 1e-6f) { + return test_near(a.x, b.x, epsilon) && + test_near(a.y, b.y, epsilon) && + test_near(a.z, b.z, epsilon); +} |
