aboutsummaryrefslogtreecommitdiff
path: root/test/source/TestSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/source/TestSet.cpp')
-rw-r--r--test/source/TestSet.cpp256
1 files changed, 0 insertions, 256 deletions
diff --git a/test/source/TestSet.cpp b/test/source/TestSet.cpp
deleted file mode 100644
index 9a590c2..0000000
--- a/test/source/TestSet.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-/////////////////////////////////////////////////////////////////////////////
-
-
-#include "TestSet.h"
-#include "EASTLTest.h"
-#include <EASTL/map.h>
-#include <EASTL/set.h>
-#include <EASTL/functional.h>
-#include <EASTL/internal/config.h>
-#include <EABase/eabase.h>
-
-
-EA_DISABLE_ALL_VC_WARNINGS()
-#include <stdio.h>
-
-#ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
- #include <set>
- #include <map>
- #include <algorithm>
-#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::set<int>;
-template class eastl::multiset<float>;
-template class eastl::set<TestObject>;
-template class eastl::multiset<TestObject>;
-
-
-///////////////////////////////////////////////////////////////////////////////
-// typedefs
-//
-typedef eastl::set<int> VS1;
-typedef eastl::set<TestObject> VS4;
-typedef eastl::multiset<int> VMS1;
-typedef eastl::multiset<TestObject> VMS4;
-
-#ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
- typedef std::set<int> VS3;
- typedef std::set<TestObject> VS6;
- typedef std::multiset<int> VMS3;
- typedef std::multiset<TestObject> VMS6;
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////////////////////////
-// xvalue_test
-//
-// Test utility type that sets the class data to known value when its data has
-// has been moved out. This enables us to write tests that verify that the
-// destruction action taken on container elements occured during move operations.
-//
-struct xvalue_test
-{
- static const int MOVED_FROM = -1;
-
- int data = 42;
-
- xvalue_test(int in) : data(in) {}
- ~xvalue_test() = default;
-
- xvalue_test(const xvalue_test& other)
- : data(other.data) {}
-
- xvalue_test& operator=(const xvalue_test& other)
- {
- data = other.data;
- return *this;
- }
-
- xvalue_test(xvalue_test&& other)
- {
- data = other.data;
- other.data = MOVED_FROM;
- }
-
- xvalue_test& operator=(xvalue_test&& other)
- {
- data = other.data;
- other.data = MOVED_FROM;
- return *this;
- }
-
- friend bool operator<(const xvalue_test& rhs, const xvalue_test& lhs)
- { return rhs.data < lhs.data; }
-};
-
-
-
-int TestSet()
-{
- int nErrorCount = 0;
-
- #ifndef EA_COMPILER_NO_STANDARD_CPP_LIBRARY
- { // Test construction
- nErrorCount += TestSetConstruction<VS1, VS3, false>();
- nErrorCount += TestSetConstruction<VS4, VS6, false>();
-
- nErrorCount += TestSetConstruction<VMS1, VMS3, true>();
- nErrorCount += TestSetConstruction<VMS4, VMS6, true>();
- }
-
-
- { // Test mutating functionality.
- nErrorCount += TestSetMutation<VS1, VS3, false>();
- nErrorCount += TestSetMutation<VS4, VS6, false>();
-
- nErrorCount += TestSetMutation<VMS1, VMS3, true>();
- nErrorCount += TestSetMutation<VMS4, VMS6, true>();
- }
- #endif // EA_COMPILER_NO_STANDARD_CPP_LIBRARY
-
-
- { // Test searching functionality.
- nErrorCount += TestSetSearch<VS1, false>();
- nErrorCount += TestSetSearch<VS4, false>();
-
- nErrorCount += TestSetSearch<VMS1, true>();
- nErrorCount += TestSetSearch<VMS4, true>();
- }
-
-
- {
- // C++11 emplace and related functionality
- nErrorCount += TestSetCpp11<eastl::set<TestObject> >();
-
- nErrorCount += TestMultisetCpp11<eastl::multiset<TestObject> >();
- }
-
-
- { // Misc tests
-
- // const key_compare& key_comp() const;
- // key_compare& key_comp();
- VS1 vs;
- const VS1 vsc;
-
- const VS1::key_compare& kc = vsc.key_comp();
- vs.key_comp() = kc;
- }
-
- { // non-const comparator test
- struct my_less
- {
- bool operator()(int a, int b) { return a < b; }
- };
-
- {
- set<int, my_less> a = {0, 1, 2, 3, 4};
- auto i = a.find(42);
- VERIFY(i == a.end());
- }
- }
-
- { // set erase_if tests
- set<int> s = {0, 1, 2, 3, 4};
- auto numErased = eastl::erase_if(s, [](auto i) { return i % 2 == 0;});
- VERIFY((s == set<int>{1,3}));
- VERIFY(numErased == 3);
- }
-
- { // multiset erase_if tests
- multiset<int> s = {0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4};
- auto numErased = eastl::erase_if(s, [](auto i) { return i % 2 == 0;});
- VERIFY((s == multiset<int>{1, 1, 1, 3, 3, 3}));
- VERIFY(numErased == 7);
- }
-
-#if defined(EA_COMPILER_HAS_THREE_WAY_COMPARISON)
- { // Test set <=>
- set<int> s1 = {0, 1, 2, 3, 4};
- set<int> s2 = {4, 3, 2, 1, 0};
- set<int> s3 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
- set<int> s4 = {1, 2, 3, 4, 5, 6};
- set<int> s5 = {9};
-
- VERIFY(s1 == s2);
- VERIFY(s1 != s3);
- VERIFY(s3 > s4);
- VERIFY(s5 > s4);
- VERIFY(s5 > s3);
-
- VERIFY((s1 <=> s2) == 0);
- VERIFY((s1 <=> s3) != 0);
- VERIFY((s3 <=> s4) > 0);
- VERIFY((s5 <=> s4) > 0);
- VERIFY((s5 <=> s3) > 0);
- }
-
- { // Test multiset <=>
- multiset<int> s1 = {0, 0, 0, 1, 1, 2, 3, 3, 4};
- multiset<int> s2 = {4, 3, 3, 2, 1, 1, 0, 0, 0};
- multiset<int> s3 = {1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9};
- multiset<int> s4 = {1, 1, 2, 2, 3, 4, 5, 5, 6};
- multiset<int> s5 = {9};
-
- VERIFY(s1 == s2);
- VERIFY(s1 != s3);
- VERIFY(s3 > s4);
- VERIFY(s5 > s4);
- VERIFY(s5 > s3);
-
- VERIFY((s1 <=> s2) == 0);
- VERIFY((s1 <=> s3) != 0);
- VERIFY((s3 <=> s4) > 0);
- VERIFY((s5 <=> s4) > 0);
- VERIFY((s5 <=> s3) > 0);
- }
-#endif
-
- {
- // user reported regression: ensure container elements are NOT
- // moved from during the eastl::set construction process.
- eastl::vector<xvalue_test> m1 = {{0}, {1}, {2}, {3}, {4}, {5}};
- eastl::set<xvalue_test> m2{m1.begin(), m1.end()};
-
- bool result = eastl::all_of(m1.begin(), m1.end(),
- [&](auto& e) { return e.data != xvalue_test::MOVED_FROM; });
-
- VERIFY(result);
- }
-
- {
- // user reported regression: ensure container elements are moved from during the
- // eastl::set construction process when using an eastl::move_iterator.
- eastl::vector<xvalue_test> m1 = {{0}, {1}, {2}, {3}, {4}, {5}};
- eastl::set<xvalue_test> m2{eastl::make_move_iterator(m1.begin()), eastl::make_move_iterator(m1.end())};
-
- bool result = eastl::all_of(m1.begin(), m1.end(),
- [&](auto& e) { return e.data == xvalue_test::MOVED_FROM; });
-
- VERIFY(result);
- }
-
- return nErrorCount;
-}
-
-
-
-
-
-
-
-
-
-
-
-