mirror of
https://github.com/grumpycoders/pcsx-redux.git
synced 2025-04-02 10:41:54 -04:00
235 lines
7.1 KiB
C++
235 lines
7.1 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (c) Electronic Arts Inc. All rights reserved.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "TestMap.h"
|
|
#include "EASTLTest.h"
|
|
#include <EASTL/vector_map.h>
|
|
#include <EASTL/vector_multimap.h>
|
|
#include <EASTL/vector.h>
|
|
#include <EASTL/deque.h>
|
|
#include <EASTL/string.h>
|
|
#include <EASTL/fixed_string.h>
|
|
#include <EASTL/fixed_vector.h>
|
|
#include <EASTL/utility.h>
|
|
|
|
EA_DISABLE_ALL_VC_WARNINGS()
|
|
#ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
|
|
#include <map>
|
|
#endif
|
|
EA_RESTORE_ALL_VC_WARNINGS()
|
|
|
|
using namespace eastl;
|
|
|
|
|
|
// Template instantations.
|
|
// These tell the compiler to compile all the functions for the given class.
|
|
template class eastl::vector_map<int, int>;
|
|
template class eastl::vector_multimap<float, int>;
|
|
template class eastl::vector_map<TestObject, TestObject>;
|
|
template class eastl::vector_multimap<TestObject, TestObject>;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// typedefs
|
|
//
|
|
typedef eastl::vector_map<int, int> VM1;
|
|
typedef eastl::vector_map<int, int, eastl::less<int>, EASTLAllocatorType, eastl::deque<eastl::pair<int, int> > > VM2;
|
|
|
|
typedef eastl::vector_map<TestObject, TestObject> VM4;
|
|
typedef eastl::vector_map<TestObject, TestObject, eastl::less<TestObject>, EASTLAllocatorType, eastl::deque<eastl::pair<TestObject, TestObject> > > VM5;
|
|
|
|
typedef eastl::vector_multimap<int, int> VMM1;
|
|
typedef eastl::vector_multimap<int, int, eastl::less<int>, EASTLAllocatorType, eastl::deque<eastl::pair<int, int> > > VMM2;
|
|
|
|
typedef eastl::vector_multimap<TestObject, TestObject> VMM4;
|
|
typedef eastl::vector_multimap<TestObject, TestObject, eastl::less<TestObject>, EASTLAllocatorType, eastl::deque<eastl::pair<TestObject, TestObject> > > VMM5;
|
|
|
|
#ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
|
|
typedef std::map<int, int> VM3;
|
|
typedef std::map<TestObject, TestObject> VM6;
|
|
typedef std::multimap<int, int> VMM3;
|
|
typedef std::multimap<TestObject, TestObject> VMM6;
|
|
#endif
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
int TestVectorMap()
|
|
{
|
|
int nErrorCount = 0;
|
|
|
|
#ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
|
|
{ // Test construction
|
|
nErrorCount += TestMapConstruction<VM1, VM3, false>();
|
|
nErrorCount += TestMapConstruction<VM2, VM3, false>();
|
|
nErrorCount += TestMapConstruction<VM4, VM6, false>();
|
|
nErrorCount += TestMapConstruction<VM5, VM6, false>();
|
|
|
|
nErrorCount += TestMapConstruction<VMM1, VMM3, true>();
|
|
nErrorCount += TestMapConstruction<VMM2, VMM3, true>();
|
|
nErrorCount += TestMapConstruction<VMM4, VMM6, true>();
|
|
nErrorCount += TestMapConstruction<VMM5, VMM6, true>();
|
|
}
|
|
|
|
|
|
{ // Test mutating functionality.
|
|
nErrorCount += TestMapMutation<VM1, VM3, false>();
|
|
nErrorCount += TestMapMutation<VM2, VM3, false>();
|
|
nErrorCount += TestMapMutation<VM4, VM6, false>();
|
|
nErrorCount += TestMapMutation<VM5, VM6, false>();
|
|
|
|
nErrorCount += TestMapMutation<VMM1, VMM3, true>();
|
|
nErrorCount += TestMapMutation<VMM2, VMM3, true>();
|
|
nErrorCount += TestMapMutation<VMM4, VMM6, true>();
|
|
nErrorCount += TestMapMutation<VMM5, VMM6, true>();
|
|
}
|
|
#endif // EA_COMPILER_NO_STANDARD_CPP_LIBRARY
|
|
|
|
|
|
{ // Test search functionality.
|
|
nErrorCount += TestMapSearch<VM1, false>();
|
|
nErrorCount += TestMapSearch<VM2, false>();
|
|
nErrorCount += TestMapSearch<VM4, false>();
|
|
nErrorCount += TestMapSearch<VM5, false>();
|
|
|
|
nErrorCount += TestMapSearch<VMM1, true>();
|
|
nErrorCount += TestMapSearch<VMM2, true>();
|
|
nErrorCount += TestMapSearch<VMM4, true>();
|
|
nErrorCount += TestMapSearch<VMM5, true>();
|
|
}
|
|
|
|
|
|
{
|
|
// C++11 emplace and related functionality
|
|
nErrorCount += TestMapCpp11<eastl::vector_map<int, TestObject> >();
|
|
nErrorCount += TestMapCpp11<eastl::vector_map<int, TestObject, eastl::less<int>, EASTLAllocatorType, eastl::deque<eastl::pair<int, TestObject> > > >();
|
|
|
|
nErrorCount += TestMultimapCpp11<eastl::vector_multimap<int, TestObject> >();
|
|
nErrorCount += TestMultimapCpp11<eastl::vector_multimap<int, TestObject, eastl::less<int>, EASTLAllocatorType, eastl::deque<eastl::pair<int, TestObject> > > >();
|
|
}
|
|
|
|
|
|
{
|
|
// insert at the upper bound of a range
|
|
VMM1 vmm = {{0, 0}};
|
|
VERIFY(vmm.emplace(0, 0) != vmm.begin());
|
|
}
|
|
|
|
|
|
{ // Misc tests
|
|
|
|
// const key_compare& key_comp() const;
|
|
// key_compare& key_comp();
|
|
VM2 vm;
|
|
const VM2 vmc;
|
|
|
|
const VM2::key_compare& kc = vmc.key_comp();
|
|
vm.key_comp() = kc;
|
|
|
|
// ensure count can be called from a const object
|
|
vmc.count(0);
|
|
}
|
|
|
|
{
|
|
const VMM1 vmm;
|
|
|
|
// ensure count can be called from a const object
|
|
vmm.count(0);
|
|
}
|
|
|
|
{
|
|
// Misc testing
|
|
typedef eastl::fixed_vector<eastl::pair<int, float>, 8> FV;
|
|
typedef eastl::vector_map<int, float, eastl::less<int>, FV::allocator_type, FV> FixedVectorMap;
|
|
|
|
FixedVectorMap fvm;
|
|
|
|
for(int i = FV::kMaxSize - 1; i >= 0; i--)
|
|
fvm.insert(eastl::pair<int, float>(i, (float)i));
|
|
|
|
FixedVectorMap::iterator it = fvm.find(3);
|
|
EATEST_VERIFY(it != fvm.end());
|
|
}
|
|
|
|
{
|
|
// Misc testing
|
|
typedef eastl::fixed_string<char, 16> KeyStringType;
|
|
typedef eastl::fixed_string<char, 24> ValueStringType;
|
|
typedef eastl::pair<ValueStringType, bool> StringMapValueType;
|
|
|
|
typedef eastl::vector_map<KeyStringType, StringMapValueType> StringMapType;
|
|
StringMapType stringMap;
|
|
|
|
stringMap.reserve(20);
|
|
EATEST_VERIFY(stringMap.capacity() == 20);
|
|
|
|
StringMapValueType& v1 = stringMap["abc"];
|
|
EATEST_VERIFY(strlen(v1.first.c_str()) == 0);
|
|
v1.first.clear();
|
|
EATEST_VERIFY(strlen(v1.first.c_str()) == 0);
|
|
|
|
StringMapValueType& v2 = stringMap["def"];
|
|
EATEST_VERIFY(strlen(v2.first.c_str()) == 0);
|
|
v2.first = "def";
|
|
EATEST_VERIFY(strlen(v2.first.c_str()) == 3);
|
|
}
|
|
|
|
{
|
|
// Regression for problem observed in EAWebKit
|
|
typedef eastl::vector_map<eastl::string, void*> TestVectorMap;
|
|
|
|
TestVectorMap tvm;
|
|
|
|
tvm["Parameters"] = NULL;
|
|
tvm["ThemeParameters"] = NULL;
|
|
tvm["CookieInfo"] = NULL;
|
|
tvm["DiskCacheInfo"] = NULL;
|
|
tvm["RamCacheInfo"] = NULL;
|
|
tvm["SSLCert"] = NULL;
|
|
tvm["AllowedDomain"] = NULL;
|
|
}
|
|
|
|
{ // find_as predicate
|
|
{ // vector_map
|
|
eastl::vector_map<string, int> vss = {{"abc", 11}, {"def", 22}, {"ghi", 33}, {"jklmnop", 44},
|
|
{"qrstu", 55}, {"vw", 66}, {"x", 77}, {"yz", 88}};
|
|
VERIFY(vss.find_as("GHI", TestStrCmpI_2()) != vss.end());
|
|
}
|
|
|
|
{ // const vector_map
|
|
const eastl::vector_map<string, int> vss = {{"abc", 11}, {"def", 22}, {"ghi", 33}, {"jklmnop", 44},
|
|
{"qrstu", 55}, {"vw", 66}, {"x", 77}, {"yz", 88}};
|
|
VERIFY(vss.find_as("GHI", TestStrCmpI_2()) != vss.end());
|
|
}
|
|
|
|
// vector_multimap
|
|
{
|
|
eastl::vector_multimap<string, int> vss = {{"abc", 11}, {"def", 22}, {"ghi", 33}, {"jklmnop", 44},
|
|
{"qrstu", 55}, {"vw", 66}, {"x", 77}, {"yz", 88}};
|
|
VERIFY(vss.find_as("GHI", TestStrCmpI_2()) != vss.end());
|
|
}
|
|
|
|
// const vector_multimap
|
|
{
|
|
const eastl::vector_multimap<string, int> vss = {{"abc", 11}, {"def", 22}, {"ghi", 33}, {"jklmnop", 44},
|
|
{"qrstu", 55}, {"vw", 66}, {"x", 77}, {"yz", 88}};
|
|
VERIFY(vss.find_as("GHI", TestStrCmpI_2()) != vss.end());
|
|
}
|
|
}
|
|
|
|
return nErrorCount;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|