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//===----------------------------------------------------------------------===// 9f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen 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 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoRTLinearAllocatorTest::RTLinearAllocatorTest() 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // create testee. modify it if need 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new LinearAllocator<Data, 0>(CHUNK_SIZE); 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoRTLinearAllocatorTest::~RTLinearAllocatorTest() 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid RTLinearAllocatorTest::SetUp() 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid RTLinearAllocatorTest::TearDown() 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, AllocateN) { 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(10); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(0 == pointer); 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pTestee->empty()); 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, allocate ) { 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(0 == pointer); 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(CHUNK_SIZE == m_pTestee->max_size()); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pTestee->empty()); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, allocateOver ) { 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(CHUNK_SIZE+1); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(0 == pointer); 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pTestee->max_size()); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->empty()); 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, alloc_construct ) { 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer); 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(1 == pointer->one); 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(2 == pointer->two); 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(3 == pointer->three); 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(4 == pointer->four); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, alloc_constructCopy ) { 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data data(7, 7, 7, 7); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer, data); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->one); 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->two); 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->three); 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->four); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, allocN_construct ) { 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(10); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer); 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(1 == pointer->one); 8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(2 == pointer->two); 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(3 == pointer->three); 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(4 == pointer->four); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, allocN_constructCopy ) { 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(10); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data data(7, 7, 7, 7); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer, data); 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->one); 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->two); 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->three); 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(7 == pointer->four); 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, multi_alloc_ctor_iterate ) { 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (int i=0; i<101; ++i) { 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer); 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pointer->one = i; 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Alloc::iterator data, dEnd = m_pTestee->end(); 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao int counter = 0; 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (data=m_pTestee->begin(); data!=dEnd; ++data) { 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(counter, (*data).one); 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++counter; 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao**/ 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(RTLinearAllocatorTest, multi_allocN_ctor_iterate ) { 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao int counter = 0; 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (int i=0; i<10000; ++i) { 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Data* pointer = m_pTestee->allocate(10); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (int j=0; j<10; ++j) { 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->construct(pointer); 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pointer->one = counter; 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++pointer; 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++counter; 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Alloc::iterator data, dEnd = m_pTestee->end(); 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao counter = 0; 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (data=m_pTestee->begin(); data!=dEnd; ++data) { 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(counter, (*data).one); 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++counter; 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao**/ 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 141