//===- RTLinearAllocatorTest.cpp ------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "mcld/Support/Allocators.h" #include "RTLinearAllocatorTest.h" using namespace mcld; using namespace mcldtest; // Constructor can do set-up work for all test here. RTLinearAllocatorTest::RTLinearAllocatorTest() { // create testee. modify it if need m_pTestee = new LinearAllocator(CHUNK_SIZE); } // Destructor can do clean-up work that doesn't throw exceptions here. RTLinearAllocatorTest::~RTLinearAllocatorTest() { delete m_pTestee; } // SetUp() will be called immediately before each test. void RTLinearAllocatorTest::SetUp() { } // TearDown() will be called immediately after each test. void RTLinearAllocatorTest::TearDown() { } //==========================================================================// // Testcases // TEST_F(RTLinearAllocatorTest, AllocateN) { Data* pointer = m_pTestee->allocate(10); ASSERT_FALSE(0 == pointer); ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); ASSERT_FALSE(m_pTestee->empty()); } TEST_F(RTLinearAllocatorTest, allocate) { Data* pointer = m_pTestee->allocate(); ASSERT_FALSE(0 == pointer); ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); ASSERT_FALSE(m_pTestee->empty()); } TEST_F(RTLinearAllocatorTest, allocateOver) { Data* pointer = m_pTestee->allocate(CHUNK_SIZE + 1); ASSERT_TRUE(0 == pointer); ASSERT_TRUE(0 == m_pTestee->max_size()); ASSERT_TRUE(m_pTestee->empty()); } TEST_F(RTLinearAllocatorTest, alloc_construct) { Data* pointer = m_pTestee->allocate(); m_pTestee->construct(pointer); ASSERT_TRUE(1 == pointer->one); ASSERT_TRUE(2 == pointer->two); ASSERT_TRUE(3 == pointer->three); ASSERT_TRUE(4 == pointer->four); } TEST_F(RTLinearAllocatorTest, alloc_constructCopy) { Data* pointer = m_pTestee->allocate(); Data data(7, 7, 7, 7); m_pTestee->construct(pointer, data); ASSERT_TRUE(7 == pointer->one); ASSERT_TRUE(7 == pointer->two); ASSERT_TRUE(7 == pointer->three); ASSERT_TRUE(7 == pointer->four); } TEST_F(RTLinearAllocatorTest, allocN_construct) { Data* pointer = m_pTestee->allocate(10); m_pTestee->construct(pointer); ASSERT_TRUE(1 == pointer->one); ASSERT_TRUE(2 == pointer->two); ASSERT_TRUE(3 == pointer->three); ASSERT_TRUE(4 == pointer->four); } TEST_F(RTLinearAllocatorTest, allocN_constructCopy) { Data* pointer = m_pTestee->allocate(10); Data data(7, 7, 7, 7); m_pTestee->construct(pointer, data); ASSERT_TRUE(7 == pointer->one); ASSERT_TRUE(7 == pointer->two); ASSERT_TRUE(7 == pointer->three); ASSERT_TRUE(7 == pointer->four); } TEST_F(RTLinearAllocatorTest, multi_alloc_ctor_iterate) { for (int i = 0; i < 101; ++i) { Data* pointer = m_pTestee->allocate(); m_pTestee->construct(pointer); pointer->one = i; } /** Alloc::iterator data, dEnd = m_pTestee->end(); int counter = 0; for (data=m_pTestee->begin(); data!=dEnd; ++data) { ASSERT_EQ(counter, (*data).one); ++counter; } **/ } TEST_F(RTLinearAllocatorTest, multi_allocN_ctor_iterate) { int counter = 0; for (int i = 0; i < 10000; ++i) { Data* pointer = m_pTestee->allocate(10); for (int j = 0; j < 10; ++j) { m_pTestee->construct(pointer); pointer->one = counter; ++pointer; ++counter; } } /** Alloc::iterator data, dEnd = m_pTestee->end(); counter = 0; for (data=m_pTestee->begin(); data!=dEnd; ++data) { ASSERT_EQ(counter, (*data).one); ++counter; } **/ }