1//===- LinearAllocatorTest.cpp --------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "LinearAllocatorTest.h" 10#include "mcld/Support/Allocators.h" 11 12using namespace mcld; 13using namespace mcldtest; 14 15 16// Constructor can do set-up work for all test here. 17LinearAllocatorTest::LinearAllocatorTest() 18{ 19 // create testee. modify it if need 20 m_pTestee = new LinearAllocator<Data, CHUNK_SIZE>(); 21} 22 23// Destructor can do clean-up work that doesn't throw exceptions here. 24LinearAllocatorTest::~LinearAllocatorTest() 25{ 26 delete m_pTestee; 27} 28 29// SetUp() will be called immediately before each test. 30void LinearAllocatorTest::SetUp() 31{ 32} 33 34// TearDown() will be called immediately after each test. 35void LinearAllocatorTest::TearDown() 36{ 37} 38 39//==========================================================================// 40// Testcases 41// 42TEST_F( LinearAllocatorTest, allocateN ) { 43 Data* pointer = m_pTestee->allocate(10); 44 ASSERT_FALSE(0 == pointer); 45 ASSERT_EQ(CHUNK_SIZE, m_pTestee->max_size()); 46 ASSERT_FALSE(m_pTestee->empty()); 47} 48 49TEST_F( LinearAllocatorTest, allocate ) { 50 Data* pointer = m_pTestee->allocate(); 51 ASSERT_FALSE(0 == pointer); 52 ASSERT_EQ(CHUNK_SIZE, m_pTestee->max_size()); 53 ASSERT_FALSE(m_pTestee->empty()); 54} 55 56TEST_F( LinearAllocatorTest, allocateOver ) { 57 Data* pointer = m_pTestee->allocate(CHUNK_SIZE+1); 58 ASSERT_TRUE(0 == pointer); 59 ASSERT_TRUE(0 == m_pTestee->max_size()); 60 ASSERT_TRUE(m_pTestee->empty()); 61} 62 63TEST_F( LinearAllocatorTest, alloc_construct ) { 64 Data* pointer = m_pTestee->allocate(); 65 m_pTestee->construct(pointer); 66 ASSERT_TRUE(1 == pointer->one); 67 ASSERT_TRUE(2 == pointer->two); 68 ASSERT_TRUE(3 == pointer->three); 69 ASSERT_TRUE(4 == pointer->four); 70} 71 72TEST_F( LinearAllocatorTest, alloc_constructCopy ) { 73 Data* pointer = m_pTestee->allocate(); 74 Data data(7, 7, 7, 7); 75 m_pTestee->construct(pointer, data); 76 77 ASSERT_TRUE(7 == pointer->one); 78 ASSERT_TRUE(7 == pointer->two); 79 ASSERT_TRUE(7 == pointer->three); 80 ASSERT_TRUE(7 == pointer->four); 81} 82 83TEST_F( LinearAllocatorTest, allocN_construct ) { 84 Data* pointer = m_pTestee->allocate(10); 85 m_pTestee->construct(pointer); 86 ASSERT_TRUE(1 == pointer->one); 87 ASSERT_TRUE(2 == pointer->two); 88 ASSERT_TRUE(3 == pointer->three); 89 ASSERT_TRUE(4 == pointer->four); 90} 91 92TEST_F( LinearAllocatorTest, allocN_constructCopy ) { 93 Data* pointer = m_pTestee->allocate(10); 94 Data data(7, 7, 7, 7); 95 m_pTestee->construct(pointer, data); 96 97 ASSERT_TRUE(7 == pointer->one); 98 ASSERT_TRUE(7 == pointer->two); 99 ASSERT_TRUE(7 == pointer->three); 100 ASSERT_TRUE(7 == pointer->four); 101} 102 103TEST_F( LinearAllocatorTest, multi_alloc_ctor_iterate ) { 104 for (int i=0; i<101; ++i) { 105 Data* pointer = m_pTestee->allocate(); 106 m_pTestee->construct(pointer); 107 pointer->one = i; 108 } 109/** 110 Alloc::iterator data, dEnd = m_pTestee->end(); 111 int counter = 0; 112 for (data=m_pTestee->begin(); data!=dEnd; ++data) { 113 ASSERT_EQ(counter, (*data).one); 114 ++counter; 115 } 116**/ 117} 118 119TEST_F( LinearAllocatorTest, multi_allocN_ctor_iterate ) { 120 int counter = 0; 121 for (int i=0; i<10000; ++i) { 122 Data* pointer = m_pTestee->allocate(10); 123 for (int j=0; j<10; ++j) { 124 m_pTestee->construct(pointer); 125 pointer->one = counter; 126 ++pointer; 127 ++counter; 128 } 129 } 130/** 131 Alloc::iterator data, dEnd = m_pTestee->end(); 132 counter = 0; 133 for (data=m_pTestee->begin(); data!=dEnd; ++data) { 134 ASSERT_EQ(counter, (*data).one); 135 ++counter; 136 } 137**/ 138} 139 140