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