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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/SymbolCategory.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/ResolveInfo.h" 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#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// Constructor can do set-up work for all test here. 2037b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategoryTest::SymbolCategoryTest() { 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // create testee. modify it if need 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee = new SymbolCategory(); 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here. 2637b74a387bb3993387029859c2d9d051c41c724eStephen HinesSymbolCategoryTest::~SymbolCategoryTest() { 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao delete m_pTestee; 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test. 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid SymbolCategoryTest::SetUp() { 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test. 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid SymbolCategoryTest::TearDown() { 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================// 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F(SymbolCategoryTest, upward_test) { 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* a = ResolveInfo::Create("a"); 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* b = ResolveInfo::Create("b"); 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* c = ResolveInfo::Create("c"); 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* d = ResolveInfo::Create("d"); 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* e = ResolveInfo::Create("e"); 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao e->setBinding(ResolveInfo::Global); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao d->setBinding(ResolveInfo::Weak); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao c->setDesc(ResolveInfo::Common); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao c->setBinding(ResolveInfo::Global); 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao b->setBinding(ResolveInfo::Local); 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao a->setType(ResolveInfo::File); 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* aa = LDSymbol::Create(*a); 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* bb = LDSymbol::Create(*b); 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* cc = LDSymbol::Create(*c); 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* dd = LDSymbol::Create(*d); 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* ee = LDSymbol::Create(*e); 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*ee); 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*dd); 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*cc); 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*bb); 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*aa); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SymbolCategory::iterator sym = m_pTestee->begin(); 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++sym; 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(1 == m_pTestee->numOfLocals()); 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(1 == m_pTestee->numOfCommons()); 806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ASSERT_TRUE(2 == m_pTestee->numOfDynamics()); 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_TRUE(5 == m_pTestee->numOfSymbols()); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesTEST_F(SymbolCategoryTest, change_local_to_dynamic) { 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* a = ResolveInfo::Create("a"); 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* b = ResolveInfo::Create("b"); 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* c = ResolveInfo::Create("c"); 8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* d = ResolveInfo::Create("d"); 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ResolveInfo* e = ResolveInfo::Create("e"); 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao a->setBinding(ResolveInfo::Local); 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao b->setBinding(ResolveInfo::Local); 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao c->setBinding(ResolveInfo::Local); 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setDesc(ResolveInfo::Common); 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setBinding(ResolveInfo::Global); 9622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao e->setBinding(ResolveInfo::Global); 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* aa = LDSymbol::Create(*a); 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* bb = LDSymbol::Create(*b); 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* cc = LDSymbol::Create(*c); 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* dd = LDSymbol::Create(*d); 10222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSymbol* ee = LDSymbol::Create(*e); 10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao a->setSymPtr(aa); 10522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao b->setSymPtr(bb); 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao c->setSymPtr(cc); 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao d->setSymPtr(dd); 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao e->setSymPtr(ee); 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*ee); 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*dd); 11222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*cc); 11322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*bb); 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pTestee->add(*aa); 11522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao SymbolCategory::iterator sym = m_pTestee->begin(); 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 12022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 12222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 12522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 12622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 127f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines m_pTestee->changeToDynamic(*bb); 12822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sym = m_pTestee->begin(); 13022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("c", (*sym)->name()); 13122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("a", (*sym)->name()); 13322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("b", (*sym)->name()); 13522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("d", (*sym)->name()); 13722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ++sym; 13822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao ASSERT_STREQ("e", (*sym)->name()); 13922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 140