summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2023-03-21 15:31:41 +0200
committerMarc Mutz <marc.mutz@qt.io>2023-06-22 21:13:31 +0000
commit9b83574e8391e3e68a1c400f09b8354e268eeb32 (patch)
tree1f1a141eb3eff176cb978b9d5347003a17b27f1e /tests/auto/corelib/tools
parent31d834a1c0d83d22fcf74624577013a558ad1974 (diff)
Add q20::erase_if(std::vector, pred) and erase(vector, val)
INTEGRITY has a pre-P1115 implementation of std::erase/erase_if that returns void instead of the number of erased elements, so make q20's implementation more specialized, so the compiler will pick it over INTEGRITY's (Marc's idea from the code review). Change-Id: I88d025a3f90cdd65f5bb73beb8a39e32ccf12d9b Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r--tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
index 68d9d38021..bac6745607 100644
--- a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
+++ b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
@@ -14,7 +14,6 @@
#include <algorithm>
#include <functional>
-#include <vector> // for reference
#include <iostream>
#include <list>
#include <set>
@@ -23,10 +22,7 @@
#include <forward_list>
#include <unordered_set>
#include <unordered_map>
-
-#if defined(__cpp_lib_erase_if) && __cpp_lib_erase_if >= 202002L
-# define STDLIB_HAS_UNIFORM_ERASURE
-#endif
+#include <q20vector.h> // For reference
QT_BEGIN_NAMESPACE
std::ostream &operator<<(std::ostream &os, const QChar &c)
@@ -380,22 +376,14 @@ private Q_SLOTS:
void erase_QVarLengthArray() { erase_impl<QVarLengthArray<int>>(); }
void erase_QString() { erase_impl<QString>(); }
void erase_QByteArray() { erase_impl<QByteArray>(); }
- void erase_std_vector() {
-#ifdef STDLIB_HAS_UNIFORM_ERASURE
- erase_impl<std::vector<int>>();
-#endif
- }
+ void erase_std_vector() { erase_impl<std::vector<int>>(); }
void erase_if_QList() { erase_if_impl<QList<int>>(); }
void erase_if_QVarLengthArray() { erase_if_impl<QVarLengthArray<int>>(); }
void erase_if_QSet() { erase_if_impl<QSet<int>>(); }
void erase_if_QString() { erase_if_impl<QString>(); }
void erase_if_QByteArray() { erase_if_impl<QByteArray>(); }
- void erase_if_std_vector() {
-#ifdef STDLIB_HAS_UNIFORM_ERASURE
- erase_if_impl<std::vector<int>>();
-#endif
- }
+ void erase_if_std_vector() { erase_if_impl<std::vector<int>>(); }
void erase_if_QMap() { erase_if_associative_impl<QMap<int, int>>(); }
void erase_if_QMultiMap() {erase_if_associative_impl<QMultiMap<int, int>>(); }
void erase_if_QHash() { erase_if_associative_impl<QHash<int, int>>(); }
@@ -900,6 +888,7 @@ void tst_ContainerApiSymmetry::erase_impl() const
auto c = make<Container>(7); // {1, 2, 3, 4, 5, 6, 7}
QCOMPARE(c.size(), S(7));
+ using q20::erase; // For std::vector
auto result = erase(c, V(1));
QCOMPARE(result, S(1));
QCOMPARE(c.size(), S(6));
@@ -925,7 +914,10 @@ void tst_ContainerApiSymmetry::erase_if_impl() const
oldSize = c.size();
count = 0;
- auto result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 2 == 0; });
+
+ using q20::erase_if; // For std::vector
+
+ S result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 2 == 0; });
QCOMPARE(result, S(3));
QCOMPARE(c.size(), S(4));
QCOMPARE(count, oldSize);