#include "StdAfx.h"
#include "TestCode.h"

CTestCode::CTestCode(void)
{
}

CTestCode::~CTestCode(void)
{
}

DWORD CTestCode::ArrayAccessByIndex(const int repeat, const int arraySize)
{
	ASSERT(arraySize > 0);
	ASSERT(repeat > 0);

	int* data = new int[arraySize];
	m_Dummy.resize(arraySize);

	// 배열 초기화
	for(int i = 0; i < arraySize; ++i)
	{
		data[i] = i;
	}

	// 시작 시간 기록
	DWORD start = GetTickCount();

	for(int j = 0; j < repeat; ++j)
	{
		int max = data[0];
		int min = data[0];
		int sum = 0;

		for(int i = 0; i < arraySize; ++i)
		{
			max = max(data[i], max);
			min = min(data[i], min);
			sum += data[i];
		}

		m_Dummy.push_back(max + min + sum);
	}

	// 종료 시간 기록
	DWORD end = GetTickCount();
	
	return end - start;
}

DWORD CTestCode::ArrayAccessByPtr(const int repeat, const int arraySize)
{
	ASSERT(arraySize > 0);
	ASSERT(repeat > 0);

	int* data = new int[arraySize];
	int* it = data;
	int* itE = data + arraySize;

	m_Dummy.resize(arraySize);
	
	// 배열 초기화
	for(int i = 0; i < arraySize; ++i, ++it)
	{
		*it = i;
	}

	// 시작 시간 기록
	DWORD start = GetTickCount();

	for(int j = 0; j < repeat; ++j)
	{
		int max = data[0];
		int min = data[0];
		int sum = 0;

		for(it = data; it != itE; ++it)
		{
			max = max(*it, max);
			min = min(*it, min);
			sum += *it;
		}

		m_Dummy.push_back(max + min + sum);
	}

	// 종료 시간 기록
	DWORD end = GetTickCount();
	
	return end - start;
}