summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpu/headless_gpu.cc93
-rw-r--r--src/main.cc41
-rw-r--r--src/platform/headless_platform.cc60
-rw-r--r--src/tests/3d/test_3d.cc (renamed from src/tests/test_3d.cc)0
-rw-r--r--src/tests/3d/test_3d_physics.cc (renamed from src/tests/test_3d_physics.cc)0
-rw-r--r--src/tests/3d/test_3d_render.cc (renamed from src/tests/test_3d_render.cc)0
-rw-r--r--src/tests/3d/test_mesh.cc (renamed from src/tests/test_mesh.cc)0
-rw-r--r--src/tests/3d/test_physics.cc (renamed from src/tests/test_physics.cc)0
-rw-r--r--src/tests/3d/test_scene_loader.cc (renamed from src/tests/test_scene_loader.cc)0
-rw-r--r--src/tests/assets/test_assets.cc (renamed from src/tests/test_assets.cc)0
-rw-r--r--src/tests/assets/test_sequence.cc (renamed from src/tests/test_sequence.cc)0
-rw-r--r--src/tests/audio/test_audio_backend.cc (renamed from src/tests/test_audio_backend.cc)0
-rw-r--r--src/tests/audio/test_audio_engine.cc (renamed from src/tests/test_audio_engine.cc)0
-rw-r--r--src/tests/audio/test_audio_gen.cc (renamed from src/tests/test_audio_gen.cc)0
-rw-r--r--src/tests/audio/test_dct.cc (renamed from src/tests/test_dct.cc)0
-rw-r--r--src/tests/audio/test_fft.cc (renamed from src/tests/test_fft.cc)0
-rw-r--r--src/tests/audio/test_jittered_audio.cc (renamed from src/tests/test_jittered_audio.cc)0
-rw-r--r--src/tests/audio/test_mock_backend.cc (renamed from src/tests/test_mock_backend.cc)0
-rw-r--r--src/tests/audio/test_silent_backend.cc (renamed from src/tests/test_silent_backend.cc)0
-rw-r--r--src/tests/audio/test_spectral_brush.cc (renamed from src/tests/test_spectral_brush.cc)0
-rw-r--r--src/tests/audio/test_synth.cc (renamed from src/tests/test_synth.cc)0
-rw-r--r--src/tests/audio/test_tracker.cc (renamed from src/tests/test_tracker.cc)0
-rw-r--r--src/tests/audio/test_tracker_timing.cc (renamed from src/tests/test_tracker_timing.cc)0
-rw-r--r--src/tests/audio/test_variable_tempo.cc (renamed from src/tests/test_variable_tempo.cc)0
-rw-r--r--src/tests/audio/test_wav_dump.cc (renamed from src/tests/test_wav_dump.cc)0
-rw-r--r--src/tests/audio/test_window.cc (renamed from src/tests/test_window.cc)0
-rw-r--r--src/tests/common/effect_test_helpers.cc (renamed from src/tests/effect_test_helpers.cc)0
-rw-r--r--src/tests/common/effect_test_helpers.h (renamed from src/tests/effect_test_helpers.h)0
-rw-r--r--src/tests/common/offscreen_render_target.cc (renamed from src/tests/offscreen_render_target.cc)0
-rw-r--r--src/tests/common/offscreen_render_target.h (renamed from src/tests/offscreen_render_target.h)0
-rw-r--r--src/tests/common/webgpu_test_fixture.cc (renamed from src/tests/webgpu_test_fixture.cc)0
-rw-r--r--src/tests/common/webgpu_test_fixture.h (renamed from src/tests/webgpu_test_fixture.h)0
-rw-r--r--src/tests/gpu/test_demo_effects.cc (renamed from src/tests/test_demo_effects.cc)4
-rw-r--r--src/tests/gpu/test_effect_base.cc (renamed from src/tests/test_effect_base.cc)6
-rw-r--r--src/tests/gpu/test_gpu_composite.cc (renamed from src/tests/test_gpu_composite.cc)0
-rw-r--r--src/tests/gpu/test_gpu_procedural.cc (renamed from src/tests/test_gpu_procedural.cc)0
-rw-r--r--src/tests/gpu/test_noise_functions.cc (renamed from src/tests/test_noise_functions.cc)0
-rw-r--r--src/tests/gpu/test_post_process_helper.cc (renamed from src/tests/test_post_process_helper.cc)4
-rw-r--r--src/tests/gpu/test_shader_assets.cc (renamed from src/tests/test_shader_assets.cc)0
-rw-r--r--src/tests/gpu/test_shader_compilation.cc (renamed from src/tests/test_shader_compilation.cc)0
-rw-r--r--src/tests/gpu/test_shader_composer.cc (renamed from src/tests/test_shader_composer.cc)0
-rw-r--r--src/tests/gpu/test_spectool.cc (renamed from src/tests/test_spectool.cc)0
-rw-r--r--src/tests/gpu/test_texture_manager.cc (renamed from src/tests/test_texture_manager.cc)2
-rw-r--r--src/tests/gpu/test_uniform_helper.cc (renamed from src/tests/test_uniform_helper.cc)0
-rw-r--r--src/tests/util/test_file_watcher.cc (renamed from src/tests/test_file_watcher.cc)0
-rw-r--r--src/tests/util/test_maths.cc (renamed from src/tests/test_maths.cc)0
-rw-r--r--src/tests/util/test_procedural.cc (renamed from src/tests/test_procedural.cc)0
47 files changed, 201 insertions, 9 deletions
diff --git a/src/gpu/headless_gpu.cc b/src/gpu/headless_gpu.cc
new file mode 100644
index 0000000..1a649d3
--- /dev/null
+++ b/src/gpu/headless_gpu.cc
@@ -0,0 +1,93 @@
+// Headless GPU implementation - functional stubs for testing
+// Workspace: demo (shared across all workspaces)
+
+#if defined(DEMO_HEADLESS)
+
+#include "gpu.h"
+#include "platform/stub_types.h"
+#include <stdio.h>
+
+static bool g_initialized = false;
+
+GpuBuffer gpu_create_buffer(WGPUDevice device, size_t size, uint32_t usage,
+ const void* data) {
+ (void)device;
+ (void)size;
+ (void)usage;
+ (void)data;
+ return {nullptr, 0};
+}
+
+RenderPass gpu_create_render_pass(WGPUDevice device, WGPUTextureFormat format,
+ const char* shader_code,
+ ResourceBinding* bindings, int num_bindings) {
+ (void)device;
+ (void)format;
+ (void)shader_code;
+ (void)bindings;
+ (void)num_bindings;
+ return {nullptr, nullptr, 0, 0};
+}
+
+ComputePass gpu_create_compute_pass(WGPUDevice device, const char* shader_code,
+ ResourceBinding* bindings,
+ int num_bindings) {
+ (void)device;
+ (void)shader_code;
+ (void)bindings;
+ (void)num_bindings;
+ return {nullptr, nullptr, 0, 0, 0};
+}
+
+void gpu_init(PlatformState* platform_state) {
+ (void)platform_state;
+ if (!g_initialized) {
+ printf("[headless] GPU initialized\n");
+ g_initialized = true;
+ }
+}
+
+void gpu_draw(float audio_peak, float aspect_ratio, float time, float beat) {
+ (void)audio_peak;
+ (void)aspect_ratio;
+ (void)time;
+ (void)beat;
+}
+
+void gpu_resize(int width, int height) {
+ (void)width;
+ (void)height;
+}
+
+void gpu_shutdown() {
+ if (g_initialized) {
+ printf("[headless] GPU shutdown\n");
+ g_initialized = false;
+ }
+}
+
+const GpuContext* gpu_get_context() {
+ static GpuContext ctx = {nullptr, nullptr, WGPUTextureFormat_BGRA8Unorm};
+ return &ctx;
+}
+
+MainSequence* gpu_get_main_sequence() {
+ return nullptr;
+}
+
+#if !defined(STRIP_ALL)
+void gpu_simulate_until(float time, float bpm) {
+ (void)time;
+ (void)bpm;
+}
+
+void gpu_add_custom_effect(Effect* effect, float start_time, float end_time,
+ int priority) {
+ (void)effect;
+ (void)start_time;
+ (void)end_time;
+ (void)priority;
+}
+#endif
+
+#endif // DEMO_HEADLESS
diff --git a/src/main.cc b/src/main.cc
index b4091e7..6132841 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -32,6 +32,8 @@ int main(int argc, char** argv) {
int height = 720;
bool dump_wav = false;
bool tempo_test_enabled = false;
+ bool headless_mode = false;
+ float headless_duration = 30.0f;
const char* wav_output_file = "audio_dump.wav";
bool hot_reload_enabled = false;
@@ -59,6 +61,13 @@ int main(int argc, char** argv) {
}
} else if (strcmp(argv[i], "--tempo") == 0) {
tempo_test_enabled = true;
+#if defined(DEMO_HEADLESS)
+ } else if (strcmp(argv[i], "--headless") == 0) {
+ headless_mode = true;
+ } else if (strcmp(argv[i], "--duration") == 0 && i + 1 < argc) {
+ headless_duration = atof(argv[i + 1]);
+ ++i;
+#endif
} else if (strcmp(argv[i], "--hot-reload") == 0) {
hot_reload_enabled = true;
printf("Hot-reload enabled (watching config files)\n");
@@ -74,7 +83,9 @@ int main(int argc, char** argv) {
gpu_init(&platform_state);
// Load timeline data (visual effects layering)
+#if !defined(DEMO_HEADLESS)
LoadTimeline(*gpu_get_main_sequence(), *gpu_get_context());
+#endif
#if !defined(STRIP_ALL)
// Set WAV dump backend if requested
@@ -181,7 +192,35 @@ int main(int argc, char** argv) {
}
#endif
-#if !defined(STRIP_ALL)
+#if !defined(STRIP_ALL) && defined(DEMO_HEADLESS)
+ // In headless mode, run simulation without rendering
+ if (headless_mode) {
+ printf("Running headless simulation (%.1fs)...\n", headless_duration);
+
+ const float update_dt = 1.0f / 60.0f;
+ double physical_time = 0.0;
+ while (physical_time < headless_duration) {
+ fill_audio_buffer(update_dt, physical_time);
+ gpu_simulate_until(g_music_time);
+ physical_time += update_dt;
+
+ if ((int)physical_time % 5 == 0 &&
+ physical_time - update_dt < (int)physical_time) {
+ printf(" Progress: %.1fs / %.1fs (music: %.1fs)\r",
+ physical_time, headless_duration, g_music_time);
+ fflush(stdout);
+ }
+ }
+
+ printf("\nHeadless simulation complete: %.2fs\n", physical_time);
+
+ g_audio_engine.shutdown();
+ audio_shutdown();
+ gpu_shutdown();
+ platform_shutdown(&platform_state);
+ return 0;
+ }
+
// In WAV dump mode, run headless simulation and write audio to file
if (dump_wav) {
printf("Running WAV dump simulation...\n");
diff --git a/src/platform/headless_platform.cc b/src/platform/headless_platform.cc
new file mode 100644
index 0000000..4ec8c5d
--- /dev/null
+++ b/src/platform/headless_platform.cc
@@ -0,0 +1,60 @@
+// Headless platform - time simulation without window
+// Workspace: demo (shared across all workspaces)
+
+#if defined(DEMO_HEADLESS)
+
+#include "platform.h"
+#include "stub_types.h"
+#include <stdio.h>
+
+static double g_virtual_time = 0.0;
+static bool g_should_close = false;
+static const double FRAME_TIME = 1.0 / 60.0;
+
+PlatformState platform_init(bool fullscreen, int width, int height) {
+ (void)fullscreen;
+ g_virtual_time = 0.0;
+ g_should_close = false;
+ printf("[headless] Platform initialized (simulated %dx%d)\n", width, height);
+
+ PlatformState state = {};
+ state.width = width;
+ state.height = height;
+ state.aspect_ratio = (float)width / (float)height;
+ state.window = nullptr;
+ state.time = 0.0;
+ state.is_fullscreen = false;
+ return state;
+}
+
+void platform_shutdown(PlatformState* state) {
+ (void)state;
+ printf("[headless] Platform shutdown\n");
+}
+
+void platform_poll(PlatformState* state) {
+ (void)state;
+ g_virtual_time += FRAME_TIME;
+}
+
+bool platform_should_close(PlatformState* state) {
+ (void)state;
+ return g_should_close;
+}
+
+void platform_toggle_fullscreen(PlatformState* state) {
+ (void)state;
+}
+
+WGPUSurface platform_create_wgpu_surface(WGPUInstance instance,
+ PlatformState* state) {
+ (void)instance;
+ (void)state;
+ return nullptr;
+}
+
+double platform_get_time() {
+ return g_virtual_time;
+}
+
+#endif // DEMO_HEADLESS
diff --git a/src/tests/test_3d.cc b/src/tests/3d/test_3d.cc
index e0fb2e0..e0fb2e0 100644
--- a/src/tests/test_3d.cc
+++ b/src/tests/3d/test_3d.cc
diff --git a/src/tests/test_3d_physics.cc b/src/tests/3d/test_3d_physics.cc
index eb1f5ef..eb1f5ef 100644
--- a/src/tests/test_3d_physics.cc
+++ b/src/tests/3d/test_3d_physics.cc
diff --git a/src/tests/test_3d_render.cc b/src/tests/3d/test_3d_render.cc
index eee46ba..eee46ba 100644
--- a/src/tests/test_3d_render.cc
+++ b/src/tests/3d/test_3d_render.cc
diff --git a/src/tests/test_mesh.cc b/src/tests/3d/test_mesh.cc
index 2129bc8..2129bc8 100644
--- a/src/tests/test_mesh.cc
+++ b/src/tests/3d/test_mesh.cc
diff --git a/src/tests/test_physics.cc b/src/tests/3d/test_physics.cc
index df21e70..df21e70 100644
--- a/src/tests/test_physics.cc
+++ b/src/tests/3d/test_physics.cc
diff --git a/src/tests/test_scene_loader.cc b/src/tests/3d/test_scene_loader.cc
index 21bcbaa..21bcbaa 100644
--- a/src/tests/test_scene_loader.cc
+++ b/src/tests/3d/test_scene_loader.cc
diff --git a/src/tests/test_assets.cc b/src/tests/assets/test_assets.cc
index 2ee18d6..2ee18d6 100644
--- a/src/tests/test_assets.cc
+++ b/src/tests/assets/test_assets.cc
diff --git a/src/tests/test_sequence.cc b/src/tests/assets/test_sequence.cc
index d79ec1d..d79ec1d 100644
--- a/src/tests/test_sequence.cc
+++ b/src/tests/assets/test_sequence.cc
diff --git a/src/tests/test_audio_backend.cc b/src/tests/audio/test_audio_backend.cc
index 6a748aa..6a748aa 100644
--- a/src/tests/test_audio_backend.cc
+++ b/src/tests/audio/test_audio_backend.cc
diff --git a/src/tests/test_audio_engine.cc b/src/tests/audio/test_audio_engine.cc
index 3b29dcd..3b29dcd 100644
--- a/src/tests/test_audio_engine.cc
+++ b/src/tests/audio/test_audio_engine.cc
diff --git a/src/tests/test_audio_gen.cc b/src/tests/audio/test_audio_gen.cc
index ebdcb25..ebdcb25 100644
--- a/src/tests/test_audio_gen.cc
+++ b/src/tests/audio/test_audio_gen.cc
diff --git a/src/tests/test_dct.cc b/src/tests/audio/test_dct.cc
index 89b7964..89b7964 100644
--- a/src/tests/test_dct.cc
+++ b/src/tests/audio/test_dct.cc
diff --git a/src/tests/test_fft.cc b/src/tests/audio/test_fft.cc
index 2151608..2151608 100644
--- a/src/tests/test_fft.cc
+++ b/src/tests/audio/test_fft.cc
diff --git a/src/tests/test_jittered_audio.cc b/src/tests/audio/test_jittered_audio.cc
index d8260ec..d8260ec 100644
--- a/src/tests/test_jittered_audio.cc
+++ b/src/tests/audio/test_jittered_audio.cc
diff --git a/src/tests/test_mock_backend.cc b/src/tests/audio/test_mock_backend.cc
index defd73d..defd73d 100644
--- a/src/tests/test_mock_backend.cc
+++ b/src/tests/audio/test_mock_backend.cc
diff --git a/src/tests/test_silent_backend.cc b/src/tests/audio/test_silent_backend.cc
index 8daacf7..8daacf7 100644
--- a/src/tests/test_silent_backend.cc
+++ b/src/tests/audio/test_silent_backend.cc
diff --git a/src/tests/test_spectral_brush.cc b/src/tests/audio/test_spectral_brush.cc
index ae1862a..ae1862a 100644
--- a/src/tests/test_spectral_brush.cc
+++ b/src/tests/audio/test_spectral_brush.cc
diff --git a/src/tests/test_synth.cc b/src/tests/audio/test_synth.cc
index 12cbc54..12cbc54 100644
--- a/src/tests/test_synth.cc
+++ b/src/tests/audio/test_synth.cc
diff --git a/src/tests/test_tracker.cc b/src/tests/audio/test_tracker.cc
index 6be2a8d..6be2a8d 100644
--- a/src/tests/test_tracker.cc
+++ b/src/tests/audio/test_tracker.cc
diff --git a/src/tests/test_tracker_timing.cc b/src/tests/audio/test_tracker_timing.cc
index 9f15197..9f15197 100644
--- a/src/tests/test_tracker_timing.cc
+++ b/src/tests/audio/test_tracker_timing.cc
diff --git a/src/tests/test_variable_tempo.cc b/src/tests/audio/test_variable_tempo.cc
index bbc9ebf..bbc9ebf 100644
--- a/src/tests/test_variable_tempo.cc
+++ b/src/tests/audio/test_variable_tempo.cc
diff --git a/src/tests/test_wav_dump.cc b/src/tests/audio/test_wav_dump.cc
index eb14652..eb14652 100644
--- a/src/tests/test_wav_dump.cc
+++ b/src/tests/audio/test_wav_dump.cc
diff --git a/src/tests/test_window.cc b/src/tests/audio/test_window.cc
index bac4a4b..bac4a4b 100644
--- a/src/tests/test_window.cc
+++ b/src/tests/audio/test_window.cc
diff --git a/src/tests/effect_test_helpers.cc b/src/tests/common/effect_test_helpers.cc
index 9250366..9250366 100644
--- a/src/tests/effect_test_helpers.cc
+++ b/src/tests/common/effect_test_helpers.cc
diff --git a/src/tests/effect_test_helpers.h b/src/tests/common/effect_test_helpers.h
index 33355ee..33355ee 100644
--- a/src/tests/effect_test_helpers.h
+++ b/src/tests/common/effect_test_helpers.h
diff --git a/src/tests/offscreen_render_target.cc b/src/tests/common/offscreen_render_target.cc
index 9f65e9a..9f65e9a 100644
--- a/src/tests/offscreen_render_target.cc
+++ b/src/tests/common/offscreen_render_target.cc
diff --git a/src/tests/offscreen_render_target.h b/src/tests/common/offscreen_render_target.h
index 10c12aa..10c12aa 100644
--- a/src/tests/offscreen_render_target.h
+++ b/src/tests/common/offscreen_render_target.h
diff --git a/src/tests/webgpu_test_fixture.cc b/src/tests/common/webgpu_test_fixture.cc
index afb7ce3..afb7ce3 100644
--- a/src/tests/webgpu_test_fixture.cc
+++ b/src/tests/common/webgpu_test_fixture.cc
diff --git a/src/tests/webgpu_test_fixture.h b/src/tests/common/webgpu_test_fixture.h
index e10a2ed..e10a2ed 100644
--- a/src/tests/webgpu_test_fixture.h
+++ b/src/tests/common/webgpu_test_fixture.h
diff --git a/src/tests/test_demo_effects.cc b/src/tests/gpu/test_demo_effects.cc
index 0d2b09a..8a7d8af 100644
--- a/src/tests/test_demo_effects.cc
+++ b/src/tests/gpu/test_demo_effects.cc
@@ -10,10 +10,10 @@
// 3. If the effect requires Renderer3D, add it to requires_3d check in
// test_scene_effects()
-#include "effect_test_helpers.h"
+#include "../common/effect_test_helpers.h"
#include "gpu/demo_effects.h"
#include "gpu/effect.h"
-#include "webgpu_test_fixture.h"
+#include "../common/webgpu_test_fixture.h"
#include <cassert>
#include <cstdio>
#include <cstring>
diff --git a/src/tests/test_effect_base.cc b/src/tests/gpu/test_effect_base.cc
index 612e9da..08cf0a1 100644
--- a/src/tests/test_effect_base.cc
+++ b/src/tests/gpu/test_effect_base.cc
@@ -2,11 +2,11 @@
// It tests the Effect/Sequence/MainSequence lifecycle using headless rendering.
// Verifies effect initialization, activation, and basic rendering.
-#include "effect_test_helpers.h"
+#include "../common/effect_test_helpers.h"
#include "gpu/demo_effects.h"
#include "gpu/effect.h"
-#include "offscreen_render_target.h"
-#include "webgpu_test_fixture.h"
+#include "../common/offscreen_render_target.h"
+#include "../common/webgpu_test_fixture.h"
#include <cassert>
#include <cstdio>
#include <memory>
diff --git a/src/tests/test_gpu_composite.cc b/src/tests/gpu/test_gpu_composite.cc
index e5ac788..e5ac788 100644
--- a/src/tests/test_gpu_composite.cc
+++ b/src/tests/gpu/test_gpu_composite.cc
diff --git a/src/tests/test_gpu_procedural.cc b/src/tests/gpu/test_gpu_procedural.cc
index f1bade0..f1bade0 100644
--- a/src/tests/test_gpu_procedural.cc
+++ b/src/tests/gpu/test_gpu_procedural.cc
diff --git a/src/tests/test_noise_functions.cc b/src/tests/gpu/test_noise_functions.cc
index f8dfc93..f8dfc93 100644
--- a/src/tests/test_noise_functions.cc
+++ b/src/tests/gpu/test_noise_functions.cc
diff --git a/src/tests/test_post_process_helper.cc b/src/tests/gpu/test_post_process_helper.cc
index 36d193e..868bf26 100644
--- a/src/tests/test_post_process_helper.cc
+++ b/src/tests/gpu/test_post_process_helper.cc
@@ -4,8 +4,8 @@
#include "gpu/demo_effects.h"
#include "gpu/gpu.h"
-#include "offscreen_render_target.h"
-#include "webgpu_test_fixture.h"
+#include "../common/offscreen_render_target.h"
+#include "../common/webgpu_test_fixture.h"
#include <cassert>
#include <cstdio>
diff --git a/src/tests/test_shader_assets.cc b/src/tests/gpu/test_shader_assets.cc
index f1562ea..f1562ea 100644
--- a/src/tests/test_shader_assets.cc
+++ b/src/tests/gpu/test_shader_assets.cc
diff --git a/src/tests/test_shader_compilation.cc b/src/tests/gpu/test_shader_compilation.cc
index a322e8a..a322e8a 100644
--- a/src/tests/test_shader_compilation.cc
+++ b/src/tests/gpu/test_shader_compilation.cc
diff --git a/src/tests/test_shader_composer.cc b/src/tests/gpu/test_shader_composer.cc
index a98a259..a98a259 100644
--- a/src/tests/test_shader_composer.cc
+++ b/src/tests/gpu/test_shader_composer.cc
diff --git a/src/tests/test_spectool.cc b/src/tests/gpu/test_spectool.cc
index 984322a..984322a 100644
--- a/src/tests/test_spectool.cc
+++ b/src/tests/gpu/test_spectool.cc
diff --git a/src/tests/test_texture_manager.cc b/src/tests/gpu/test_texture_manager.cc
index c25c07c..54a1a8a 100644
--- a/src/tests/test_texture_manager.cc
+++ b/src/tests/gpu/test_texture_manager.cc
@@ -4,7 +4,7 @@
#include "gpu/texture_manager.h"
#include "procedural/generator.h"
-#include "webgpu_test_fixture.h"
+#include "../common/webgpu_test_fixture.h"
#include <cassert>
#include <cstdio>
#include <cstring>
diff --git a/src/tests/test_uniform_helper.cc b/src/tests/gpu/test_uniform_helper.cc
index cc1bf59..cc1bf59 100644
--- a/src/tests/test_uniform_helper.cc
+++ b/src/tests/gpu/test_uniform_helper.cc
diff --git a/src/tests/test_file_watcher.cc b/src/tests/util/test_file_watcher.cc
index ac13afd..ac13afd 100644
--- a/src/tests/test_file_watcher.cc
+++ b/src/tests/util/test_file_watcher.cc
diff --git a/src/tests/test_maths.cc b/src/tests/util/test_maths.cc
index 0fed85c..0fed85c 100644
--- a/src/tests/test_maths.cc
+++ b/src/tests/util/test_maths.cc
diff --git a/src/tests/test_procedural.cc b/src/tests/util/test_procedural.cc
index e9f9a02..e9f9a02 100644
--- a/src/tests/test_procedural.cc
+++ b/src/tests/util/test_procedural.cc