#include <gtest/gtest.h>
#include "mgallocator.h"
#include "test-common.hpp"
using namespace std::string_literals;
TEST(LinearAllocatorTest, Basic) {
tracking_allocator underlying_allocator;
mg_linear_allocator *allocator = mg_linear_allocator_init(
(mg_allocator *)&underlying_allocator, 4096, 2048);
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
for (int i = 0; i < 4; ++i) {
mg_allocator_malloc((mg_allocator *)allocator, 1024);
}
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
mg_allocator_malloc((mg_allocator *)allocator, 1024);
ASSERT_EQ(underlying_allocator.allocated.size(), 3u);
mg_linear_allocator_reset(allocator);
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
for (int i = 0; i < 4; ++i) {
mg_allocator_malloc((mg_allocator *)allocator, 1024);
}
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
mg_linear_allocator_destroy(allocator);
ASSERT_EQ(underlying_allocator.allocated.size(), 0u);
}
TEST(LinearAllocatorTest, SeparateAllocations) {
tracking_allocator underlying_allocator;
mg_linear_allocator *allocator = mg_linear_allocator_init(
(mg_allocator *)&underlying_allocator, 4096, 2048);
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
for (int i = 0; i < 3; ++i) {
mg_allocator_malloc((mg_allocator *)allocator, 1024);
}
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
mg_allocator_malloc((mg_allocator *)allocator, 2048);
ASSERT_EQ(underlying_allocator.allocated.size(), 3u);
mg_allocator_malloc((mg_allocator *)allocator, 1024);
ASSERT_EQ(underlying_allocator.allocated.size(), 3u);
mg_allocator_malloc((mg_allocator *)allocator, 1024);
ASSERT_EQ(underlying_allocator.allocated.size(), 4u);
mg_linear_allocator_reset(allocator);
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
for (int i = 0; i < 4; ++i) {
mg_allocator_malloc((mg_allocator *)allocator, 1024);
}
ASSERT_EQ(underlying_allocator.allocated.size(), 2u);
mg_linear_allocator_destroy(allocator);
ASSERT_EQ(underlying_allocator.allocated.size(), 0u);
}