diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 10:59:08 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 10:59:08 +0100 |
| commit | 124899f27b6c1ec02bfa16a57a4e43ea2b7ebac0 (patch) | |
| tree | f96af35a888baee7be5b1a01849325653c5f7af1 /src/tests/test_shader_composer.cc | |
| parent | 4660ce3eec7c91a20d6d93fa3e142c1fd157e869 (diff) | |
test(shader): Add ShaderComposer and WGSL asset validation tests (Task #26)
Implemented comprehensive unit tests for ShaderComposer and a validation test for production WGSL shader assets. This ensures the shader asset pipeline is robust and that all shaders contain required entry points and snippets. Also improved InitShaderComposer to be more robust during testing.
Diffstat (limited to 'src/tests/test_shader_composer.cc')
| -rw-r--r-- | src/tests/test_shader_composer.cc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/tests/test_shader_composer.cc b/src/tests/test_shader_composer.cc index cdb5c88..7efcd83 100644 --- a/src/tests/test_shader_composer.cc +++ b/src/tests/test_shader_composer.cc @@ -6,6 +6,16 @@ #include <iostream> #include <string> +#if defined(USE_TEST_ASSETS) +#include "test_assets.h" +#else +#include "generated/assets.h" +#endif + +// Forward declaration for asset loading +const uint8_t* GetAsset(AssetId asset_id, size_t* out_size); + + void test_composition() { std::cout << "Testing Shader Composition..." << std::endl; auto& sc = ShaderComposer::Get(); @@ -31,8 +41,41 @@ void test_composition() { std::cout << "Composition logic verified." << std::endl; } +void test_asset_composition() { + std::cout << "Testing Asset-Based Shader Composition..." << std::endl; + + // Use test assets + auto& sc = ShaderComposer::Get(); + + size_t snippet_a_size; + const char* snippet_a_code = (const char*)GetAsset(AssetId::ASSET_SHADER_SNIPPET_A, &snippet_a_size); + assert(snippet_a_code != nullptr); + sc.RegisterSnippet("SNIPPET_A", std::string(snippet_a_code, snippet_a_size)); + + size_t snippet_b_size; + const char* snippet_b_code = (const char*)GetAsset(AssetId::ASSET_SHADER_SNIPPET_B, &snippet_b_size); + sc.RegisterSnippet("SNIPPET_B", std::string(snippet_b_code, snippet_b_size)); + + std::string main_code = "fn main() -> f32 { return snippet_a() + snippet_b(); }"; + std::string result = sc.Compose({"SNIPPET_A", "SNIPPET_B"}, main_code); + + assert(result.find("fn snippet_a()") != std::string::npos); + assert(result.find("fn snippet_b()") != std::string::npos); + assert(result.find("fn main()") != std::string::npos); + + size_t pos_a = result.find("snippet_a"); + size_t pos_b = result.find("snippet_b"); + size_t pos_main = result.find("main"); + + assert(pos_a < pos_b); + assert(pos_b < pos_main); + + std::cout << "Asset-based composition logic verified." << std::endl; +} + int main() { test_composition(); + test_asset_composition(); std::cout << "--- ALL SHADER COMPOSER TESTS PASSED ---" << std::endl; return 0; } |
