15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- RTLinearAllocatorTest.cpp ------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Allocators.h" 10f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include "RTLinearAllocatorTest.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 1637b74a387bb3993387029859c2d9d051c41c724eStephen HinesRTLinearAllocatorTest::RTLinearAllocatorTest() { 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines // create testee. modify it if need 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee = new LinearAllocator<Data, 0>(CHUNK_SIZE); 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 2237b74a387bb3993387029859c2d9d051c41c724eStephen HinesRTLinearAllocatorTest::~RTLinearAllocatorTest() { 2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines delete m_pTestee; 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid RTLinearAllocatorTest::SetUp() { 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid RTLinearAllocatorTest::TearDown() { 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, AllocateN) { 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(10); 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_FALSE(0 == pointer); 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_FALSE(m_pTestee->empty()); 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4537b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, allocate) { 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(); 4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_FALSE(0 == pointer); 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_FALSE(m_pTestee->empty()); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5237b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, allocateOver) { 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(CHUNK_SIZE + 1); 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(0 == pointer); 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(0 == m_pTestee->max_size()); 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(m_pTestee->empty()); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5937b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, alloc_construct) { 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(); 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer); 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(1 == pointer->one); 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(2 == pointer->two); 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(3 == pointer->three); 6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(4 == pointer->four); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6837b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, alloc_constructCopy) { 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(); 7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data data(7, 7, 7, 7); 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer, data); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->one); 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->two); 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->three); 7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->four); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7937b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, allocN_construct) { 8037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(10); 8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer); 8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(1 == pointer->one); 8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(2 == pointer->two); 8437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(3 == pointer->three); 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(4 == pointer->four); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8837b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, allocN_constructCopy) { 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(10); 9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data data(7, 7, 7, 7); 9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer, data); 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->one); 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->two); 9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->three); 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(7 == pointer->four); 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9937b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, multi_alloc_ctor_iterate) { 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines for (int i = 0; i < 101; ++i) { 10137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(); 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer); 10337b74a387bb3993387029859c2d9d051c41c724eStephen Hines pointer->one = i; 10437b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 10537b74a387bb3993387029859c2d9d051c41c724eStephen Hines /** 10637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Alloc::iterator data, dEnd = m_pTestee->end(); 10737b74a387bb3993387029859c2d9d051c41c724eStephen Hines int counter = 0; 10837b74a387bb3993387029859c2d9d051c41c724eStephen Hines for (data=m_pTestee->begin(); data!=dEnd; ++data) { 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_EQ(counter, (*data).one); 11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines ++counter; 11137b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 11237b74a387bb3993387029859c2d9d051c41c724eStephen Hines **/ 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 11537b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(RTLinearAllocatorTest, multi_allocN_ctor_iterate) { 11637b74a387bb3993387029859c2d9d051c41c724eStephen Hines int counter = 0; 11737b74a387bb3993387029859c2d9d051c41c724eStephen Hines for (int i = 0; i < 10000; ++i) { 11837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Data* pointer = m_pTestee->allocate(10); 11937b74a387bb3993387029859c2d9d051c41c724eStephen Hines for (int j = 0; j < 10; ++j) { 12037b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_pTestee->construct(pointer); 12137b74a387bb3993387029859c2d9d051c41c724eStephen Hines pointer->one = counter; 12237b74a387bb3993387029859c2d9d051c41c724eStephen Hines ++pointer; 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hines ++counter; 12437b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 12537b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 12637b74a387bb3993387029859c2d9d051c41c724eStephen Hines /** 12737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Alloc::iterator data, dEnd = m_pTestee->end(); 12837b74a387bb3993387029859c2d9d051c41c724eStephen Hines counter = 0; 12937b74a387bb3993387029859c2d9d051c41c724eStephen Hines for (data=m_pTestee->begin(); data!=dEnd; ++data) { 13037b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_EQ(counter, (*data).one); 13137b74a387bb3993387029859c2d9d051c41c724eStephen Hines ++counter; 13237b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 13337b74a387bb3993387029859c2d9d051c41c724eStephen Hines **/ 13437b74a387bb3993387029859c2d9d051c41c724eStephen Hines} 135