summaryrefslogtreecommitdiff
path: root/src/tests/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/common')
-rw-r--r--src/tests/common/audio_test_fixture.cc19
-rw-r--r--src/tests/common/audio_test_fixture.h26
-rw-r--r--src/tests/common/effect_test_fixture.cc23
-rw-r--r--src/tests/common/effect_test_fixture.h28
-rw-r--r--src/tests/common/test_math_helpers.h18
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);
+}