SymbolCategoryTest.cpp revision 6f75755c9204b1d8817ae5a65a2f7e5af0ec3f70
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- implTest.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 <mcld/MC/SymbolCategory.h> 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/ResolveInfo.h> 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSymbol.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <iostream> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "SymbolCategoryTest.h" 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace std; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest; 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here. 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategoryTest::SymbolCategoryTest() 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // create testee. modify it if need 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee = new SymbolCategory(); 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategoryTest::~SymbolCategoryTest() 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao delete m_pTestee; 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid SymbolCategoryTest::SetUp() 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid SymbolCategoryTest::TearDown() 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(SymbolCategoryTest, upward_test) { 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* a = ResolveInfo::Create("a"); 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* b = ResolveInfo::Create("b"); 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* c = ResolveInfo::Create("c"); 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* d = ResolveInfo::Create("d"); 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* e = ResolveInfo::Create("e"); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao e->setBinding(ResolveInfo::Global); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao d->setBinding(ResolveInfo::Weak); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao c->setDesc(ResolveInfo::Common); 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao c->setBinding(ResolveInfo::Global); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao b->setBinding(ResolveInfo::Local); 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao a->setType(ResolveInfo::File); 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* aa = LDSymbol::Create(*a); 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* bb = LDSymbol::Create(*b); 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* cc = LDSymbol::Create(*c); 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* dd = LDSymbol::Create(*d); 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* ee = LDSymbol::Create(*e); 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*ee); 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*dd); 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*cc); 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*bb); 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*aa); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SymbolCategory::iterator sym = m_pTestee->begin(); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(1 == m_pTestee->numOfLocals()); 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(1 == m_pTestee->numOfCommons()); 856f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(2 == m_pTestee->numOfDynamics()); 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(5 == m_pTestee->numOfSymbols()); 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesTEST_F(SymbolCategoryTest, change_local_to_dynamic) { 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* a = ResolveInfo::Create("a"); 9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* b = ResolveInfo::Create("b"); 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* c = ResolveInfo::Create("c"); 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* d = ResolveInfo::Create("d"); 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* e = ResolveInfo::Create("e"); 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao a->setBinding(ResolveInfo::Local); 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao b->setBinding(ResolveInfo::Local); 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao c->setBinding(ResolveInfo::Local); 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setDesc(ResolveInfo::Common); 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setBinding(ResolveInfo::Global); 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao e->setBinding(ResolveInfo::Global); 10222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* aa = LDSymbol::Create(*a); 10422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* bb = LDSymbol::Create(*b); 10522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* cc = LDSymbol::Create(*c); 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* dd = LDSymbol::Create(*d); 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* ee = LDSymbol::Create(*e); 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao a->setSymPtr(aa); 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao b->setSymPtr(bb); 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao c->setSymPtr(cc); 11222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setSymPtr(dd); 11322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao e->setSymPtr(ee); 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*ee); 11622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*dd); 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*cc); 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*bb); 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*aa); 12022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao SymbolCategory::iterator sym = m_pTestee->begin(); 12222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 12522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 12722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 12922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 13122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pTestee->changeLocalToDynamic(*bb); 13322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 13422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sym = m_pTestee->begin(); 13522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 13622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 13822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 14022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 14122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 14222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 14322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 14422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 145