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