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/** \class GCFactoryListTraitsTest
23 *  \brief
24 *
25 *  \see GCFactoryListTraits
26 */
27class 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:
43    Node() : m_Init(0), m_Value(0) {}
44
45    Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) {}
46
47    unsigned getInitialValue() const { return m_Init; }
48
49    inline unsigned getValue() const { return m_Value; }
50
51    inline void setValue(unsigned pValue) { m_Value = pValue; }
52  };
53
54  class NodeFactory : public mcld::GCFactory<Node, 0> {
55   public:
56    NodeFactory() : mcld::GCFactory<Node, 0>(16) {}
57
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
77  const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> >& getNodeList()
78      const {
79    return m_pNodeList;
80  }
81
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