// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "tst_qtconcurrentfiltermapgenerated.h" void tst_QtConcurrentFilterMapGenerated::mapReduceThroughDifferentTypes() { /* test for template ResultType blockingMappedReduced(Iterator begin, Iterator end, MapFunctor function, ReduceFunctor reduceFunction, reductionitemtype && initialValue, ReduceOptions); with inputsequence=standard inputitemtype=standard maptype=different mappeditemtype=standard reductiontype=different reductionitemtype=standard mapfunction=function mapfunctionpassing=lvalue reductionfunction=function reductionfunctionpassing=lvalue reductioninitialvaluepassing=lvalue reductionoptions=unspecified */ auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto map = myMap, SequenceItem>; auto reductor = myReduce, SequenceItem>; auto initialvalue = SequenceItem(0, true); auto result = QtConcurrent::blockingMappedReduced(input_sequence.begin(), input_sequence.end(), map, reductor, initialvalue); auto expected_result = SequenceItem(42, true); QCOMPARE(result, expected_result); } void tst_QtConcurrentFilterMapGenerated::moveOnlyFilterObject() { /* test for template void blockingFilter(QThreadPool* pool, Sequence & sequence, KeepFunctor filterFunction); with inputsequence=standard inputitemtype=standard filterfunction=moveonlyfunctor filterfunctionpassing=rvalue */ QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); QtConcurrent::blockingFilter(&pool, input_sequence, MyMoveOnlyFilter> {}); auto expected_result = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(5, true)); return result; }(); QCOMPARE(input_sequence, expected_result); } void tst_QtConcurrentFilterMapGenerated::moveOnlyMapObject() { /* test for template void blockingMap(QThreadPool* pool, Sequence & sequence, MapFunctor function); with inputsequence=standard inputitemtype=standard mapfunction=moveonlyfunctor mapfunctionpassing=rvalue */ QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); QtConcurrent::blockingMap(&pool, input_sequence, MyMoveOnlyInplaceMap> {}); auto expected_result = []() { std::vector> result; result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(6, true)); result.push_back(SequenceItem(8, true)); result.push_back(SequenceItem(10, true)); result.push_back(SequenceItem(12, true)); return result; }(); QCOMPARE(input_sequence, expected_result); } void tst_QtConcurrentFilterMapGenerated::moveOnlyReduceObject() { /* test for template ResultType blockingMappedReduced(QThreadPool* pool, const Sequence & sequence, MapFunctor function, ReduceFunctor reduceFunction, ReduceOptions); with inputsequence=standard inputsequencepassing=lvalue inputitemtype=standard maptype=same mappeditemtype=standard reductiontype=same reductionitemtype=standard mapfunction=functor mapfunctionpassing=lvalue reductionfunction=moveonlyfunctor reductionfunctionpassing=rvalue reductionoptions=unspecified */ QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto map = MyMap, SequenceItem> {}; auto result = QtConcurrent::blockingMappedReduced>( &pool, input_sequence, map, MyMoveOnlyReduce, SequenceItem> {}); auto expected_result = SequenceItem(42, true); QCOMPARE(result, expected_result); } void tst_QtConcurrentFilterMapGenerated::functorAsReduction() { /* test for template ResultType blockingFilteredReduced(QThreadPool* pool, const Sequence & sequence, KeepFunctor filterFunction, ReduceFunctor reduceFunction, reductionitemtype && initialValue, ReduceOptions); with inputsequence=standard inputsequencepassing=lvalue inputitemtype=standard reductiontype=same reductionitemtype=standard filterfunction=functor filterfunctionpassing=lvalue reductionfunction=functor reductionfunctionpassing=lvalue reductioninitialvaluepassing=lvalue reductionoptions=unspecified */ QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto filter = MyFilter> {}; auto reductor = MyReduce, SequenceItem> {}; auto initialvalue = SequenceItem(0, true); auto result = QtConcurrent::blockingFilteredReduced>( &pool, input_sequence, filter, reductor, initialvalue); auto expected_result = SequenceItem(9, true); QCOMPARE(result, expected_result); } void tst_QtConcurrentFilterMapGenerated::moveOnlyReductionItem() { /* test for template ResultType blockingFilteredReduced(QThreadPool* pool, const Sequence & sequence, KeepFunctor filterFunction, ReduceFunctor reduceFunction, reductionitemtype && initialValue, ReduceOptions); with inputsequence=standard inputsequencepassing=lvalue inputitemtype=standard reductiontype=different reductionitemtype=moveonly filterfunction=moveonlyfunctor filterfunctionpassing=rvalue reductionfunction=function reductionfunctionpassing=lvalue reductioninitialvaluepassing=rvalue reductionoptions=unspecified */ /* TODO: does not work yet QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto reductor = myReduce, MoveOnlySequenceItem>; auto result = QtConcurrent::blockingFilteredReduced( &pool, input_sequence, MyMoveOnlyFilter> {}, reductor, MoveOnlySequenceItem(0, true)); auto expected_result = MoveOnlySequenceItem(9, true); QCOMPARE(result, expected_result);*/ } void tst_QtConcurrentFilterMapGenerated::noDefaultConstructorItemMapped() { /* test for template ResultType blockingMappedReduced(QThreadPool* pool, const Sequence & sequence, MapFunctor function, ReduceFunctor reduceFunction, reductionitemtype && initialValue, ReduceOptions); with inputsequence=standard inputsequencepassing=lvalue inputitemtype=standard maptype=same mappeditemtype=standard reductiontype=different reductionitemtype=noconstruct mapfunction=functor mapfunctionpassing=lvalue reductionfunction=function reductionfunctionpassing=lvalue reductioninitialvaluepassing=lvalue reductionoptions=unspecified */ QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto map = MyMap, SequenceItem> {}; auto reductor = myReduce, NoConstructSequenceItem>; auto initialvalue = NoConstructSequenceItem(0, true); auto result = QtConcurrent::blockingMappedReduced(&pool, input_sequence, map, reductor, initialvalue); auto expected_result = NoConstructSequenceItem(42, true); QCOMPARE(result, expected_result); } void tst_QtConcurrentFilterMapGenerated::noDefaultConstructorItemFiltered() { QThreadPool pool; pool.setMaxThreadCount(1); auto input_sequence = []() { std::vector> result; result.push_back(SequenceItem(1, true)); result.push_back(SequenceItem(2, true)); result.push_back(SequenceItem(3, true)); result.push_back(SequenceItem(4, true)); result.push_back(SequenceItem(5, true)); result.push_back(SequenceItem(6, true)); return result; }(); auto filter = MyFilter> {}; auto reductor = myReduce, NoConstructSequenceItem>; auto initialvalue = NoConstructSequenceItem(0, true); auto result = QtConcurrent::blockingFilteredReduced(&pool, input_sequence, filter, reductor, initialvalue); auto expected_result = NoConstructSequenceItem(9, true); QCOMPARE(result, expected_result); }