#include #include #include using namespace XCEngine::Memory; namespace { TEST(LinearAllocator, Allocate) { LinearAllocator allocator(1024); void* ptr = allocator.Allocate(64); ASSERT_NE(ptr, nullptr); EXPECT_EQ(allocator.GetUsedSize(), 64u); } TEST(LinearAllocator, Allocate_Aligned) { LinearAllocator allocator(1024); void* ptr = allocator.Allocate(64, 16); ASSERT_NE(ptr, nullptr); uintptr_t addr = reinterpret_cast(ptr); EXPECT_EQ(addr % 16, 0u); } TEST(LinearAllocator, Clear) { LinearAllocator allocator(1024); allocator.Allocate(64); EXPECT_EQ(allocator.GetUsedSize(), 64u); allocator.Clear(); EXPECT_EQ(allocator.GetUsedSize(), 0u); } TEST(LinearAllocator, Marker) { LinearAllocator allocator(1024); allocator.Allocate(64); void* marker = allocator.GetMarker(); allocator.Allocate(32); EXPECT_EQ(allocator.GetUsedSize(), 96u); allocator.SetMarker(marker); EXPECT_EQ(allocator.GetUsedSize(), 64u); } TEST(LinearAllocator, AllocateMultiple) { LinearAllocator allocator(1024); allocator.Allocate(100); allocator.Allocate(200); allocator.Allocate(300); EXPECT_GE(allocator.GetUsedSize(), 600u); } TEST(LinearAllocator, OutOfMemory) { LinearAllocator allocator(200); void* ptr1 = allocator.Allocate(50, 8); void* ptr2 = allocator.Allocate(50, 8); ASSERT_NE(ptr1, nullptr); ASSERT_NE(ptr2, nullptr); void* ptr3 = allocator.Allocate(100, 8); EXPECT_EQ(ptr3, nullptr); } TEST(LinearAllocator, GetCapacity) { LinearAllocator allocator(512); EXPECT_EQ(allocator.GetCapacity(), 512u); } } // namespace