//===- LinearAllocatorTest.h ----------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef LINEAR_ALLOCATOR_TEST_H
#define LINEAR_ALLOCATOR_TEST_H

#include <gtest.h>
#include "mcld/Support/Allocators.h"

namespace mcldtest
{

/** \class LinearAllocatorTest
 *  \brief The testcase for LinearAllocator
 *
 *  \see LinearAllocator 
 */
class LinearAllocatorTest : public ::testing::Test
{
public:
	struct Data {
		Data()
		: one(1), two(2), three(3), four(4)
		{ }

		Data( unsigned int pOne, unsigned int pTwo, unsigned char pThree, unsigned char pFour)
		{
			one = pOne;
			two = pTwo;
			three = pThree;
			four = pFour;
		}

		~Data()
		{
			one = -1;
			two = -2;
			three = -3;
			four = -4;
		}

		unsigned int one;
		unsigned int two;
		unsigned char three;
		unsigned char four;
	};
public:
	// Constructor can do set-up work for all test here.
	LinearAllocatorTest();

	// Destructor can do clean-up work that doesn't throw exceptions here.
	virtual ~LinearAllocatorTest();

	// SetUp() will be called immediately before each test.
	virtual void SetUp();

	// TearDown() will be called immediately after each test.
	virtual void TearDown();

protected:
	enum TemplateArgsType { CHUNK_SIZE = 32 };
	typedef mcld::LinearAllocator<Data, CHUNK_SIZE> Alloc;
protected:
	Alloc* m_pTestee;
};

} // namespace of mcldtest

#endif

