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