#include <windows.h>
#include "gtest/gtest.h"
#include <vector>
#include "../MemoryPool/Chunk.hpp"
#ifdef _DEBUG
#pragma comment(lib, "gtestd.lib")
#pragma comment(lib, "gtest_maind.lib")
#else
#pragma comment(lib, "gtest.lib")
#pragma comment(lib, "gtest_main.lib")
#endif
class BaseFixture : public testing::Test
{
protected:
virtual void SetUp()
{
startTime_ = ::GetTickCount();
}
virtual void TearDown()
{
HANDLE stdOut = ::GetStdHandle( STD_OUTPUT_HANDLE );
::SetConsoleTextAttribute( stdOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY );
std::cout << "[ RUN TIME ] ";
::SetConsoleTextAttribute( stdOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
std::cout << GetTestName() << " : " << ::GetTickCount() - startTime_ << "ms" << std::endl;
// ::CloseHandle( stdOut );
}
std::string GetTestName()
{
const testing::TestInfo* testInfo = testing::UnitTest::GetInstance()->current_test_info();
std::string testName( testInfo->test_case_name() );
testName.reserve( testName.size() * 3 );
testName.append( "." );
testName.append( testInfo->name() );
return testName;
}
private:
unsigned long startTime_;
};
using namespace Lock;
using namespace Pool;
typedef std::vector<void*> PointerArray;
TEST_F( ChunkTest, Create )
{
Chunk<int> chunk;
EXPECT_EQ( false, chunk.empty() );
EXPECT_EQ( 128, chunk.availableSize() );
}
TEST_F( ChunkTest, Allocate )
{
Chunk<int> chunk;
void* pointer = chunk.allocate();
EXPECT_EQ( false, pointer == NULL );
EXPECT_EQ( true, chunk.isAllocate( pointer ) );
EXPECT_EQ( false, chunk < pointer );
EXPECT_EQ( false, pointer < chunk );
}
TEST_F( ChunkTest, Deallocate )
{
Chunk<int> chunk;
for( int i = 0; i < 100; ++i )
{
void* pointer = chunk.allocate();
EXPECT_EQ( false, pointer == NULL );
EXPECT_EQ( true, chunk.isAllocate( pointer ) );
EXPECT_EQ( false, chunk < pointer );
EXPECT_EQ( false, pointer < chunk );
chunk.deallocate( pointer );
}
EXPECT_EQ( 128, chunk.availableSize() );
PointerArray array;
array.reserve( 128 );
for( int i = 0; i < 128; ++i )
{
void* pointer = chunk.allocate();
EXPECT_EQ( false, pointer == NULL );
EXPECT_EQ( true, chunk.isAllocate( pointer ) );
EXPECT_EQ( false, chunk < pointer );
EXPECT_EQ( false, pointer < chunk );
array.push_back( pointer );
}
EXPECT_EQ( true, chunk.empty() );
EXPECT_EQ( 0, chunk.availableSize() );
PointerArray::iterator pos, end = array.end();
for( pos = array.begin(); pos != end; ++pos )
{
chunk.deallocate( *pos );
}
EXPECT_EQ( 128, chunk.availableSize() );
}
int _tmain(int argc, _TCHAR* argv[])
{
testing::InitGoogleTest( &argc, argv );
return RUN_ALL_TESTS();
}