aboutsummaryrefslogtreecommitdiff
path: root/test/source/TestFixedMap.cpp
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2021-04-08 16:43:58 +0200
committerToni Uhlig <matzeton@googlemail.com>2021-04-08 16:43:58 +0200
commite59cf7b09e7388d369e8d2bf73501cde79c28708 (patch)
tree6099307032bb86f4a969721f9ac447d3d1be67d4 /test/source/TestFixedMap.cpp
Squashed 'EASTL/' content from commit fad5471
git-subtree-dir: EASTL git-subtree-split: fad54717f8e4ebb13b20095da7efd07a53af0f10
Diffstat (limited to 'test/source/TestFixedMap.cpp')
-rw-r--r--test/source/TestFixedMap.cpp185
1 files changed, 185 insertions, 0 deletions
diff --git a/test/source/TestFixedMap.cpp b/test/source/TestFixedMap.cpp
new file mode 100644
index 0000000..6df97f0
--- /dev/null
+++ b/test/source/TestFixedMap.cpp
@@ -0,0 +1,185 @@
+/////////////////////////////////////////////////////////////////////////////
+// Copyright (c) Electronic Arts Inc. All rights reserved.
+/////////////////////////////////////////////////////////////////////////////
+
+
+#include "EASTLTest.h"
+#include "TestMap.h"
+#include <EASTL/fixed_map.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::fixed_map <int, float, 1>;
+template class eastl::fixed_multimap<float, int, 1>;
+template class eastl::fixed_map <int, TestObject, 1>;
+template class eastl::fixed_multimap<TestObject, int, 1>;
+
+template class eastl::fixed_map <int, float, 1, true, eastl::less<int>, MallocAllocator>;
+template class eastl::fixed_multimap<float, int, 1, true, eastl::less<float>, MallocAllocator>;
+template class eastl::fixed_map <int, TestObject, 1, true, eastl::less<int>, MallocAllocator>;
+template class eastl::fixed_multimap<TestObject, int, 1, true, eastl::less<TestObject>, MallocAllocator>;
+
+
+///////////////////////////////////////////////////////////////////////////////
+// typedefs
+//
+ const eastl_size_t kContainerSize = 1000;
+
+typedef eastl::fixed_map<int, int, kContainerSize> VM1;
+typedef eastl::fixed_map<TestObject, TestObject, kContainerSize> VM4;
+typedef eastl::fixed_multimap<int, int, kContainerSize> VMM1;
+typedef eastl::fixed_multimap<TestObject, TestObject, kContainerSize> VMM4;
+
+#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
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+EA_DISABLE_VC_WARNING(6262)
+int TestFixedMap()
+{
+ int nErrorCount = 0;
+
+ #ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
+ { // Test construction
+ nErrorCount += TestMapConstruction<VM1, VM3, false>();
+ nErrorCount += TestMapConstruction<VM4, VM6, false>();
+
+ nErrorCount += TestMapConstruction<VMM1, VMM3, true>();
+ nErrorCount += TestMapConstruction<VMM4, VMM6, true>();
+ }
+
+
+ { // Test mutating functionality.
+ nErrorCount += TestMapMutation<VM1, VM3, false>();
+ nErrorCount += TestMapMutation<VM4, VM6, false>();
+
+ nErrorCount += TestMapMutation<VMM1, VMM3, true>();
+ nErrorCount += TestMapMutation<VMM4, VMM6, true>();
+ }
+ #endif // EA_COMPILER_NO_STANDARD_CPP_LIBRARY
+
+
+ { // Test searching functionality.
+ nErrorCount += TestMapSearch<VM1, false>();
+ nErrorCount += TestMapSearch<VM4, false>();
+
+ nErrorCount += TestMapSearch<VMM1, true>();
+ nErrorCount += TestMapSearch<VMM4, true>();
+ }
+
+
+ {
+ // C++11 emplace and related functionality
+ nErrorCount += TestMapCpp11<eastl::fixed_map<int, TestObject, 32> >();
+
+ nErrorCount += TestMultimapCpp11<eastl::fixed_multimap<int, TestObject, 32> >();
+
+ nErrorCount += TestMapCpp11NonCopyable<eastl::fixed_map<int, NonCopyable, 32>>();
+ }
+
+ {
+ // C++17 try_emplace and related functionality
+ nErrorCount += TestMapCpp17<eastl::fixed_map<int, TestObject, 32>>();
+ }
+
+
+ { // Test functionality specific to fixed size containers.
+
+ VM1 vm1;
+ VMM1 vmm1;
+
+ VERIFY(vm1.max_size() == kContainerSize);
+ VERIFY(vmm1.max_size() == kContainerSize);
+ }
+
+
+ { // Regression of bug report by Eric Turmel, May 20, 2008
+ typedef eastl::fixed_map<int, TestObject, 37, false> FixedMap;
+ VERIFY(FixedMap::kMaxSize == 37);
+
+ FixedMap fixedMap;
+ FixedMap::fixed_allocator_type& a = fixedMap.get_allocator();
+
+ for(int i = 0; i < FixedMap::kMaxSize; i++)
+ {
+ VERIFY(a.can_allocate());
+
+ fixedMap.insert(FixedMap::value_type(i, TestObject(i)));
+
+ #if EASTL_FIXED_SIZE_TRACKING_ENABLED
+ // Disabled because mPool is (mistakenly) inaccessible.
+ // VERIFY((a.mPool.mnCurrentSize == a.mPool.mnPeakSize) && (a.mPool.mnCurrentSize == i));
+ #endif
+ }
+
+ VERIFY(!a.can_allocate());
+ }
+
+ {
+ // Test fixed set with overflow and alignment requirements.
+ typedef fixed_map<Align64, int, 1, true> FixedMapWithAlignment;
+ typedef fixed_multimap<Align64, int, 1, true> FixedMultiMapWithAlignment;
+
+ FixedMapWithAlignment fm;
+ FixedMultiMapWithAlignment fmm;
+
+ Align64 a; a.mX = 1;
+ Align64 b; b.mX = 2;
+ Align64 c; c.mX = 3;
+ Align64 d; d.mX = 4;
+ Align64 e; e.mX = 5;
+
+ fm.insert(a);
+ fm.insert(b);
+ fm.insert(c);
+ fm.insert(d);
+ fm.insert(e);
+ for (FixedMapWithAlignment::const_iterator it = fm.begin(); it != fm.end(); ++it)
+ {
+ const Align64* ptr = &((*it).first);
+ EATEST_VERIFY((uint64_t)ptr % EASTL_ALIGN_OF(Align64) == 0);
+ }
+
+ fmm.insert(a);
+ fmm.insert(b);
+ fmm.insert(c);
+ fmm.insert(d);
+ fmm.insert(e);
+ for (FixedMultiMapWithAlignment::const_iterator it = fmm.begin(); it != fmm.end(); ++it)
+ {
+ const Align64* ptr = &((*it).first);
+ EATEST_VERIFY((uint64_t)ptr % EASTL_ALIGN_OF(Align64) == 0);
+ }
+ }
+
+
+ return nErrorCount;
+}
+EA_RESTORE_VC_WARNING()
+
+
+
+
+
+
+
+
+
+
+
+