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