mirror of
https://github.com/grumpycoders/pcsx-redux.git
synced 2025-04-02 10:41:54 -04:00
194 lines
4.8 KiB
C++
194 lines
4.8 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (c) Electronic Arts Inc. All rights reserved.
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "EASTLBenchmark.h"
|
|
#include "EASTLTest.h"
|
|
#if !EASTL_OPENSOURCE
|
|
#include <PPMalloc/EAGeneralAllocatorDebug.h>
|
|
#endif
|
|
#include <EAStdC/EASprintf.h>
|
|
#include <EAStdC/EAStopwatch.h>
|
|
#include <EAStdC/EAString.h>
|
|
#include <EASTL/internal/config.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
EA_DISABLE_VC_WARNING(4946)
|
|
#include "EAMain/EAEntryPointMain.inl"
|
|
#include "EASTLTestAllocator.h"
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// gpEAGeneralAllocator / gpEAGeneralAllocatorDebug
|
|
//
|
|
#if !EASTL_OPENSOURCE
|
|
namespace EA
|
|
{
|
|
namespace Allocator
|
|
{
|
|
#ifdef EA_DEBUG
|
|
extern GeneralAllocatorDebug gGeneralAllocator;
|
|
extern PPM_API GeneralAllocatorDebug* gpEAGeneralAllocatorDebug;
|
|
#else
|
|
extern GeneralAllocator gGeneralAllocator;
|
|
extern PPM_API GeneralAllocator* gpEAGeneralAllocator;
|
|
#endif
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Required by EASTL.
|
|
//
|
|
#if !defined(EASTL_EASTDC_VSNPRINTF) || !EASTL_EASTDC_VSNPRINTF
|
|
int Vsnprintf8(char8_t* pDestination, size_t n, const char8_t* pFormat, va_list arguments)
|
|
{
|
|
return EA::StdC::Vsnprintf(pDestination, n, pFormat, arguments);
|
|
}
|
|
|
|
int Vsnprintf16(char16_t* pDestination, size_t n, const char16_t* pFormat, va_list arguments)
|
|
{
|
|
return EA::StdC::Vsnprintf(pDestination, n, pFormat, arguments);
|
|
}
|
|
|
|
#if (EASTDC_VERSION_N >= 10600)
|
|
int Vsnprintf32(char32_t* pDestination, size_t n, const char32_t* pFormat, va_list arguments)
|
|
{
|
|
return EA::StdC::Vsnprintf(pDestination, n, pFormat, arguments);
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// main
|
|
//
|
|
int EAMain(int argc, char* argv[])
|
|
{
|
|
bool bWaitAtEnd = false;
|
|
bool bPrintHelp = false;
|
|
int nOptionCount = 0;
|
|
int nErrorCount = 0;
|
|
|
|
EA::EAMain::PlatformStartup();
|
|
EA::EAMain::SetVerbosity(2); // Default value.
|
|
|
|
// Set up debug parameters.
|
|
#ifdef EA_DEBUG
|
|
// Only enable this temporarily to help find any problems you might find.
|
|
// EA::Allocator::gpEAGeneralAllocatorDebug->SetAutoHeapValidation(EA::Allocator::GeneralAllocator::kHeapValidationLevelBasic, 16);
|
|
#endif
|
|
|
|
// Parse command line arguments
|
|
for(int i = 1; i < argc; i++)
|
|
{
|
|
if(strstr(argv[i], "-w") == argv[i])
|
|
{
|
|
bWaitAtEnd = true;
|
|
nOptionCount++;
|
|
}
|
|
else if(strstr(argv[i], "-v") == argv[i])
|
|
{
|
|
uint32_t verbosity = EA::StdC::AtoU32(argv[i] + 3);
|
|
EA::EAMain::SetVerbosity(verbosity);
|
|
nOptionCount++;
|
|
}
|
|
else if(strstr(argv[i], "-l:") == argv[i])
|
|
{
|
|
gEASTL_TestLevel = atoi(argv[i] + 3);
|
|
if(gEASTL_TestLevel < kEASTL_TestLevelLow)
|
|
gEASTL_TestLevel = kEASTL_TestLevelLow;
|
|
else if(gEASTL_TestLevel > kEASTL_TestLevelHigh)
|
|
gEASTL_TestLevel = kEASTL_TestLevelHigh;
|
|
nOptionCount++;
|
|
}
|
|
else if(strstr(argv[i], "-s:") == argv[i])
|
|
{
|
|
uint32_t seed = (eastl_size_t)atoi(argv[i] + 3);
|
|
EA::UnitTest::SetRandSeed(seed);
|
|
nOptionCount++;
|
|
}
|
|
else if((strstr(argv[i], "-?") == argv[i]) || (strstr(argv[i], "-h") == argv[i]))
|
|
{
|
|
bPrintHelp = true;
|
|
nOptionCount++;
|
|
}
|
|
}
|
|
|
|
// Print user help.
|
|
if(!bPrintHelp)
|
|
bPrintHelp = (nOptionCount == 0);
|
|
|
|
if(bPrintHelp)
|
|
{
|
|
EASTLTest_Printf("Options\n");
|
|
EASTLTest_Printf(" -w Wait at end.\n");
|
|
EASTLTest_Printf(" -l:N Test level in range of [1, 10]. 10 means maximum testing.\n");
|
|
EASTLTest_Printf(" -s:N Specify a randomization seed. 0 is default and means use clock.\n");
|
|
EASTLTest_Printf(" -? Show help.\n");
|
|
}
|
|
|
|
|
|
// Set up test information
|
|
Benchmark::Environment& environment = Benchmark::GetEnvironment();
|
|
environment.msPlatform = EA_PLATFORM_DESCRIPTION;
|
|
environment.msSTLName1 = GetStdSTLName();
|
|
environment.msSTLName2 = "EASTL";
|
|
|
|
|
|
// Run tests
|
|
#ifndef EA_DEBUG
|
|
EA::UnitTest::SetHighThreadPriority();
|
|
#endif
|
|
|
|
EA::StdC::Stopwatch stopwatch(EA::StdC::Stopwatch::kUnitsSeconds, true); // Measure seconds, start the counting immediately.
|
|
|
|
BenchmarkAlgorithm();
|
|
BenchmarkList();
|
|
BenchmarkString();
|
|
BenchmarkVector();
|
|
BenchmarkDeque();
|
|
BenchmarkSet();
|
|
BenchmarkMap();
|
|
BenchmarkHash();
|
|
BenchmarkHeap();
|
|
BenchmarkBitset();
|
|
BenchmarkSort();
|
|
BenchmarkTupleVector();
|
|
|
|
stopwatch.Stop();
|
|
|
|
#ifndef EA_DEBUG
|
|
EA::UnitTest::SetNormalThreadPriority();
|
|
#endif
|
|
|
|
Benchmark::PrintResults();
|
|
|
|
eastl::string sClockTime;
|
|
Benchmark::WriteTime(stopwatch.GetElapsedTime(), sClockTime);
|
|
|
|
EASTLTest_Printf("Time to complete all tests: %s.\n", sClockTime.c_str());
|
|
|
|
// Done
|
|
if(bWaitAtEnd)
|
|
{
|
|
EASTLTest_Printf("\nPress any key to exit.\n");
|
|
getchar(); // Wait for the user and shutdown
|
|
}
|
|
|
|
EA::EAMain::PlatformShutdown(nErrorCount);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|