124 lines
4.0 KiB
C++
124 lines
4.0 KiB
C++
//===- GCFactoryListTraitsTest.cpp ----------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "GCFactoryListTraitsTest.h"
|
|
|
|
using namespace mcld;
|
|
using namespace mcldtest;
|
|
|
|
// Constructor can do set-up work for all test here.
|
|
GCFactoryListTraitsTest::GCFactoryListTraitsTest() {
|
|
// Allocate the nodes.
|
|
m_pNodesAlloc = new Node* [10];
|
|
#define ALLOCATE_NODE(i) m_pNodesAlloc[(i)] = m_NodeFactory.produce(i);
|
|
ALLOCATE_NODE(0);
|
|
ALLOCATE_NODE(1);
|
|
ALLOCATE_NODE(2);
|
|
ALLOCATE_NODE(3);
|
|
ALLOCATE_NODE(4);
|
|
ALLOCATE_NODE(5);
|
|
ALLOCATE_NODE(6);
|
|
ALLOCATE_NODE(7);
|
|
ALLOCATE_NODE(8);
|
|
ALLOCATE_NODE(9);
|
|
#undef ALLOCATE_NODE
|
|
}
|
|
|
|
// Destructor can do clean-up work that doesn't throw exceptions here.
|
|
GCFactoryListTraitsTest::~GCFactoryListTraitsTest() {
|
|
}
|
|
|
|
// SetUp() will be called immediately before each test.
|
|
void GCFactoryListTraitsTest::SetUp() {
|
|
// Reset the node value and (re)insert into the iplist.
|
|
for (unsigned i = 0; i < 10; i++) {
|
|
m_pNodesAlloc[i]->setValue(m_pNodesAlloc[i]->getInitialValue());
|
|
m_pNodeList.push_back(m_pNodesAlloc[i]);
|
|
}
|
|
}
|
|
|
|
// TearDown() will be called immediately after each test.
|
|
void GCFactoryListTraitsTest::TearDown() {
|
|
// Erasing of llvm::iplist won't destroy the allocation of the nodes managed
|
|
// by the GCFactory (i.e., NodeFactory.)
|
|
m_pNodeList.clear();
|
|
}
|
|
|
|
//==========================================================================//
|
|
// Testcases
|
|
//
|
|
|
|
#define CHECK_NODE_VALUE(v_) \
|
|
do { \
|
|
ASSERT_TRUE(v_ == it->getValue()); \
|
|
it++; \
|
|
} while (false)
|
|
|
|
#define CHECK_LIST_VALUE(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
|
|
do { \
|
|
llvm::iplist<Node>::const_iterator it = m_pNodeList.begin(); \
|
|
CHECK_NODE_VALUE(v1); \
|
|
CHECK_NODE_VALUE(v2); \
|
|
CHECK_NODE_VALUE(v3); \
|
|
CHECK_NODE_VALUE(v4); \
|
|
CHECK_NODE_VALUE(v5); \
|
|
CHECK_NODE_VALUE(v6); \
|
|
CHECK_NODE_VALUE(v7); \
|
|
CHECK_NODE_VALUE(v8); \
|
|
CHECK_NODE_VALUE(v9); \
|
|
CHECK_NODE_VALUE(v10); \
|
|
} while (false)
|
|
|
|
TEST_F(GCFactoryListTraitsTest, Basic) {
|
|
ASSERT_TRUE(10 == m_pNodeList.size());
|
|
CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, BasicAgain) {
|
|
ASSERT_TRUE(10 == m_pNodeList.size());
|
|
CHECK_LIST_VALUE(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, Clear) {
|
|
m_pNodeList.clear();
|
|
ASSERT_TRUE(0 == m_pNodeList.size());
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, PushThenPop) {
|
|
Node* NewNode = m_NodeFactory.produce(11);
|
|
m_pNodeList.push_back(NewNode);
|
|
ASSERT_TRUE(11 == m_pNodeList.size());
|
|
m_pNodeList.pop_back();
|
|
ASSERT_TRUE(10 == m_pNodeList.size());
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, CodeIterator) {
|
|
// to test whether there's compilation error for const template
|
|
for (llvm::iplist<Node>::const_iterator I = m_pNodeList.begin(),
|
|
E = m_pNodeList.end();
|
|
I != E;
|
|
I++)
|
|
I->getValue();
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, Empty) {
|
|
ASSERT_FALSE(m_pNodeList.empty());
|
|
m_pNodeList.clear();
|
|
ASSERT_TRUE(m_pNodeList.empty());
|
|
}
|
|
|
|
TEST_F(GCFactoryListTraitsTest, EraseAndSize) {
|
|
ASSERT_FALSE(m_pNodeList.empty());
|
|
m_pNodeList.erase(m_pNodeList.begin());
|
|
m_pNodeList.erase(m_pNodeList.begin());
|
|
ASSERT_TRUE(m_pNodeList.size() == 8);
|
|
}
|
|
|
|
#undef CHECK_LIST_VALUE
|
|
#undef CHECK_NODE_VALUE
|