GCFactoryListTraitsTest.cpp revision 5460a1f25d9ddecb5c70667267d66d51af177a99
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- GCFactoryListTraitsTest.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 "GCFactoryListTraitsTest.h"
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcldtest;
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Constructor can do set-up work for all test here.
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoGCFactoryListTraitsTest::GCFactoryListTraitsTest()
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // Allocate the nodes.
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodesAlloc = new Node* [10];
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define ALLOCATE_NODE(i) m_pNodesAlloc[(i)] = m_NodeFactory.produce(i);
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(0);
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(1);
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(2);
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(3);
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(4);
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(5);
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(6);
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(7);
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(8);
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ALLOCATE_NODE(9);
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef ALLOCATE_NODE
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here.
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoGCFactoryListTraitsTest::~GCFactoryListTraitsTest()
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SetUp() will be called immediately before each test.
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GCFactoryListTraitsTest::SetUp()
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // Reset the node value and (re)insert into the iplist.
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (unsigned i = 0; i < 10; i++) {
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    m_pNodesAlloc[i]->setValue(m_pNodesAlloc[i]->getInitialValue());
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    m_pNodeList.push_back(m_pNodesAlloc[i]);
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// TearDown() will be called immediately after each test.
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid GCFactoryListTraitsTest::TearDown()
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // Erasing of llvm::iplist won't destroy the allocation of the nodes managed
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // by the GCFactory (i.e., NodeFactory.)
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.clear();
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================================================================//
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Testcases
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define CHECK_NODE_VALUE(v_) do {  \
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(v_, it->getValue()); \
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  it++; \
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} while (false)
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define CHECK_LIST_VALUE(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) do {  \
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  llvm::iplist<Node>::const_iterator it = m_pNodeList.begin();  \
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v1);   \
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v2);   \
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v3);   \
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v4);   \
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v5);   \
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v6);   \
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v7);   \
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v8);   \
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v9);   \
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_NODE_VALUE(v10);  \
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} while (false)
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Basic) {
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(10, m_pNodeList.size());
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, BasicAgain) {
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(10, m_pNodeList.size());
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Clear) {
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.clear();
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(0, m_pNodeList.size());
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, PushThenPop) {
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Node *NewNode = m_NodeFactory.produce(11);
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.push_back(NewNode);
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(11, m_pNodeList.size());
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.pop_back();
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_EQ(10, m_pNodeList.size());
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, CodeIterator) {
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // to test whether there's compilation error for const template
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (llvm::iplist<Node>::const_iterator I = m_pNodeList.begin(),
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao          E = m_pNodeList.end(); I != E; I++)
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    I->getValue();
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, Empty) {
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_FALSE(m_pNodeList.empty());
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.clear();
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_TRUE(m_pNodeList.empty());
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoTEST_F( GCFactoryListTraitsTest, EraseAndSize) {
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_FALSE(m_pNodeList.empty());
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.erase(m_pNodeList.begin());
1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  m_pNodeList.erase(m_pNodeList.begin());
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ASSERT_TRUE(m_pNodeList.size() == 8);
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef CHECK_LIST_VALUE
1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#undef CHECK_NODE_VALUE
124