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