blob: bc8092e1d03544b05554b303a55fb0013e3239c6 [file] [log] [blame]
Shih-wei Liao5460a1f2012-03-16 22:41:16 -07001//===- 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"
Stephen Hines37b74a32014-11-26 18:48:20 -080010#include "mcld/Support/Allocators.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 -080016LinearAllocatorTest::LinearAllocatorTest() {
17 // create testee. modify it if need
18 m_pTestee = new LinearAllocator<Data, 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 -080022LinearAllocatorTest::~LinearAllocatorTest() {
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 LinearAllocatorTest::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 LinearAllocatorTest::TearDown() {
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070032}
33
34//==========================================================================//
35// Testcases
36//
Stephen Hines37b74a32014-11-26 18:48:20 -080037TEST_F(LinearAllocatorTest, allocateN) {
38 Data* pointer = m_pTestee->allocate(10);
39 ASSERT_FALSE(0 == pointer);
40 ASSERT_EQ(CHUNK_SIZE, m_pTestee->max_size());
41 ASSERT_FALSE(m_pTestee->empty());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070042}
43
Stephen Hines37b74a32014-11-26 18:48:20 -080044TEST_F(LinearAllocatorTest, allocate) {
45 Data* pointer = m_pTestee->allocate();
46 ASSERT_FALSE(0 == pointer);
47 ASSERT_EQ(CHUNK_SIZE, m_pTestee->max_size());
48 ASSERT_FALSE(m_pTestee->empty());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070049}
50
Stephen Hines37b74a32014-11-26 18:48:20 -080051TEST_F(LinearAllocatorTest, allocateOver) {
52 Data* pointer = m_pTestee->allocate(CHUNK_SIZE + 1);
53 ASSERT_TRUE(0 == pointer);
54 ASSERT_TRUE(0 == m_pTestee->max_size());
55 ASSERT_TRUE(m_pTestee->empty());
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070056}
57
Stephen Hines37b74a32014-11-26 18:48:20 -080058TEST_F(LinearAllocatorTest, alloc_construct) {
59 Data* pointer = m_pTestee->allocate();
60 m_pTestee->construct(pointer);
61 ASSERT_TRUE(1 == pointer->one);
62 ASSERT_TRUE(2 == pointer->two);
63 ASSERT_TRUE(3 == pointer->three);
64 ASSERT_TRUE(4 == pointer->four);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070065}
66
Stephen Hines37b74a32014-11-26 18:48:20 -080067TEST_F(LinearAllocatorTest, alloc_constructCopy) {
68 Data* pointer = m_pTestee->allocate();
69 Data data(7, 7, 7, 7);
70 m_pTestee->construct(pointer, data);
71
72 ASSERT_TRUE(7 == pointer->one);
73 ASSERT_TRUE(7 == pointer->two);
74 ASSERT_TRUE(7 == pointer->three);
75 ASSERT_TRUE(7 == pointer->four);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070076}
77
Stephen Hines37b74a32014-11-26 18:48:20 -080078TEST_F(LinearAllocatorTest, allocN_construct) {
79 Data* pointer = m_pTestee->allocate(10);
80 m_pTestee->construct(pointer);
81 ASSERT_TRUE(1 == pointer->one);
82 ASSERT_TRUE(2 == pointer->two);
83 ASSERT_TRUE(3 == pointer->three);
84 ASSERT_TRUE(4 == pointer->four);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070085}
86
Stephen Hines37b74a32014-11-26 18:48:20 -080087TEST_F(LinearAllocatorTest, allocN_constructCopy) {
88 Data* pointer = m_pTestee->allocate(10);
89 Data data(7, 7, 7, 7);
90 m_pTestee->construct(pointer, data);
91
92 ASSERT_TRUE(7 == pointer->one);
93 ASSERT_TRUE(7 == pointer->two);
94 ASSERT_TRUE(7 == pointer->three);
95 ASSERT_TRUE(7 == pointer->four);
Shih-wei Liao5460a1f2012-03-16 22:41:16 -070096}
97
Stephen Hines37b74a32014-11-26 18:48:20 -080098TEST_F(LinearAllocatorTest, multi_alloc_ctor_iterate) {
99 for (int i = 0; i < 101; ++i) {
100 Data* pointer = m_pTestee->allocate();
101 m_pTestee->construct(pointer);
102 pointer->one = i;
103 }
104 /**
105 Alloc::iterator data, dEnd = m_pTestee->end();
106 int counter = 0;
107 for (data=m_pTestee->begin(); data!=dEnd; ++data) {
108 ASSERT_EQ(counter, (*data).one);
109 ++counter;
110 }
111 **/
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700112}
113
Stephen Hines37b74a32014-11-26 18:48:20 -0800114TEST_F(LinearAllocatorTest, multi_allocN_ctor_iterate) {
115 int counter = 0;
116 for (int i = 0; i < 10000; ++i) {
117 Data* pointer = m_pTestee->allocate(10);
118 for (int j = 0; j < 10; ++j) {
119 m_pTestee->construct(pointer);
120 pointer->one = counter;
121 ++pointer;
122 ++counter;
123 }
124 }
125 /**
126 Alloc::iterator data, dEnd = m_pTestee->end();
127 counter = 0;
128 for (data=m_pTestee->begin(); data!=dEnd; ++data) {
129 ASSERT_EQ(counter, (*data).one);
130 ++counter;
131 }
132 **/
Shih-wei Liao5460a1f2012-03-16 22:41:16 -0700133}