summaryrefslogtreecommitdiff
path: root/tests/auto/algorithm/tst_algorithm.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2017-12-16 20:39:33 +0100
committerEike Ziller <eike.ziller@qt.io>2017-12-19 07:35:38 +0000
commite0a23664aafad2a215df4c43e85a47c4a006e693 (patch)
tree84198ab253a1a8eb1325f1b0ab977a756239e9e4 /tests/auto/algorithm/tst_algorithm.cpp
parent479ab4ef22e8810f059307b9eca68b79893db7a4 (diff)
downloadqt-creator-e0a23664aafad2a215df4c43e85a47c4a006e693.tar.gz
Utils::transform: Allow usage with non-const source containers
Makes it possible to e.g. transform to list of reference_wrappers. Change-Id: Ib608034fc3f296824c289edd27563bc7a196ac6d Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'tests/auto/algorithm/tst_algorithm.cpp')
-rw-r--r--tests/auto/algorithm/tst_algorithm.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/algorithm/tst_algorithm.cpp b/tests/auto/algorithm/tst_algorithm.cpp
index b2d031e7a1..e55aceac41 100644
--- a/tests/auto/algorithm/tst_algorithm.cpp
+++ b/tests/auto/algorithm/tst_algorithm.cpp
@@ -306,6 +306,37 @@ void tst_Algorithm::transform()
const QVector<double> trans = Utils::transform<QVector<double>>(v, &Struct::member);
QCOMPARE(trans, QVector<double>({1.0, 2.0, 3.0, 4.0}));
}
+ {
+ // non-const container and function parameter
+ // same container type
+ std::vector<Struct> v({1, 2, 3, 4});
+ const std::vector<std::reference_wrapper<Struct>> trans
+ = Utils::transform(v, [](Struct &s) { return std::ref(s); });
+ // different container type
+ QVector<Struct> v2({1, 2, 3, 4});
+ const std::vector<std::reference_wrapper<Struct>> trans2
+ = Utils::transform<std::vector>(v, [](Struct &s) { return std::ref(s); });
+ // temporaries
+ const auto tempv = [] { return QList<Struct>({1, 2, 3, 4}); };
+ // temporary with member function
+ const QList<int> trans3 = Utils::transform(tempv(), &Struct::getMember);
+ const std::vector<int> trans4 = Utils::transform<std::vector>(tempv(), &Struct::getMember);
+ const std::vector<int> trans5 = Utils::transform<std::vector<int>>(tempv(), &Struct::getMember);
+ // temporary with member
+ const QList<int> trans6 = Utils::transform(tempv(), &Struct::member);
+ const std::vector<int> trans7 = Utils::transform<std::vector>(tempv(), &Struct::member);
+ const std::vector<int> trans8 = Utils::transform<std::vector<int>>(tempv(), &Struct::member);
+ // temporary with function
+ const QList<int> trans9 = Utils::transform(tempv(),
+ [](const Struct &s) { return s.getMember(); });
+ const std::vector<int> trans10 = Utils::transform<std::vector>(tempv(), [](const Struct &s) {
+ return s.getMember();
+ });
+ const std::vector<int> trans11 = Utils::transform<std::vector<int>>(tempv(),
+ [](const Struct &s) {
+ return s.getMember();
+ });
+ }
}
void tst_Algorithm::sort()