diff options
Diffstat (limited to 'EASTL/test/source/TestVectorMap.cpp')
-rw-r--r-- | EASTL/test/source/TestVectorMap.cpp | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/EASTL/test/source/TestVectorMap.cpp b/EASTL/test/source/TestVectorMap.cpp new file mode 100644 index 0000000..ca400ed --- /dev/null +++ b/EASTL/test/source/TestVectorMap.cpp @@ -0,0 +1,235 @@ +///////////////////////////////////////////////////////////////////////////// +// 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; +} + + + + + + + + + + + + |