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