summaryrefslogtreecommitdiff
path: root/src/tests/audio/test_tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/audio/test_tracker.cc')
-rw-r--r--src/tests/audio/test_tracker.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/tests/audio/test_tracker.cc b/src/tests/audio/test_tracker.cc
new file mode 100644
index 0000000..6be2a8d
--- /dev/null
+++ b/src/tests/audio/test_tracker.cc
@@ -0,0 +1,73 @@
+// This file is part of the 64k demo project.
+// It tests the core functionality of the audio tracker engine.
+
+#include "audio/audio_engine.h"
+#include "audio/gen.h"
+#include "audio/synth.h"
+#include "audio/tracker.h"
+// #include "generated/music_data.h" // Will be generated by tracker_compiler
+#include <assert.h>
+#include <stdio.h>
+
+// Forward declaration for generated data
+extern const NoteParams g_tracker_samples[];
+extern const uint32_t g_tracker_samples_count;
+extern const TrackerPattern g_tracker_patterns[];
+extern const uint32_t g_tracker_patterns_count;
+extern const TrackerScore g_tracker_score;
+
+void test_tracker_init() {
+ AudioEngine engine;
+ engine.init();
+ printf("Tracker init test PASSED\n");
+ engine.shutdown();
+}
+
+void test_tracker_pattern_triggering() {
+ AudioEngine engine;
+ engine.init();
+
+ // At time 0.0f, 3 patterns are triggered:
+ // - crash (1 event at beat 0.0)
+ // - kick_basic (events at beat 0.0, 2.0, 2.5)
+ // - hihat_basic (events at beat 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5)
+ // With event-based triggering, only events at beat 0.0 trigger immediately.
+
+ // Test 1: At music_time = 0.0f, events at beat 0.0 trigger
+ // drums_basic:
+ // 0.00, ASSET_KICK_1
+ // 0.00, NOTE_A4
+ engine.update(0.0f, 0.0f);
+ // Expect 2 voices: kick + note
+ assert(engine.get_active_voice_count() == 2);
+
+ // Test 2: At music_time = 0.25f (beat 0.5 @ 120 BPM), snare event triggers
+ // 0.25, ASSET_SNARE_1
+ engine.update(0.25f, 0.0f);
+ // Expect at least 2 voices (snare + maybe others)
+ // Exact count depends on sample duration (kick/note might have finished)
+ int voices = engine.get_active_voice_count();
+ assert(voices >= 2);
+
+ // Test 3: At music_time = 0.5f (beat 1.0), kick event triggers
+ // 0.50, ASSET_KICK_1
+ engine.update(0.5f, 0.0f);
+ // Expect at least 3 voices (new kick + others)
+ assert(engine.get_active_voice_count() >= 3);
+
+ // Test 4: Advance to 2.0f - new patterns trigger at time 2.0f
+ engine.update(2.0f, 0.0f);
+ // Many events have triggered by now
+ assert(engine.get_active_voice_count() > 5);
+
+ printf("Tracker pattern triggering test PASSED\n");
+ engine.shutdown();
+}
+
+int main() {
+ printf("Running Tracker tests...\n");
+ test_tracker_init();
+ test_tracker_pattern_triggering();
+ printf("Tracker tests PASSED\n");
+ return 0;
+}