summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/test_shader_composer.cc55
1 files changed, 51 insertions, 4 deletions
diff --git a/src/tests/test_shader_composer.cc b/src/tests/test_shader_composer.cc
index 16dabba..1dd8298 100644
--- a/src/tests/test_shader_composer.cc
+++ b/src/tests/test_shader_composer.cc
@@ -26,12 +26,12 @@ void test_composition() {
std::string result = sc.Compose({"math", "util"}, main_code);
// Verify order and presence
- assert(result.find("Snippet: math") != std::string::npos);
- assert(result.find("Snippet: util") != std::string::npos);
+ assert(result.find("Dependency: math") != std::string::npos);
+ assert(result.find("Dependency: util") != std::string::npos);
assert(result.find("Main Code") != std::string::npos);
- size_t pos_math = result.find("Snippet: math");
- size_t pos_util = result.find("Snippet: util");
+ size_t pos_math = result.find("Dependency: math");
+ size_t pos_util = result.find("Dependency: util");
size_t pos_main = result.find("Main Code");
assert(pos_math < pos_util);
@@ -75,9 +75,56 @@ void test_asset_composition() {
std::cout << "Asset-based composition logic verified." << std::endl;
}
+void test_recursive_composition() {
+ std::cout << "Testing Recursive Shader Composition..." << std::endl;
+ auto& sc = ShaderComposer::Get();
+
+ sc.RegisterSnippet("base", "fn base() {}");
+ sc.RegisterSnippet("mid", "#include \"base\"\nfn mid() { base(); }");
+ sc.RegisterSnippet("top", "#include \"mid\"\n#include \"base\"\nfn top() { mid(); base(); }");
+
+ std::string main_code = "#include \"top\"\nfn main() { top(); }";
+ std::string result = sc.Compose({}, main_code);
+
+ // Verify each is included exactly once despite multiple includes
+ size_t count_base = 0;
+ size_t pos = result.find("fn base()");
+ while (pos != std::string::npos) {
+ count_base++;
+ pos = result.find("fn base()", pos + 1);
+ }
+ assert(count_base == 1);
+
+ assert(result.find("Included: top") != std::string::npos);
+ assert(result.find("Included: mid") != std::string::npos);
+ assert(result.find("Included: base") != std::string::npos);
+
+ std::cout << "Recursive composition logic verified." << std::endl;
+}
+
+void test_renderer_composition() {
+ std::cout << "Testing Renderer Shader Composition..." << std::endl;
+ auto& sc = ShaderComposer::Get();
+
+ sc.RegisterSnippet("common_uniforms", "struct GlobalUniforms { view_proj: mat4x4<f32> };");
+ sc.RegisterSnippet("math/sdf_shapes", "fn sdSphere() {}");
+ sc.RegisterSnippet("render/scene_query", "#include \"math/sdf_shapes\"\nfn map_scene() {}");
+
+ std::string main_code = "#include \"common_uniforms\"\n#include \"render/scene_query\"\nfn main() {}";
+ std::string result = sc.Compose({}, main_code);
+
+ assert(result.find("struct GlobalUniforms") != std::string::npos);
+ assert(result.find("fn sdSphere") != std::string::npos);
+ assert(result.find("fn map_scene") != std::string::npos);
+
+ std::cout << "Renderer composition logic verified." << std::endl;
+}
+
int main() {
test_composition();
test_asset_composition();
+ test_recursive_composition();
+ test_renderer_composition();
std::cout << "--- ALL SHADER COMPOSER TESTS PASSED ---" << std::endl;
return 0;
}