blob: 1350c50ddae1a92575a86e0a6bc322c950904177 [file] [log] [blame]
Shih-wei Liao5460a1f2012-03-16 22:41:16 -07001//===- 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//===----------------------------------------------------------------------===//
Stephen Hines37b74a32014-11-26 18:48:20 -08009#include "mcld/Support/Allocators.h"
Stephen Hinesf33f6de2014-02-14 18:00:16 -080010#include "RTLinearAllocatorTest.h"
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070011
12using namespace mcld;
13using namespace mcldtest;
14
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070015// Constructor can do set-up work for all test here.
Stephen Hines37b74a32014-11-26 18:48:20 -080016RTLinearAllocatorTest::RTLinearAllocatorTest() {
17 // create testee. modify it if need
18 m_pTestee = new LinearAllocator<Data, 0>(CHUNK_SIZE);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070019}
20
21// Destructor can do clean-up work that doesn't throw exceptions here.
Stephen Hines37b74a32014-11-26 18:48:20 -080022RTLinearAllocatorTest::~RTLinearAllocatorTest() {
23 delete m_pTestee;
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070024}
25
26// SetUp() will be called immediately before each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080027void RTLinearAllocatorTest::SetUp() {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070028}
29
30// TearDown() will be called immediately after each test.
Stephen Hines37b74a32014-11-26 18:48:20 -080031void RTLinearAllocatorTest::TearDown() {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070032}
33
34//==========================================================================//
35// Testcases
36//
37
38TEST_F(RTLinearAllocatorTest, AllocateN) {
Stephen Hines37b74a32014-11-26 18:48:20 -080039 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());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070043}
44
Stephen Hines37b74a32014-11-26 18:48:20 -080045TEST_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());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070050}
51
Stephen Hines37b74a32014-11-26 18:48:20 -080052TEST_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());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070057}
58
Stephen Hines37b74a32014-11-26 18:48:20 -080059TEST_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);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070066}
67
Stephen Hines37b74a32014-11-26 18:48:20 -080068TEST_F(RTLinearAllocatorTest, alloc_constructCopy) {
69 Data* pointer = m_pTestee->allocate();
70 Data data(7, 7, 7, 7);
71 m_pTestee->construct(pointer, data);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070072
Stephen Hines37b74a32014-11-26 18:48:20 -080073 ASSERT_TRUE(7 == pointer->one);
74 ASSERT_TRUE(7 == pointer->two);
75 ASSERT_TRUE(7 == pointer->three);
76 ASSERT_TRUE(7 == pointer->four);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070077}
78
Stephen Hines37b74a32014-11-26 18:48:20 -080079TEST_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);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070086}
87
Stephen Hines37b74a32014-11-26 18:48:20 -080088TEST_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);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070097}
98
Stephen Hines37b74a32014-11-26 18:48:20 -080099TEST_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 **/
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700113}
114
Stephen Hines37b74a32014-11-26 18:48:20 -0800115TEST_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 **/
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700134}