Initial arena benchmarks
This commit is contained in:
@@ -90,8 +90,10 @@ TEST_CASE("ArenaAllocator block management") {
|
||||
CHECK(ptr1 != ptr2);
|
||||
}
|
||||
|
||||
SUBCASE("allocation larger than block size throws") {
|
||||
CHECK_THROWS_AS(arena.allocate(200), std::bad_alloc);
|
||||
SUBCASE("allocation larger than block size grows arena") {
|
||||
void *ptr = arena.allocate(200);
|
||||
CHECK(ptr != nullptr);
|
||||
CHECK(arena.num_blocks() == 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +162,7 @@ TEST_CASE("ArenaAllocator memory tracking") {
|
||||
|
||||
arena.allocate(50);
|
||||
CHECK(arena.num_blocks() == 2);
|
||||
CHECK(arena.total_allocated() == 1024);
|
||||
CHECK(arena.total_allocated() >= 1024);
|
||||
}
|
||||
|
||||
TEST_CASE("ArenaAllocator stress test") {
|
||||
@@ -256,6 +258,39 @@ TEST_CASE("ArenaAllocator with custom objects") {
|
||||
CHECK(obj2->name == "second");
|
||||
}
|
||||
|
||||
TEST_CASE("ArenaAllocator geometric growth policy") {
|
||||
ArenaAllocator arena(64);
|
||||
|
||||
SUBCASE("normal geometric growth doubles size") {
|
||||
arena.allocate(60); // Fill first block
|
||||
size_t initial_total = arena.total_allocated();
|
||||
|
||||
arena.allocate(10); // Force new block
|
||||
CHECK(arena.num_blocks() == 2);
|
||||
CHECK(arena.total_allocated() == initial_total + 128); // 64 * 2 = 128
|
||||
}
|
||||
|
||||
SUBCASE("large allocation creates appropriately sized block") {
|
||||
arena.allocate(60); // Fill first block
|
||||
size_t initial_total = arena.total_allocated();
|
||||
|
||||
arena.allocate(200); // Force large block
|
||||
CHECK(arena.num_blocks() == 2);
|
||||
CHECK(arena.total_allocated() >= initial_total + 200); // At least 200 bytes
|
||||
}
|
||||
|
||||
SUBCASE("multiple growths maintain O(log n) blocks") {
|
||||
size_t allocation_size = 32;
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
arena.allocate(allocation_size);
|
||||
}
|
||||
|
||||
// Should have grown logarithmically, not linearly
|
||||
CHECK(arena.num_blocks() < 6); // Much less than 10
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("ArenaAllocator alignment edge cases") {
|
||||
ArenaAllocator arena;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user