• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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