TEST(ArenaTest, Initial) { Arena arena; arena.Reset(); EXPECT_TRUE(arena.current_block() == NULL); EXPECT_EQ(0u, arena.total_reserved_bytes()); EXPECT_TRUE(arena.remained_buffer() != NULL); EXPECT_TRUE(arena.current_block() != NULL); EXPECT_EQ(kMinBlockSize, arena.remained_buffer_size()); EXPECT_EQ(kMinBlockSize, arena.total_reserved_bytes()); arena.Reset(); EXPECT_TRUE(arena.current_block() != NULL); EXPECT_EQ(kMinBlockSize, arena.total_reserved_bytes()); }
TEST(ArenaTest, AllocateBytes) { Arena arena; char* ptr = NULL; // allocate kMinBlockSize / 4 bytes ptr = arena.AllocateBytes(kMinBlockSize / 4); EXPECT_TRUE(ptr != NULL); EXPECT_EQ(arena.current_block(), ptr); EXPECT_EQ(kMinBlockSize, arena.total_reserved_bytes()); EXPECT_EQ(arena.current_block() + kMinBlockSize / 4, arena.remained_buffer()); EXPECT_EQ(kMinBlockSize - kMinBlockSize / 4, arena.remained_buffer_size()); // allocate kMinBlockSize / 2 bytes ptr = arena.AllocateBytes(kMinBlockSize / 2); EXPECT_TRUE(ptr != NULL); EXPECT_EQ(arena.current_block() + kMinBlockSize / 4, ptr); EXPECT_EQ(kMinBlockSize, arena.total_reserved_bytes()); EXPECT_EQ(arena.current_block() + kMinBlockSize * 3 / 4, arena.remained_buffer()); EXPECT_EQ(kMinBlockSize / 4, arena.remained_buffer_size()); // allocate kMinBlockSize bytes ptr = arena.AllocateBytes(kMinBlockSize); EXPECT_TRUE(ptr != NULL); EXPECT_EQ(arena.current_block(), ptr); EXPECT_EQ(kMinBlockSize * 3, arena.total_reserved_bytes()); EXPECT_EQ(arena.current_block() + kMinBlockSize, arena.remained_buffer()); EXPECT_EQ(kMinBlockSize, arena.remained_buffer_size()); // reset arena.Reset(); EXPECT_TRUE(arena.current_block() != NULL); EXPECT_EQ(kMinBlockSize, arena.total_reserved_bytes()); }