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 
20 namespace mcldtest {
21 
22 /** \class GCFactoryListTraitsTest
23  *  \brief
24  *
25  *  \see GCFactoryListTraits
26  */
27 class GCFactoryListTraitsTest : public ::testing::Test {
28  public:
29   /** \class GCFactoryListTraitsTest
30   *   \brief Node used in the test
31   *
32   */
33   class NodeFactory;
34 
35   class Node : public llvm::ilist_node<Node> {
36     friend class NodeFactory;
37 
38    private:
39     unsigned m_Init;
40     unsigned m_Value;
41 
42    public:
Node()43     Node() : m_Init(0), m_Value(0) {}
44 
Node(unsigned pInit)45     Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) {}
46 
getInitialValue()47     unsigned getInitialValue() const { return m_Init; }
48 
getValue()49     inline unsigned getValue() const { return m_Value; }
50 
setValue(unsigned pValue)51     inline void setValue(unsigned pValue) { m_Value = pValue; }
52   };
53 
54   class NodeFactory : public mcld::GCFactory<Node, 0> {
55    public:
NodeFactory()56     NodeFactory() : mcld::GCFactory<Node, 0>(16) {}
57 
produce(unsigned pInit)58     Node* produce(unsigned pInit) {
59       Node* result = allocate();
60       new (result) Node(pInit);
61       return result;
62     }
63   };
64 
65   // Constructor can do set-up work for all test here.
66   GCFactoryListTraitsTest();
67 
68   // Destructor can do clean-up work that doesn't throw exceptions here.
69   virtual ~GCFactoryListTraitsTest();
70 
71   // SetUp() will be called immediately before each test.
72   virtual void SetUp();
73 
74   // TearDown() will be called immediately after each test.
75   virtual void TearDown();
76 
getNodeList()77   const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> >& getNodeList()
78       const {
79     return m_pNodeList;
80   }
81 
getNodeList()82   llvm::iplist<Node, mcld::GCFactoryListTraits<Node> >& getNodeList() {
83     return m_pNodeList;
84   }
85 
86  protected:
87   NodeFactory m_NodeFactory;
88   Node** m_pNodesAlloc;
89 
90   llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > m_pNodeList;
91 };
92 
93 }  // namespace of mcldtest
94 
95 #endif
96