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