GCFactoryListTraitsTest.h revision 5460a1f25d9ddecb5c70667267d66d51af177a99
1//===- GCFactoryListTraitsTest.h ------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_GC_FACTORY_LIST_TRAITS_TEST_H 10#define MCLD_GC_FACTORY_LIST_TRAITS_TEST_H 11 12#include <gtest.h> 13 14#include <mcld/Support/GCFactoryListTraits.h> 15 16#include <llvm/ADT/ilist_node.h> 17 18#include <mcld/Support/GCFactory.h> 19 20namespace mcldtest 21{ 22 23/** \class GCFactoryListTraitsTest 24 * \brief 25 * 26 * \see GCFactoryListTraits 27 */ 28class GCFactoryListTraitsTest : public ::testing::Test 29{ 30public: 31 /** \class GCFactoryListTraitsTest 32 * \brief Node used in the test 33 * 34 */ 35 class NodeFactory; 36 37 class Node : public llvm::ilist_node<Node> 38 { 39 friend class NodeFactory; 40 private: 41 unsigned m_Init; 42 unsigned m_Value; 43 44 private: 45 Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) { } 46 47 public: 48 unsigned getInitialValue() const { 49 return m_Init; 50 } 51 52 inline unsigned getValue() const 53 { return m_Value; } 54 55 inline void setValue(unsigned pValue) 56 { m_Value = pValue; } 57 }; 58 59 class NodeFactory : public mcld::GCFactory<Node, 0> { 60 public: 61 NodeFactory() : mcld::GCFactory<Node, 0>(16) { } 62 63 Node *produce(unsigned pInit) { 64 Node *result = allocate(); 65 new (result) Node(pInit); 66 return result; 67 } 68 }; 69 70 // Constructor can do set-up work for all test here. 71 GCFactoryListTraitsTest(); 72 73 // Destructor can do clean-up work that doesn't throw exceptions here. 74 virtual ~GCFactoryListTraitsTest(); 75 76 // SetUp() will be called immediately before each test. 77 virtual void SetUp(); 78 79 // TearDown() will be called immediately after each test. 80 virtual void TearDown(); 81 82 const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() const 83 { return m_pNodeList; } 84 85 llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() 86 { return m_pNodeList; } 87 88protected: 89 NodeFactory m_NodeFactory; 90 Node **m_pNodesAlloc; 91 92 llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > m_pNodeList; 93}; 94 95} // namespace of mcldtest 96 97#endif 98 99