diff options
Diffstat (limited to 'tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp')
-rw-r--r-- | tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp | 1091 |
1 files changed, 423 insertions, 668 deletions
diff --git a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp index bd55446515..1b52f52038 100644 --- a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp +++ b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp @@ -28,7 +28,6 @@ #include <qtconcurrentfilter.h> #include <QCoreApplication> #include <QList> -#include <QLinkedList> #include <QtTest/QtTest> #include "../qtconcurrentmap/functions.h" @@ -45,6 +44,7 @@ private slots: void incrementalResults(); void noDetach(); void stlContainers(); + void filteredReduceInitialValue(); }; void tst_QtConcurrentFilter::filter() @@ -116,69 +116,6 @@ void tst_QtConcurrentFilter::filter() QtConcurrent::blockingFilter(list, &Number::isEven); QCOMPARE(list, QList<Number>() << 2 << 4); } - -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - - // functor - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::filter(linkedList, KeepEvenIntegers()).waitForFinished(); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::blockingFilter(linkedList, KeepEvenIntegers()); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - - // function - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::filter(linkedList, keepEvenIntegers).waitForFinished(); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::blockingFilter(linkedList, keepEvenIntegers); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - - // bound function - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::filter(linkedList, keepEvenIntegers).waitForFinished(); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::blockingFilter(linkedList, keepEvenIntegers); - QCOMPARE(linkedList, QLinkedList<int>() << 2 << 4); - } - - // member - { - QLinkedList<Number> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::filter(linkedList, &Number::isEven).waitForFinished(); - QCOMPARE(linkedList, QLinkedList<Number>() << 2 << 4); - } - { - QLinkedList<Number> linkedList; - linkedList << 1 << 2 << 3 << 4; - QtConcurrent::blockingFilter(linkedList, &Number::isEven); - QCOMPARE(linkedList, QLinkedList<Number>() << 2 << 4); - } - -QT_WARNING_POP -#endif } void tst_QtConcurrentFilter::filtered() @@ -353,179 +290,6 @@ void tst_QtConcurrentFilter::filtered() &Number::isEven); QCOMPARE(list2, QList<Number>() << 2 << 4); } - -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - - // same thing on linked lists - - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - - // functor - { - QFuture<int> f = QtConcurrent::filtered(linkedList, KeepEvenIntegers()); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers()); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers()); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered(linkedList, KeepEvenIntegers()); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers()); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers()); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - - // function - { - QFuture<int> f = QtConcurrent::filtered(linkedList, keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.begin(), - linkedList.end(), - keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered(linkedList, keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.begin(), - linkedList.end(), - keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - - // bound function - { - QFuture<int> f = QtConcurrent::filtered(linkedList, keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.begin(), - linkedList.end(), - keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QFuture<int> f = QtConcurrent::filtered(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers); - QList<int> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered(linkedList, keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.begin(), - linkedList.end(), - keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<int> >(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); - } - - // const member function - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QFuture<Number> f = QtConcurrent::filtered(integers, &Number::isEven); - QList<Number> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<Number>() << 2 << 4); - } - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QFuture<Number> f = QtConcurrent::filtered(integers.begin(), - integers.end(), - &Number::isEven); - QList<Number> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<Number>() << 2 << 4); - } - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QFuture<Number> f = QtConcurrent::filtered(integers.constBegin(), - integers.constEnd(), - &Number::isEven); - QList<Number> linkedList2 = f.results(); - QCOMPARE(linkedList2, QList<Number>() << 2 << 4); - } - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::blockingFiltered(integers, &Number::isEven); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); - } - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::blockingFiltered<QLinkedList<Number> >(integers.begin(), - integers.end(), - &Number::isEven); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); - } - { - QLinkedList<Number> integers; - integers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = - QtConcurrent::blockingFiltered<QLinkedList<Number> >(integers.constBegin(), - integers.constEnd(), - &Number::isEven); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); - } - -QT_WARNING_POP -#endif } void tst_QtConcurrentFilter::filteredReduced() @@ -723,16 +487,17 @@ void tst_QtConcurrentFilter::filteredReduced() QCOMPARE(sum, 6); } + auto push_back = static_cast<void (QVector<int>::*)(const int &)>(&QVector<int>::push_back); // functor-member { - QList<int> list2 = QtConcurrent::filteredReduced(list, KeepEvenIntegers(), &QList<int>::push_back, QtConcurrent::OrderedReduce); + QList<int> list2 = QtConcurrent::filteredReduced(list, KeepEvenIntegers(), push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { QList<int> list2 = QtConcurrent::filteredReduced(list.begin(), list.end(), KeepEvenIntegers(), - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -740,19 +505,19 @@ void tst_QtConcurrentFilter::filteredReduced() QList<int> list2 = QtConcurrent::filteredReduced(list.constBegin(), list.constEnd(), KeepEvenIntegers(), - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { - QList<int> list2 = QtConcurrent::blockingFilteredReduced(list, KeepEvenIntegers(), &QList<int>::push_back, QtConcurrent::OrderedReduce); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list, KeepEvenIntegers(), push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.begin(), list.end(), KeepEvenIntegers(), - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -760,7 +525,7 @@ void tst_QtConcurrentFilter::filteredReduced() QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.constBegin(), list.constEnd(), KeepEvenIntegers(), - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -814,12 +579,15 @@ void tst_QtConcurrentFilter::filteredReduced() } // member-member + + auto push_back_number = static_cast<void (QVector<Number>::*)(const Number &)>(&QVector<Number>::push_back); + { QList<Number> numbers; numbers << 1 << 2 << 3 << 4; QList<Number> list2 = QtConcurrent::filteredReduced(numbers, &Number::isEven, - &QList<Number>::push_back, QtConcurrent::OrderedReduce); + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } { @@ -828,7 +596,7 @@ void tst_QtConcurrentFilter::filteredReduced() QList<Number> list2 = QtConcurrent::filteredReduced(numbers.begin(), numbers.end(), &Number::isEven, - &QList<Number>::push_back, + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } @@ -838,7 +606,7 @@ void tst_QtConcurrentFilter::filteredReduced() QList<Number> list2 = QtConcurrent::filteredReduced(numbers.constBegin(), numbers.constEnd(), &Number::isEven, - &QList<Number>::push_back, + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } @@ -847,7 +615,7 @@ void tst_QtConcurrentFilter::filteredReduced() numbers << 1 << 2 << 3 << 4; QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers, &Number::isEven, - &QList<Number>::push_back, QtConcurrent::OrderedReduce); + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } { @@ -856,7 +624,7 @@ void tst_QtConcurrentFilter::filteredReduced() QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers.begin(), numbers.end(), &Number::isEven, - &QList<Number>::push_back, + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } @@ -866,21 +634,21 @@ void tst_QtConcurrentFilter::filteredReduced() QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers.constBegin(), numbers.constEnd(), &Number::isEven, - &QList<Number>::push_back, + push_back_number, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<Number>() << 2 << 4); } // function-member { - QList<int> list2 = QtConcurrent::filteredReduced(list, keepEvenIntegers, &QList<int>::push_back, QtConcurrent::OrderedReduce); + QList<int> list2 = QtConcurrent::filteredReduced(list, keepEvenIntegers, push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { QList<int> list2 = QtConcurrent::filteredReduced(list.begin(), list.end(), keepEvenIntegers, - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -888,19 +656,19 @@ void tst_QtConcurrentFilter::filteredReduced() QList<int> list2 = QtConcurrent::filteredReduced(list.constBegin(), list.constEnd(), keepEvenIntegers, - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { - QList<int> list2 = QtConcurrent::blockingFilteredReduced(list, keepEvenIntegers, &QList<int>::push_back, QtConcurrent::OrderedReduce); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list, keepEvenIntegers, push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } { QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.begin(), list.end(), keepEvenIntegers, - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -908,7 +676,7 @@ void tst_QtConcurrentFilter::filteredReduced() QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.constBegin(), list.constEnd(), keepEvenIntegers, - &QList<int>::push_back, + push_back, QtConcurrent::OrderedReduce); QCOMPARE(list2, QList<int>() << 2 << 4); } @@ -961,567 +729,554 @@ void tst_QtConcurrentFilter::filteredReduced() QCOMPARE(sum, 6); } -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED +} + +bool filterfn(int i) +{ + return (i % 2); +} + +void tst_QtConcurrentFilter::resultAt() +{ + + QList<int> ints; + for (int i=0; i < 1000; ++i) + ints << i; + + QFuture<int> future = QtConcurrent::filtered(ints, filterfn); + future.waitForFinished(); + + for (int i = 0; i < future.resultCount(); ++i) { + QCOMPARE(future.resultAt(i), ints.at(i * 2 + 1)); + } + +} - // same as above on linked lists - QLinkedList<int> linkedList; - linkedList << 1 << 2 << 3 << 4; - QLinkedList<Number> numberLinkedList; - numberLinkedList << 1 << 2 << 3 << 4; +bool waitFilterfn(const int &i) +{ + QTest::qWait(1); + return (i % 2); +} + +void tst_QtConcurrentFilter::incrementalResults() +{ + const int count = 200; + QList<int> ints; + for (int i=0; i < count; ++i) + ints << i; + + QFuture<int> future = QtConcurrent::filtered(ints, waitFilterfn); + + QList<int> results; + + while (future.isFinished() == false) { + for (int i = 0; i < future.resultCount(); ++i) { + results += future.resultAt(i); + } + QTest::qWait(1); + } + + QCOMPARE(future.isFinished(), true); + QCOMPARE(future.resultCount(), count / 2); + QCOMPARE(future.results().count(), count / 2); +} + +void tst_QtConcurrentFilter::noDetach() +{ + { + QList<int> l = QList<int>() << 1; + QVERIFY(l.isDetached()); + + QList<int> ll = l; + QVERIFY(!l.isDetached()); + + QtConcurrent::filtered(l, waitFilterfn).waitForFinished(); + + QVERIFY(!l.isDetached()); + QVERIFY(!ll.isDetached()); + + QtConcurrent::blockingFiltered(l, waitFilterfn); + + QVERIFY(!l.isDetached()); + QVERIFY(!ll.isDetached()); + + QtConcurrent::filteredReduced(l, waitFilterfn, intSumReduce).waitForFinished(); + + QVERIFY(!l.isDetached()); + QVERIFY(!ll.isDetached()); + + QtConcurrent::filter(l, waitFilterfn).waitForFinished(); + if (!l.isDetached()) + QEXPECT_FAIL("", "QTBUG-20688: Known unstable failure", Abort); + QVERIFY(l.isDetached()); + QVERIFY(ll.isDetached()); + } + { + const QList<int> l = QList<int>() << 1; + QVERIFY(l.isDetached()); + + const QList<int> ll = l; + QVERIFY(!l.isDetached()); + + QtConcurrent::filtered(l, waitFilterfn).waitForFinished(); + + QVERIFY(!l.isDetached()); + QVERIFY(!ll.isDetached()); + + QtConcurrent::filteredReduced(l, waitFilterfn, intSumReduce).waitForFinished(); + + QVERIFY(!l.isDetached()); + QVERIFY(!ll.isDetached()); + } +} + +void tst_QtConcurrentFilter::stlContainers() +{ + std::vector<int> vector; + vector.push_back(1); + vector.push_back(2); + + std::vector<int> vector2 = QtConcurrent::blockingFiltered(vector, waitFilterfn); + QCOMPARE(vector2.size(), (std::vector<int>::size_type)(1)); + QCOMPARE(vector2[0], 1); + + std::list<int> list; + list.push_back(1); + list.push_back(2); + + std::list<int> list2 = QtConcurrent::blockingFiltered(list, waitFilterfn); + QCOMPARE(list2.size(), (std::list<int>::size_type)(1)); + QCOMPARE(*list2.begin(), 1); + + QtConcurrent::filtered(list, waitFilterfn).waitForFinished(); + QtConcurrent::filtered(vector, waitFilterfn).waitForFinished(); + QtConcurrent::filtered(vector.begin(), vector.end(), waitFilterfn).waitForFinished(); + + QtConcurrent::blockingFilter(list, waitFilterfn); + QCOMPARE(list2.size(), (std::list<int>::size_type)(1)); + QCOMPARE(*list2.begin(), 1); +} + +void tst_QtConcurrentFilter::filteredReduceInitialValue() +{ + // This test's the same as filteredReduce, but with an initial value on all calls + QList<int> list; + list << 1 << 2 << 3 << 4; + QList<Number> numberList; + numberList << 1 << 2 << 3 << 4; // functor-functor { - int sum = QtConcurrent::filteredReduced<int>(linkedList, KeepEvenIntegers(), IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>(list, KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::filteredReduced<int>(linkedList, keepEvenIntegers, intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::filteredReduced<int>(list, keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::filteredReduced<int>(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - IntSumReduce()); - QCOMPARE(sum, 6); + QVector<int> vector; + vector << 1 << 2 << 3 << 4; + int sum = + QtConcurrent::filteredReduced<int>(vector, KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); + } + { + int sum = QtConcurrent::filteredReduced<int>( + list.begin(), list.end(), KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::filteredReduced<int>(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::filteredReduced<int>( + list.begin(), list.end(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::filteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>( + list.constBegin(), list.constEnd(), KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::filteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::filteredReduced<int>( + list.constBegin(), list.constEnd(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList, KeepEvenIntegers(), IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list, KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::blockingFilteredReduced<int>(linkedList, keepEvenIntegers, intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::blockingFilteredReduced<int>( + list, keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list.begin(), list.end(), KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::blockingFilteredReduced<int>(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::blockingFilteredReduced<int>( + list.begin(), list.end(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list.constBegin(), list.constEnd(), KeepEvenIntegers(), IntSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::blockingFilteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::blockingFilteredReduced<int>( + list.constBegin(), list.constEnd(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum2, 16); } // function-functor { - int sum = QtConcurrent::filteredReduced<int>(linkedList, keepEvenIntegers, IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>(list, keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced<int>(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>( + list.begin(), list.end(), keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>( + list.constBegin(), list.constEnd(), keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList, keepEvenIntegers, IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list, keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list.begin(), list.end(), keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - IntSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + list.constBegin(), list.constEnd(), keepEvenIntegers, IntSumReduce(), 10); + QCOMPARE(sum, 16); } // functor-function { - int sum = QtConcurrent::filteredReduced(linkedList, KeepEvenIntegers(), intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced(list, KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced( + list.begin(), list.end(), KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced( + list.constBegin(), list.constEnd(), KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList, KeepEvenIntegers(), intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced(list, KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + list.begin(), list.end(), KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + list.constBegin(), list.constEnd(), KeepEvenIntegers(), intSumReduce, 10); + QCOMPARE(sum, 16); } // function-function { - int sum = QtConcurrent::filteredReduced(linkedList, keepEvenIntegers, intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced(list, keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced( + list.begin(), list.end(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced( + list.constBegin(), list.constEnd(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList, keepEvenIntegers, intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced(list, keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + list.begin(), list.end(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - intSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + list.constBegin(), list.constEnd(), keepEvenIntegers, intSumReduce, 10); + QCOMPARE(sum, 16); } + auto push_back = static_cast<void (QVector<int>::*)(const int &)>(&QVector<int>::push_back); // functor-member + QVector<int> initialIntVector; + initialIntVector.push_back(10); { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList, KeepEvenIntegers(), &QLinkedList<int>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced( + list, KeepEvenIntegers(), push_back, initialIntVector, QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced(list.begin(), + list.end(), + KeepEvenIntegers(), + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced(list.constBegin(), + list.constEnd(), + KeepEvenIntegers(), + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList, KeepEvenIntegers(), &QLinkedList<int>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced( + list, KeepEvenIntegers(), push_back, initialIntVector, QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList.begin(), - linkedList.end(), - KeepEvenIntegers(), - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.begin(), + list.end(), + KeepEvenIntegers(), + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - KeepEvenIntegers(), - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.constBegin(), + list.constEnd(), + KeepEvenIntegers(), + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } // member-functor { - int sum = QtConcurrent::filteredReduced<int>(numberLinkedList, &Number::isEven, NumberSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>( + numberList, &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::filteredReduced<int>(QLinkedList<Number>(numberLinkedList), - &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::filteredReduced<int>( + QList<Number>(numberList), &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::filteredReduced<int>(numberLinkedList.begin(), - numberLinkedList.end(), - &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced<int>( + numberList.begin(), numberList.end(), &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced<int>(numberLinkedList.constBegin(), - numberLinkedList.constEnd(), + int sum = QtConcurrent::filteredReduced<int>(numberList.constBegin(), + numberList.constEnd(), &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum, 6); + NumberSumReduce(), + 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(numberLinkedList, &Number::isEven, NumberSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + numberList, &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::blockingFilteredReduced<int>(QLinkedList<Number>(numberLinkedList), - &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::blockingFilteredReduced<int>( + QList<Number>(numberList), &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(numberLinkedList.begin(), - numberLinkedList.end(), - &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced<int>( + numberList.begin(), numberList.end(), &Number::isEven, NumberSumReduce(), 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced<int>(numberLinkedList.constBegin(), - numberLinkedList.constEnd(), + int sum = QtConcurrent::blockingFilteredReduced<int>(numberList.constBegin(), + numberList.constEnd(), &Number::isEven, - NumberSumReduce()); - QCOMPARE(sum, 6); + NumberSumReduce(), + 10); + QCOMPARE(sum, 16); } // member-member + + auto push_back_number = + static_cast<void (QVector<Number>::*)(const Number &)>(&QVector<Number>::push_back); + QVector<Number> initialNumberVector { 10 }; { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::filteredReduced(numbers, - &Number::isEven, - &QLinkedList<Number>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::filteredReduced(numbers, + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::filteredReduced(numbers.begin(), - numbers.end(), - &Number::isEven, - &QLinkedList<Number>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::filteredReduced(numbers.begin(), + numbers.end(), + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::filteredReduced(numbers.constBegin(), - numbers.constEnd(), - &Number::isEven, - &QLinkedList<Number>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::filteredReduced(numbers.constBegin(), + numbers.constEnd(), + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::blockingFilteredReduced(numbers, - &Number::isEven, - &QLinkedList<Number>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers, + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::blockingFilteredReduced(numbers.begin(), - numbers.end(), - &Number::isEven, - &QLinkedList<Number>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers.begin(), + numbers.end(), + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } { - QLinkedList<Number> numbers; + QList<Number> numbers; numbers << 1 << 2 << 3 << 4; - QLinkedList<Number> linkedList2 = QtConcurrent::blockingFilteredReduced(numbers.constBegin(), - numbers.constEnd(), - &Number::isEven, - &QLinkedList<Number>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<Number>() << 2 << 4); + QList<Number> list2 = QtConcurrent::blockingFilteredReduced(numbers.constBegin(), + numbers.constEnd(), + &Number::isEven, + push_back_number, + initialNumberVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<Number>() << 10 << 2 << 4); } // function-member { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList, keepEvenIntegers, &QLinkedList<int>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced( + list, keepEvenIntegers, push_back, initialIntVector, QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced(list.begin(), + list.end(), + keepEvenIntegers, + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::filteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::filteredReduced(list.constBegin(), + list.constEnd(), + keepEvenIntegers, + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList, keepEvenIntegers, &QLinkedList<int>::append, QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced( + list, keepEvenIntegers, push_back, initialIntVector, QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList.begin(), - linkedList.end(), - keepEvenIntegers, - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.begin(), + list.end(), + keepEvenIntegers, + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } { - QLinkedList<int> linkedList2 = QtConcurrent::blockingFilteredReduced(linkedList.constBegin(), - linkedList.constEnd(), - keepEvenIntegers, - &QLinkedList<int>::append, - QtConcurrent::OrderedReduce); - QCOMPARE(linkedList2, QLinkedList<int>() << 2 << 4); + QList<int> list2 = QtConcurrent::blockingFilteredReduced(list.constBegin(), + list.constEnd(), + keepEvenIntegers, + push_back, + initialIntVector, + QtConcurrent::OrderedReduce); + QCOMPARE(list2, QList<int>() << 10 << 2 << 4); } // member-function { - int sum = QtConcurrent::filteredReduced(numberLinkedList, &Number::isEven, numberSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced(numberList, &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::filteredReduced(QLinkedList<Number>(numberLinkedList), - &Number::isEven, - numberSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::filteredReduced( + QList<Number>(numberList), &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::filteredReduced(numberLinkedList.begin(), - numberLinkedList.end(), - &Number::isEven, - numberSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::filteredReduced( + numberList.begin(), numberList.end(), &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::filteredReduced(numberLinkedList.constBegin(), - numberLinkedList.constEnd(), + int sum = QtConcurrent::filteredReduced(numberList.constBegin(), + numberList.constEnd(), &Number::isEven, - numberSumReduce); - QCOMPARE(sum, 6); + numberSumReduce, + 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(numberLinkedList, &Number::isEven, numberSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + numberList, &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum, 16); - int sum2 = QtConcurrent::blockingFilteredReduced(QLinkedList<Number>(numberLinkedList), - &Number::isEven, - numberSumReduce); - QCOMPARE(sum2, 6); + int sum2 = QtConcurrent::blockingFilteredReduced( + QList<Number>(numberList), &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum2, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(numberLinkedList.begin(), - numberLinkedList.end(), - &Number::isEven, - numberSumReduce); - QCOMPARE(sum, 6); + int sum = QtConcurrent::blockingFilteredReduced( + numberList.begin(), numberList.end(), &Number::isEven, numberSumReduce, 10); + QCOMPARE(sum, 16); } { - int sum = QtConcurrent::blockingFilteredReduced(numberLinkedList.constBegin(), - numberLinkedList.constEnd(), + int sum = QtConcurrent::blockingFilteredReduced(numberList.constBegin(), + numberList.constEnd(), &Number::isEven, - numberSumReduce); - QCOMPARE(sum, 6); - } - -QT_WARNING_POP -#endif - - // ### the same as above, with an initial result value -} - -bool filterfn(int i) -{ - return (i % 2); -} - -void tst_QtConcurrentFilter::resultAt() -{ - - QList<int> ints; - for (int i=0; i < 1000; ++i) - ints << i; - - QFuture<int> future = QtConcurrent::filtered(ints, filterfn); - future.waitForFinished(); - - for (int i = 0; i < future.resultCount(); ++i) { - QCOMPARE(future.resultAt(i), ints.at(i * 2 + 1)); - } - -} - -bool waitFilterfn(const int &i) -{ - QTest::qWait(1); - return (i % 2); -} - -void tst_QtConcurrentFilter::incrementalResults() -{ - const int count = 200; - QList<int> ints; - for (int i=0; i < count; ++i) - ints << i; - - QFuture<int> future = QtConcurrent::filtered(ints, waitFilterfn); - - QList<int> results; - - while (future.isFinished() == false) { - for (int i = 0; i < future.resultCount(); ++i) { - results += future.resultAt(i); - } - QTest::qWait(1); - } - - QCOMPARE(future.isFinished(), true); - QCOMPARE(future.resultCount(), count / 2); - QCOMPARE(future.results().count(), count / 2); -} - -void tst_QtConcurrentFilter::noDetach() -{ - { - QList<int> l = QList<int>() << 1; - QVERIFY(l.isDetached()); - - QList<int> ll = l; - QVERIFY(!l.isDetached()); - - QtConcurrent::filtered(l, waitFilterfn).waitForFinished(); - - QVERIFY(!l.isDetached()); - QVERIFY(!ll.isDetached()); - - QtConcurrent::blockingFiltered(l, waitFilterfn); - - QVERIFY(!l.isDetached()); - QVERIFY(!ll.isDetached()); - - QtConcurrent::filteredReduced(l, waitFilterfn, intSumReduce).waitForFinished(); - - QVERIFY(!l.isDetached()); - QVERIFY(!ll.isDetached()); - - QtConcurrent::filter(l, waitFilterfn).waitForFinished(); - if (!l.isDetached()) - QEXPECT_FAIL("", "QTBUG-20688: Known unstable failure", Abort); - QVERIFY(l.isDetached()); - QVERIFY(ll.isDetached()); - } - { - const QList<int> l = QList<int>() << 1; - QVERIFY(l.isDetached()); - - const QList<int> ll = l; - QVERIFY(!l.isDetached()); - - QtConcurrent::filtered(l, waitFilterfn).waitForFinished(); - - QVERIFY(!l.isDetached()); - QVERIFY(!ll.isDetached()); - - QtConcurrent::filteredReduced(l, waitFilterfn, intSumReduce).waitForFinished(); - - QVERIFY(!l.isDetached()); - QVERIFY(!ll.isDetached()); + numberSumReduce, + 10); + QCOMPARE(sum, 16); } } -void tst_QtConcurrentFilter::stlContainers() -{ - std::vector<int> vector; - vector.push_back(1); - vector.push_back(2); - - std::vector<int> vector2 = QtConcurrent::blockingFiltered(vector, waitFilterfn); - QCOMPARE(vector2.size(), (std::vector<int>::size_type)(1)); - QCOMPARE(vector2[0], 1); - - std::list<int> list; - list.push_back(1); - list.push_back(2); - - std::list<int> list2 = QtConcurrent::blockingFiltered(list, waitFilterfn); - QCOMPARE(list2.size(), (std::list<int>::size_type)(1)); - QCOMPARE(*list2.begin(), 1); - - QtConcurrent::filtered(list, waitFilterfn).waitForFinished(); - QtConcurrent::filtered(vector, waitFilterfn).waitForFinished(); - QtConcurrent::filtered(vector.begin(), vector.end(), waitFilterfn).waitForFinished(); - - QtConcurrent::blockingFilter(list, waitFilterfn); - QCOMPARE(list2.size(), (std::list<int>::size_type)(1)); - QCOMPARE(*list2.begin(), 1); -} - QTEST_MAIN(tst_QtConcurrentFilter) #include "tst_qtconcurrentfilter.moc" |