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. 1537b74a387bb3993387029859c2d9d051c41c724eStephen HinesGCFactoryListTraitsTest::GCFactoryListTraitsTest() { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Allocate the nodes. 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodesAlloc = new Node* [10]; 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define ALLOCATE_NODE(i) m_pNodesAlloc[(i)] = m_NodeFactory.produce(i); 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(0); 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(1); 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(2); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(3); 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(4); 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(5); 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(6); 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(7); 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(8); 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ALLOCATE_NODE(9); 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef ALLOCATE_NODE 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesGCFactoryListTraitsTest::~GCFactoryListTraitsTest() { 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid GCFactoryListTraitsTest::SetUp() { 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Reset the node value and (re)insert into the iplist. 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (unsigned i = 0; i < 10; i++) { 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodesAlloc[i]->setValue(m_pNodesAlloc[i]->getInitialValue()); 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.push_back(m_pNodesAlloc[i]); 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid GCFactoryListTraitsTest::TearDown() { 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Erasing of llvm::iplist won't destroy the allocation of the nodes managed 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // by the GCFactory (i.e., NodeFactory.) 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.clear(); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define CHECK_NODE_VALUE(v_) \ 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines do { \ 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines ASSERT_TRUE(v_ == it->getValue()); \ 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines it++; \ 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines } while (false) 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define CHECK_LIST_VALUE(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \ 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines do { \ 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines llvm::iplist<Node>::const_iterator it = m_pNodeList.begin(); \ 6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v1); \ 6637b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v2); \ 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v3); \ 6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v4); \ 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v5); \ 7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v6); \ 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v7); \ 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v8); \ 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v9); \ 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines CHECK_NODE_VALUE(v10); \ 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines } while (false) 7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 7737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(GCFactoryListTraitsTest, Basic) { 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(10 == m_pNodeList.size()); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8237b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(GCFactoryListTraitsTest, BasicAgain) { 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(10 == m_pNodeList.size()); 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8737b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(GCFactoryListTraitsTest, Clear) { 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.clear(); 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(0 == m_pNodeList.size()); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9237b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(GCFactoryListTraitsTest, PushThenPop) { 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Node* NewNode = m_NodeFactory.produce(11); 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.push_back(NewNode); 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(11 == m_pNodeList.size()); 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pNodeList.pop_back(); 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(10 == m_pNodeList.size()); 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 10037b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_F(GCFactoryListTraitsTest, CodeIterator) { 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // to test whether there's compilation error for const template 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for (llvm::iplist<Node>::const_iterator I = m_pNodeList.begin(), 10337b74a387bb3993387029859c2d9d051c41c724eStephen Hines E = m_pNodeList.end(); 10437b74a387bb3993387029859c2d9d051c41c724eStephen Hines I != E; 10537b74a387bb3993387029859c2d9d051c41c724eStephen Hines I++) 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao I->getValue(); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 10937b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_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 11537b74a387bb3993387029859c2d9d051c41c724eStephen HinesTEST_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