diff options
author | Ahmad Samir <a.samirh78@gmail.com> | 2023-03-21 15:31:41 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-06-22 21:13:31 +0000 |
commit | 9b83574e8391e3e68a1c400f09b8354e268eeb32 (patch) | |
tree | 1f1a141eb3eff176cb978b9d5347003a17b27f1e /tests/auto/corelib/tools | |
parent | 31d834a1c0d83d22fcf74624577013a558ad1974 (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.cpp | 24 |
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); |