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 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/GCFactoryListTraits.h> 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/ilist_node.h> 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/GCFactory.h> 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcldtest 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class GCFactoryListTraitsTest 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \see GCFactoryListTraits 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GCFactoryListTraitsTest : public ::testing::Test 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /** \class GCFactoryListTraitsTest 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Node used in the test 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NodeFactory; 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class Node : public llvm::ilist_node<Node> 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao friend class NodeFactory; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao private: 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned m_Init; 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned m_Value; 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao public: 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Node() : m_Init(0), m_Value(0) { } 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Node(unsigned pInit) : m_Init(pInit), m_Value(pInit) { } 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned getInitialValue() const { 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_Init; 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline unsigned getValue() const 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Value; } 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao inline void setValue(unsigned pValue) 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_Value = pValue; } 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao class NodeFactory : public mcld::GCFactory<Node, 0> { 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao public: 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NodeFactory() : mcld::GCFactory<Node, 0>(16) { } 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Node *produce(unsigned pInit) { 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Node *result = allocate(); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao new (result) Node(pInit); 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return result; 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Constructor can do set-up work for all test here. 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao GCFactoryListTraitsTest(); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // Destructor can do clean-up work that doesn't throw exceptions here. 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~GCFactoryListTraitsTest(); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // SetUp() will be called immediately before each test. 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void SetUp(); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // TearDown() will be called immediately after each test. 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual void TearDown(); 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() const 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pNodeList; } 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > &getNodeList() 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pNodeList; } 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected: 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao NodeFactory m_NodeFactory; 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Node **m_pNodesAlloc; 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::iplist<Node, mcld::GCFactoryListTraits<Node> > m_pNodeList; 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcldtest 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 100