15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- GCFactoryListTraitsTest.h ------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_GC_FACTORY_LIST_TRAITS_TEST_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_GC_FACTORY_LIST_TRAITS_TEST_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactoryListTraits.h"
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/ilist_node.h>
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h"
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcldtest {
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class GCFactoryListTraitsTest
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \see GCFactoryListTraits
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass GCFactoryListTraitsTest : public ::testing::Test {
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /** \class GCFactoryListTraitsTest
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  *   \brief Node used in the test
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  *
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  */
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NodeFactory;
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  class Node : public llvm::ilist_node<Node> {
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    friend class NodeFactory;
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines
3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines   private:
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    unsigned m_Init;
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    unsigned m_Value;
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines   public:
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    Node() : m_Init(0), m_Value(0) {}
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines    Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) {}
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines    unsigned getInitialValue() const { return m_Init; }
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines    inline unsigned getValue() const { return m_Value; }
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines    inline void setValue(unsigned pValue) { m_Value = pValue; }
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  class NodeFactory : public mcld::GCFactory<Node, 0> {
5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines   public:
5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines    NodeFactory() : mcld::GCFactory<Node, 0>(16) {}
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines    Node* produce(unsigned pInit) {
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines      Node* result = allocate();
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      new (result) Node(pInit);
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return result;
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  };
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  // Constructor can do set-up work for all test here.
6637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  GCFactoryListTraitsTest();
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  // Destructor can do clean-up work that doesn't throw exceptions here.
6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  virtual ~GCFactoryListTraitsTest();
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  // SetUp() will be called immediately before each test.
7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  virtual void SetUp();
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  // TearDown() will be called immediately after each test.
7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  virtual void TearDown();
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
7737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> >& getNodeList()
7837b74a387bb3993387029859c2d9d051c41c724eStephen Hines      const {
7937b74a387bb3993387029859c2d9d051c41c724eStephen Hines    return m_pNodeList;
8037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  }
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  llvm::iplist<Node, mcld::GCFactoryListTraits<Node> >& getNodeList() {
8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    return m_pNodeList;
8437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  }
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines protected:
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  NodeFactory m_NodeFactory;
8837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  Node** m_pNodesAlloc;
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > m_pNodeList;
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace of mcldtest
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
96