allocator-test: reduce assumptions about heap size Small heaps (e.g. 32KB) cause test failures because the size of a "big allocation" is fixed. Use the heap size to do a better job. Change-Id: I24ad172f71c6c91c975a7cae94d29e3d7b43775f
diff --git a/tests/allocator-test.cc b/tests/allocator-test.cc index 3912d9c..685fc22 100644 --- a/tests/allocator-test.cc +++ b/tests/allocator-test.cc
@@ -39,11 +39,6 @@ Timeout noWait{0}; - /** - * Size of an allocation that is big enough that we'll exhaust memory before - * we allocate `MaxAllocCount` of them. - */ - constexpr size_t BigAllocSize = 1024 * 32; constexpr size_t AllocSize = 0xff0; constexpr size_t MaxAllocCount = 16; constexpr size_t TestIterations = @@ -137,8 +132,18 @@ * Test that we can do a long-running blocking allocation in one thread and * a free in another thread and make forward progress. */ - void test_blocking_allocator() + void test_blocking_allocator(const size_t HeapSize) { + /** + * Size of an allocation that is big enough that we'll exhaust memory + * before we allocate `MaxAllocCount` of them. + */ + const size_t BigAllocSize = HeapSize / (MaxAllocCount - 1); + TEST(BigAllocSize > 0, + "Cannot guestimate big allocation size for our heap of {} bytes", + HeapSize); + debug_log("BigAllocSize {} bytes", BigAllocSize); + allocations.resize(MaxAllocCount); // Create the background worker before we try to exhaust memory. async([]() { @@ -690,10 +695,6 @@ const ptraddr_t HeapEnd = LA_ABS(__export_mem_heap_end); const size_t HeapSize = HeapEnd - HeapStart; - TEST(BigAllocSize < HeapSize, - "Big allocation size is too large for our heap ({} >= {})", - BigAllocSize, - BigAllocSize); debug_log("Heap size is {} bytes", HeapSize); test_preflight(); @@ -742,7 +743,7 @@ ret = heap_free(MALLOC_CAPABILITY, array); TEST(ret == 0, "Freeing array failed: {}", ret); - test_blocking_allocator(); + test_blocking_allocator(HeapSize); TEST_EQUAL(heap_quarantine_empty(), 0, "Could not flush quarantine"); test_revoke(); test_fuzz();