GCFactoryListTraitsTest.cpp revision 5460a1f25d9ddecb5c70667267d66d51af177a99
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- GCFactoryListTraitsTest.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//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "GCFactoryListTraitsTest.h" 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoGCFactoryListTraitsTest::GCFactoryListTraitsTest() 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Allocate the nodes. 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodesAlloc = new Node* [10]; 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define ALLOCATE_NODE(i) m_pNodesAlloc[(i)] = m_NodeFactory.produce(i); 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(0); 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(1); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(2); 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(3); 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(4); 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(5); 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(6); 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(7); 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(8); 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(9); 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef ALLOCATE_NODE 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoGCFactoryListTraitsTest::~GCFactoryListTraitsTest() 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GCFactoryListTraitsTest::SetUp() 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Reset the node value and (re)insert into the iplist. 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (unsigned i = 0; i < 10; i++) { 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodesAlloc[i]->setValue(m_pNodesAlloc[i]->getInitialValue()); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.push_back(m_pNodesAlloc[i]); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GCFactoryListTraitsTest::TearDown() 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Erasing of llvm::iplist won't destroy the allocation of the nodes managed 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // by the GCFactory (i.e., NodeFactory.) 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.clear(); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define CHECK_NODE_VALUE(v_) do { \ 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(v_, it->getValue()); \ 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao it++; \ 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} while (false) 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define CHECK_LIST_VALUE(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) do { \ 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::iplist<Node>::const_iterator it = m_pNodeList.begin(); \ 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v1); \ 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v2); \ 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v3); \ 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v4); \ 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v5); \ 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v6); \ 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v7); \ 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v8); \ 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v9); \ 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_NODE_VALUE(v10); \ 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} while (false) 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Basic) { 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(10, m_pNodeList.size()); 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, BasicAgain) { 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(10, m_pNodeList.size()); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Clear) { 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.clear(); 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(0, m_pNodeList.size()); 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, PushThenPop) { 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Node *NewNode = m_NodeFactory.produce(11); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.push_back(NewNode); 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(11, m_pNodeList.size()); 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.pop_back(); 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(10, m_pNodeList.size()); 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, CodeIterator) { 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // to test whether there's compilation error for const template 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (llvm::iplist<Node>::const_iterator I = m_pNodeList.begin(), 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao E = m_pNodeList.end(); I != E; I++) 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao I->getValue(); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Empty) { 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pNodeList.empty()); 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.clear(); 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pNodeList.empty()); 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, EraseAndSize) { 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pNodeList.empty()); 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.erase(m_pNodeList.begin()); 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.erase(m_pNodeList.begin()); 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pNodeList.size() == 8); 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef CHECK_LIST_VALUE 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef CHECK_NODE_VALUE 124