//===- GCFactoryListTraitsTest.h ------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_GC_FACTORY_LIST_TRAITS_TEST_H #define MCLD_GC_FACTORY_LIST_TRAITS_TEST_H #include <gtest.h> #include <mcld/Support/GCFactoryListTraits.h> #include <llvm/ADT/ilist_node.h> #include <mcld/Support/GCFactory.h> namespace mcldtest { /** \class GCFactoryListTraitsTest * \brief * * \see GCFactoryListTraits */ class GCFactoryListTraitsTest : public ::testing::Test { public: /** \class GCFactoryListTraitsTest * \brief Node used in the test * */ class NodeFactory; class Node : public llvm::ilist_node<Node> { friend class NodeFactory; private: unsigned m_Init; unsigned m_Value; public: Node() : m_Init(0), m_Value(0) { } Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) { } unsigned getInitialValue() const { return m_Init; } inline unsigned getValue() const { return m_Value; } inline void setValue(unsigned pValue) { m_Value = pValue; } }; class NodeFactory : public mcld::GCFactory<Node, 0> { public: NodeFactory() : mcld::GCFactory<Node, 0>(16) { } Node *produce(unsigned pInit) { Node *result = allocate(); new (result) Node(pInit); return result; } }; // Constructor can do set-up work for all test here. GCFactoryListTraitsTest(); // Destructor can do clean-up work that doesn't throw exceptions here. virtual ~GCFactoryListTraitsTest(); // SetUp() will be called immediately before each test. virtual void SetUp(); // TearDown() will be called immediately after each test. virtual void TearDown(); const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() const { return m_pNodeList; } llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() { return m_pNodeList; } protected: NodeFactory m_NodeFactory; Node **m_pNodesAlloc; llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > m_pNodeList; }; } // namespace of mcldtest #endif