summaryrefslogtreecommitdiff
path: root/src/tests/audio/test_tracker_timing.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-14 02:39:49 +0100
committerskal <pascal.massimino@gmail.com>2026-02-14 02:39:49 +0100
commit8dd77545b5ec2f45ce46b98dd7d94a3c4a13e290 (patch)
treea338b9c1356da64a609621155c81d8d96f7ca7fe /src/tests/audio/test_tracker_timing.cc
parentc007d7fa6ddb1936108aeca156b2a4bda425ca84 (diff)
Factor common test patterns into reusable utilitiesHEADmain
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/audio/test_tracker_timing.cc')
-rw-r--r--src/tests/audio/test_tracker_timing.cc60
1 files changed, 26 insertions, 34 deletions
diff --git a/src/tests/audio/test_tracker_timing.cc b/src/tests/audio/test_tracker_timing.cc
index 9f15197..7295de3 100644
--- a/src/tests/audio/test_tracker_timing.cc
+++ b/src/tests/audio/test_tracker_timing.cc
@@ -7,6 +7,7 @@
#include "audio/backend/mock_audio_backend.h"
#include "audio/synth.h"
#include "audio/tracker.h"
+#include "../common/audio_test_fixture.h"
#include <assert.h>
#include <cmath>
#include <stdio.h>
@@ -14,9 +15,10 @@
#if !defined(STRIP_ALL)
// Helper: Setup audio engine for testing
-static void setup_audio_test(MockAudioBackend& backend, AudioEngine& engine) {
+static AudioTestFixture*
+setup_audio_test(MockAudioBackend& backend) {
audio_set_backend(&backend);
- engine.init();
+ return new AudioTestFixture();
}
// Helper: Check if a timestamp exists in events within tolerance
@@ -66,10 +68,9 @@ void test_basic_event_recording() {
printf("Test: Basic event recording with mock backend...\n");
MockAudioBackend backend;
- AudioEngine engine;
- setup_audio_test(backend, engine);
+ AudioTestFixture* fixture = setup_audio_test(backend);
- engine.update(0.0f, 0.0f);
+ fixture->engine().update(0.0f, 0.0f);
const auto& events = backend.get_events();
printf(" Events triggered at t=0.0: %zu\n", events.size());
@@ -78,7 +79,7 @@ void test_basic_event_recording() {
assert(evt.timestamp_sec < 0.1f);
}
- engine.shutdown();
+ delete fixture;
printf(" ✓ Basic event recording works\n");
}
@@ -86,25 +87,24 @@ void test_progressive_triggering() {
printf("Test: Progressive pattern triggering...\n");
MockAudioBackend backend;
- AudioEngine engine;
- setup_audio_test(backend, engine);
+ AudioTestFixture* fixture = setup_audio_test(backend);
- engine.update(0.0f, 0.0f);
+ fixture->engine().update(0.0f, 0.0f);
const size_t events_at_0 = backend.get_events().size();
printf(" Events at t=0.0: %zu\n", events_at_0);
- engine.update(1.0f, 0.0f);
+ fixture->engine().update(1.0f, 0.0f);
const size_t events_at_1 = backend.get_events().size();
printf(" Events at t=1.0: %zu\n", events_at_1);
- engine.update(2.0f, 0.0f);
+ fixture->engine().update(2.0f, 0.0f);
const size_t events_at_2 = backend.get_events().size();
printf(" Events at t=2.0: %zu\n", events_at_2);
assert(events_at_1 >= events_at_0);
assert(events_at_2 >= events_at_1);
- engine.shutdown();
+ delete fixture;
printf(" ✓ Events accumulate over time\n");
}
@@ -112,11 +112,10 @@ void test_simultaneous_triggers() {
printf("Test: SIMULTANEOUS pattern triggers at same time...\n");
MockAudioBackend backend;
- AudioEngine engine;
- setup_audio_test(backend, engine);
+ AudioTestFixture* fixture = setup_audio_test(backend);
backend.clear_events();
- engine.update(0.0f, 0.0f);
+ fixture->engine().update(0.0f, 0.0f);
const auto& events = backend.get_events();
if (events.size() == 0) {
@@ -150,18 +149,17 @@ void test_simultaneous_triggers() {
printf(" ℹ Only one event at t=0.0, cannot verify simultaneity\n");
}
- engine.shutdown();
+ delete fixture;
}
void test_timing_monotonicity() {
printf("Test: Event timestamps are monotonically increasing...\n");
MockAudioBackend backend;
- AudioEngine engine;
- setup_audio_test(backend, engine);
+ AudioTestFixture* fixture = setup_audio_test(backend);
for (float t = 0.0f; t <= 5.0f; t += 0.5f) {
- engine.update(t, 0.5f);
+ fixture->engine().update(t, 0.5f);
}
const auto& events = backend.get_events();
@@ -172,7 +170,7 @@ void test_timing_monotonicity() {
assert(events[i].timestamp_sec >= events[i - 1].timestamp_sec);
}
- engine.shutdown();
+ delete fixture;
printf(" ✓ All timestamps monotonically increasing\n");
}
@@ -183,8 +181,7 @@ void test_seek_simulation() {
audio_set_backend(&backend);
audio_init();
- AudioEngine engine;
- engine.init();
+ AudioTestFixture fixture;
// Simulate seeking to t=3.0s by rendering silent audio
// This should trigger all patterns in range [0, 3.0]
@@ -194,10 +191,10 @@ void test_seek_simulation() {
float t = 0.0f;
const float step = 0.1f;
while (t <= seek_target) {
- engine.update(t, step);
+ fixture.engine().update(t, step);
// Simulate audio rendering
float dummy_buffer[512 * 2];
- engine.render(dummy_buffer, 512);
+ fixture.engine().render(dummy_buffer, 512);
t += step;
}
@@ -214,7 +211,6 @@ void test_seek_simulation() {
assert(evt.timestamp_sec <= seek_target + 0.5f);
}
- engine.shutdown();
audio_shutdown();
printf(" ✓ Seek simulation works correctly\n");
@@ -226,12 +222,11 @@ void test_timestamp_clustering() {
MockAudioBackend backend;
audio_set_backend(&backend);
- AudioEngine engine;
- engine.init();
+ AudioTestFixture fixture;
// Update through the first 4 seconds
for (float t = 0.0f; t <= 4.0f; t += 0.1f) {
- engine.update(t, 0.1f);
+ fixture.engine().update(t, 0.1f);
}
const auto& events = backend.get_events();
@@ -249,7 +244,6 @@ void test_timestamp_clustering() {
}
}
- engine.shutdown();
printf(" ✓ Timestamp clustering analyzed\n");
}
@@ -260,11 +254,10 @@ void test_render_integration() {
audio_set_backend(&backend);
audio_init();
- AudioEngine engine;
- engine.init();
+ AudioTestFixture fixture;
// Trigger some patterns
- engine.update(0.0f, 0.0f);
+ fixture.engine().update(0.0f, 0.0f);
const size_t events_before = backend.get_events().size();
// Render 1 second of silent audio
@@ -276,13 +269,12 @@ void test_render_integration() {
assert(backend_time >= 0.9f && backend_time <= 1.1f);
// Trigger more patterns after time advance
- engine.update(1.0f, 0.0f);
+ fixture.engine().update(1.0f, 0.0f);
const size_t events_after = backend.get_events().size();
printf(" Events before: %zu, after: %zu\n", events_before, events_after);
assert(events_after >= events_before);
- engine.shutdown();
audio_shutdown();
printf(" ✓ audio_render_silent integration works\n");