diff options
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/assets/test_assets.cc | 207 | ||||
| -rw-r--r-- | src/tests/gpu/test_shader_composer.cc | 22 |
2 files changed, 54 insertions, 175 deletions
diff --git a/src/tests/assets/test_assets.cc b/src/tests/assets/test_assets.cc index c3697d6..631ae6a 100644 --- a/src/tests/assets/test_assets.cc +++ b/src/tests/assets/test_assets.cc @@ -17,178 +17,65 @@ int main() { printf("Running AssetManager test...\n"); + // Test WGSL asset size_t size = 0; - const uint8_t* data1 = GetAsset(AssetId::ASSET_TEST_ASSET_1, &size); + const uint8_t* data = GetAsset(AssetId::ASSET_TEST_WGSL, &size); + assert(data != nullptr); + assert(size > 0); + assert(GetAssetType(AssetId::ASSET_TEST_WGSL) == AssetType::WGSL); + printf("WGSL asset test: SUCCESS\n"); + + // Test SPEC asset + data = GetAsset(AssetId::ASSET_TEST_SPEC, &size); + assert(data != nullptr); + assert(size > 0); + assert(GetAssetType(AssetId::ASSET_TEST_SPEC) == AssetType::SPEC); + printf("SPEC asset test: SUCCESS\n"); + + // Test MESH asset + MeshAsset mesh = GetMeshAsset(AssetId::ASSET_TEST_MESH); + assert(mesh.vertices != nullptr); + assert(mesh.num_vertices > 0); + assert(mesh.indices != nullptr); + assert(mesh.num_indices > 0); + assert(GetAssetType(AssetId::ASSET_TEST_MESH) == AssetType::MESH); + printf("MESH asset test: SUCCESS\n"); + + // Test TEXTURE asset + TextureAsset tex = GetTextureAsset(AssetId::ASSET_TEST_TEXTURE); + assert(tex.pixels != nullptr); + assert(tex.width > 0); + assert(tex.height > 0); + assert(GetAssetType(AssetId::ASSET_TEST_TEXTURE) == AssetType::TEXTURE); + printf("TEXTURE asset test: SUCCESS\n"); - assert(data1 != nullptr); + // Test MP3 asset + data = GetAsset(AssetId::ASSET_TEST_MP3, &size); + assert(data != nullptr); assert(size > 0); + assert(GetAssetType(AssetId::ASSET_TEST_MP3) == AssetType::MP3); + printf("MP3 asset test: SUCCESS\n"); - const char* expected_prefix = "This is a test asset file."; - if (strncmp((const char*)data1, expected_prefix, strlen(expected_prefix)) == - 0) { - printf("Asset content verification: SUCCESS\n"); - } else { - printf("Asset content verification: FAILED\n"); - printf("Got: %.*s\n", (int)size, (const char*)data1); - return 1; - } + // Test PROC asset + data = GetAsset(AssetId::ASSET_TEST_PROC, &size); + assert(data != nullptr); + assert(size > 0); + assert(GetAssetType(AssetId::ASSET_TEST_PROC) == AssetType::PROC); + DropAsset(AssetId::ASSET_TEST_PROC, data); + printf("PROC asset test: SUCCESS\n"); // Test caching: request the same asset again and verify pointer is identical - size_t size2 = 0; - const uint8_t* data2 = GetAsset(AssetId::ASSET_TEST_ASSET_1, &size2); - assert(data2 != nullptr); - assert(size2 == size); - assert(data1 == data2); // Pointers should be the same for cached static asset + const uint8_t* data1 = GetAsset(AssetId::ASSET_TEST_WGSL, &size); + const uint8_t* data2 = GetAsset(AssetId::ASSET_TEST_WGSL, &size); + assert(data1 == data2); printf("Asset caching test: SUCCESS\n"); // Test ASSET_LAST_ID - should not return a valid asset - size_t last_id_size = 0; - const uint8_t* last_id_data = GetAsset(AssetId::ASSET_LAST_ID, &last_id_size); + const uint8_t* last_id_data = GetAsset(AssetId::ASSET_LAST_ID, &size); assert(last_id_data == nullptr); - assert(last_id_size == 0); printf("ASSET_LAST_ID test: SUCCESS\n"); - printf("Asset size: %zu bytes\n", size); - - // Test procedural asset - printf("\nRunning Procedural Asset test...\n"); - size_t proc_size = 0; - const uint8_t* proc_data_1 = - GetAsset(AssetId::ASSET_PROC_NOISE_256, &proc_size); - assert(proc_data_1 != nullptr); - // Expect 256x256 RGBA8 + 8 byte header - assert(proc_size == 256 * 256 * 4 + 8); - - // Verify first few bytes of DATA (skip header) - // Header is 8 bytes - const uint8_t* pixel_data_1 = proc_data_1 + 8; - bool non_zero_data = false; - for (size_t i = 0; i < 16; ++i) { // Check first 16 bytes of pixels - if (pixel_data_1[i] != 0) { - non_zero_data = true; - break; - } - } - assert(non_zero_data); - printf("Procedural asset content verification: SUCCESS\n"); - - // Test DropAsset for procedural asset and re-generation - DropAsset(AssetId::ASSET_PROC_NOISE_256, proc_data_1); - // After dropping, GetAsset should generate new data - const uint8_t* proc_data_2 = - GetAsset(AssetId::ASSET_PROC_NOISE_256, &proc_size); - assert(proc_data_2 != nullptr); - // assert(proc_data_1 != proc_data_2); // Removed: Allocator might reuse the - // same address - - // Verify content again to ensure it was re-generated correctly - non_zero_data = false; - const uint8_t* pixel_data_2 = proc_data_2 + 8; - for (size_t i = 0; i < 16; ++i) { - if (pixel_data_2[i] != 0) { - non_zero_data = true; - break; - } - } - assert(non_zero_data); - printf("Procedural asset DropAsset and re-generation test: SUCCESS\n"); - - // Test Texture Asset (TGA loading) - printf("\nRunning Texture Asset test...\n"); - TextureAsset tex = GetTextureAsset(AssetId::ASSET_TEST_IMAGE); - assert(tex.pixels != nullptr); - assert(tex.width == 2); - assert(tex.height == 2); - - // Verify pixels (Expected RGBA) - // Pixel 0: Red (255, 0, 0, 255) - assert(tex.pixels[0] == 255 && tex.pixels[1] == 0 && tex.pixels[2] == 0 && - tex.pixels[3] == 255); - // Pixel 1: Green (0, 255, 0, 255) - assert(tex.pixels[4] == 0 && tex.pixels[5] == 255 && tex.pixels[6] == 0 && - tex.pixels[7] == 255); - // Pixel 2: Blue (0, 0, 255, 255) - assert(tex.pixels[8] == 0 && tex.pixels[9] == 0 && tex.pixels[10] == 255 && - tex.pixels[11] == 255); - // Pixel 3: White (255, 255, 255, 255) - assert(tex.pixels[12] == 255 && tex.pixels[13] == 255 && - tex.pixels[14] == 255 && tex.pixels[15] == 255); - - printf("Texture Asset content verification: SUCCESS\n"); - - // Test Unknown Procedural Function - printf("\nRunning Unknown Procedural Function test...\n"); - size_t unknown_size = 0; - // This should print an error to stderr: "Error: Unknown procedural - // function..." - const uint8_t* unknown_data = - GetAsset(AssetId::ASSET_PROC_UNKNOWN, &unknown_size); - assert(unknown_data == nullptr); - assert(unknown_size == 0); - printf("Unknown Procedural Function test: SUCCESS\n"); - - // Test Failing Procedural Function - printf("\nRunning Failing Procedural Function test...\n"); - size_t fail_size = 0; - // This should print an error to stderr: "Error: Procedural generation - // failed..." - const uint8_t* fail_data = GetAsset(AssetId::ASSET_PROC_FAIL, &fail_size); - assert(fail_data == nullptr); - assert(fail_size == 0); - printf("Failing Procedural Function test: SUCCESS\n"); - - // Test Out-of-Bounds ID (beyond ASSET_LAST_ID) - // Casting to AssetId to suppress compiler warnings if checking strict enum - // types - printf("\nRunning Out-of-Bounds ID test...\n"); - size_t oob_size = 0; - const uint8_t* oob_data = - GetAsset((AssetId)((int)AssetId::ASSET_LAST_ID + 1), &oob_size); - assert(oob_data == nullptr); - assert(oob_size == 0); - printf("Out-of-Bounds ID test: SUCCESS\n"); - - // Test DropAsset edge cases - printf("\nRunning DropAsset edge cases test...\n"); - // Invalid ID - DropAsset((AssetId)((int)AssetId::ASSET_LAST_ID + 1), nullptr); - - // Mismatched pointer (should do nothing) - // We use proc_data_2 which is valid, but pass a different ID (e.g. - // ASSET_TEST_ASSET_1 which is static) - DropAsset(AssetId::ASSET_TEST_ASSET_1, proc_data_2); - // Verify proc_data_2 is still valid (by checking it's in cache). - // Note: GetAsset will just return the cached pointer. If DropAsset worked, it - // would have been cleared. But wait, DropAsset clears it from cache. The - // correct test for "mismatched pointer" is: pass the correct ID but WRONG - // pointer. This ensures we don't clear the cache if the user passes a - // stale/wrong pointer. - - // Let's try to drop ASSET_PROC_NOISE_256 with a dummy pointer. - uint8_t dummy_ptr; - DropAsset(AssetId::ASSET_PROC_NOISE_256, &dummy_ptr); - // Check if asset is still in cache (should be, as we didn't drop the real - // one) We can't peek into g_asset_cache directly from here (it's static). But - // GetAsset should return the SAME pointer as proc_data_2 without - // re-generation. If it was dropped, GetAsset would re-generate and likely - // return a NEW pointer (new allocation). - const uint8_t* proc_data_3 = GetAsset(AssetId::ASSET_PROC_NOISE_256, nullptr); - assert(proc_data_3 == proc_data_2); - printf("DropAsset edge cases test: SUCCESS\n"); - - printf("Procedural Asset test PASSED\n"); - - // Test MP3 asset type - printf("\nRunning MP3 Asset type test...\n"); - AssetType mp3_type = GetAssetType(AssetId::ASSET_TEST_MP3); - assert(mp3_type == AssetType::MP3); - size_t mp3_size = 0; - const uint8_t* mp3_data = GetAsset(AssetId::ASSET_TEST_MP3, &mp3_size); - assert(mp3_data != nullptr); - assert(mp3_size > 0); - printf("MP3 Asset type test: SUCCESS\n"); - - printf("AssetManager test PASSED\n"); + printf("\n--- ALL ASSET TESTS PASSED ---\n"); return 0; } diff --git a/src/tests/gpu/test_shader_composer.cc b/src/tests/gpu/test_shader_composer.cc index 4002863..6e0b707 100644 --- a/src/tests/gpu/test_shader_composer.cc +++ b/src/tests/gpu/test_shader_composer.cc @@ -48,29 +48,21 @@ void test_asset_composition() { size_t snippet_a_size; const char* snippet_a_code = - (const char*)GetAsset(AssetId::ASSET_SHADER_SNIPPET_A, &snippet_a_size); + (const char*)GetAsset(AssetId::ASSET_TEST_WGSL, &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)); + sc.RegisterSnippet("TEST_WGSL", std::string(snippet_a_code, snippet_a_size)); std::string main_code = - "fn main() -> f32 { return snippet_a() + snippet_b(); }"; - std::string result = sc.Compose({"SNIPPET_A", "SNIPPET_B"}, main_code); + "fn main() -> f32 { return test_wgsl(); }"; + std::string result = sc.Compose({"TEST_WGSL"}, main_code); - assert(result.find("fn snippet_a()") != std::string::npos); - assert(result.find("fn snippet_b()") != std::string::npos); + assert(result.find("fn test_wgsl()") != 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_a = result.find("test_wgsl"); size_t pos_main = result.find("main"); - assert(pos_a < pos_b); - assert(pos_b < pos_main); + assert(pos_a < pos_main); std::cout << "Asset-based composition logic verified." << std::endl; } |
