15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- InputTreeTest.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//===----------------------------------------------------------------------===// 9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include "mcld/MC/InputTree.h" 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/MC/MCLDInfo.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <InputTreeTest.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTreeTest::InputTreeTest() 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // create testee. modify it if need 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pAttr = new mcld::AttributeFactory(2); 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pAlloc = new mcld::InputFactory(10, *m_pAttr); 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee = new InputTree(*m_pAlloc); 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInputTreeTest::~InputTreeTest() 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pTestee; 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pAlloc; 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pAttr; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid InputTreeTest::SetUp() 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid InputTreeTest::TearDown() 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( InputTreeTest, Basic_operation ) { 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::iterator node = m_pTestee->root(); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Inclusive>(node, "FileSpec", "path1"); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::const_iterator const_node = node; 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(isGroup(node)); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(isGroup(const_node)); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->hasInput()); 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_EQ(1, m_pTestee->numOfInputs()); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao --node; 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->enterGroup(node, InputTree::Downward); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::const_iterator const_node2 = node; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(node.isRoot()); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(isGroup(node)); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(isGroup(const_node2)); 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->hasInput()); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pTestee->numOfInputs()==0); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->size()==2); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( InputTreeTest, forLoop_TEST ) { 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::iterator node = m_pTestee->root(); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Inclusive>(node, "FileSpec", "path1"); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::const_iterator const_node = node; 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao --node; 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for(int i=0 ; i<100 ; ++i) 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Inclusive>(node,"FileSpec", "path1"); 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++node; 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->enterGroup(node, InputTree::Downward); 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao --node; 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(node.isRoot()); 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(isGroup(node)); 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->hasInput()); 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(m_pTestee->numOfInputs()==100); 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->size()==102); 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( InputTreeTest, Nesting_Case ) { 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::iterator node = m_pTestee->root(); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao for(int i=0 ; i<50 ; ++i) 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->enterGroup(node, InputTree::Downward); 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao --node; 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert(node, InputTree::Afterward, "FileSpec", "path1"); 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++node; 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(node.isRoot()); 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_FALSE(isGroup(node)); 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->hasInput()); 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->numOfInputs()==50); 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(m_pTestee->size()==100); 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( InputTreeTest, DFSIterator_BasicTraversal) 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::iterator node = m_pTestee->root(); 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Inclusive>(node, "111", "/"); 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao node.move<InputTree::Inclusive>(); 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Positional>(node, "10", "/"); 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->enterGroup<InputTree::Inclusive>(node); 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao node.move<InputTree::Inclusive>(); 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Inclusive>(node, "7", "/"); 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pTestee->insert<InputTree::Positional>(node, "8", "/"); 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::dfs_iterator dfs_it = m_pTestee->dfs_begin(); 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree::dfs_iterator dfs_end = m_pTestee->dfs_end(); 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("111", (*dfs_it)->name().c_str()); 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++dfs_it; 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("7", (**dfs_it).name().c_str()); 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++dfs_it; 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("8", (**dfs_it).name().c_str()); 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++dfs_it; 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("10", (**dfs_it).name().c_str()); 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++dfs_it; 1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_TRUE(dfs_it == dfs_end); 1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 144