summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/test_assets.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/tests/test_assets.cc b/src/tests/test_assets.cc
index 7f26e71..128bb1c 100644
--- a/src/tests/test_assets.cc
+++ b/src/tests/test_assets.cc
@@ -88,6 +88,58 @@ int main() {
assert(non_zero_data);
printf("Procedural asset DropAsset and re-generation test: 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");
printf("AssetManager test PASSED\n");