summaryrefslogtreecommitdiff
path: root/tests/auto/algorithm/tst_algorithm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/algorithm/tst_algorithm.cpp')
-rw-r--r--tests/auto/algorithm/tst_algorithm.cpp66
1 files changed, 62 insertions, 4 deletions
diff --git a/tests/auto/algorithm/tst_algorithm.cpp b/tests/auto/algorithm/tst_algorithm.cpp
index ab0a9177cc..83b8505bfb 100644
--- a/tests/auto/algorithm/tst_algorithm.cpp
+++ b/tests/auto/algorithm/tst_algorithm.cpp
@@ -55,16 +55,23 @@ int stringToInt(const QString &s)
}
namespace {
-struct Struct
+
+struct BaseStruct
{
- Struct(int m) : member(m) {}
- bool operator==(const Struct &other) const { return member == other.member; }
+ BaseStruct(int m) : member(m) {}
+ bool operator==(const BaseStruct &other) const { return member == other.member; }
+
+ int member;
+};
+
+struct Struct : public BaseStruct
+{
+ Struct(int m) : BaseStruct(m) {}
bool isOdd() const { return member % 2 == 1; }
bool isEven() const { return !isOdd(); }
int getMember() const { return member; }
- int member;
};
}
@@ -248,6 +255,57 @@ void tst_Algorithm::transform()
Utils::sort(trans);
QCOMPARE(trans, QList<double>({1.5, 7.5, 17.5}));
}
+ {
+ // specific result container with one template parameter (QVector)
+ std::vector<int> v({1, 2, 3, 4});
+ const QVector<BaseStruct *> trans = Utils::transform<QVector<BaseStruct *>>(v, [](int i) {
+ return new Struct(i);
+ });
+ QCOMPARE(trans.size(), 4);
+ QCOMPARE(trans.at(0)->member, 1);
+ QCOMPARE(trans.at(1)->member, 2);
+ QCOMPARE(trans.at(2)->member, 3);
+ QCOMPARE(trans.at(3)->member, 4);
+ qDeleteAll(trans);
+ }
+ {
+ // specific result container with one of two template parameters (std::vector)
+ std::vector<int> v({1, 2, 3, 4});
+ const std::vector<BaseStruct *> trans
+ = Utils::transform<std::vector<BaseStruct *>>(v, [](int i) { return new Struct(i); });
+ QCOMPARE(trans.size(), 4ul);
+ QCOMPARE(trans.at(0)->member, 1);
+ QCOMPARE(trans.at(1)->member, 2);
+ QCOMPARE(trans.at(2)->member, 3);
+ QCOMPARE(trans.at(3)->member, 4);
+ qDeleteAll(trans);
+ }
+ {
+ // specific result container with two template parameters (std::vector)
+ std::vector<int> v({1, 2, 3, 4});
+ const std::vector<BaseStruct *, std::allocator<BaseStruct *>> trans
+ = Utils::transform<std::vector<BaseStruct *, std::allocator<BaseStruct *>>>(v, [](int i) {
+ return new Struct(i);
+ });
+ QCOMPARE(trans.size(), 4ul);
+ QCOMPARE(trans.at(0)->member, 1);
+ QCOMPARE(trans.at(1)->member, 2);
+ QCOMPARE(trans.at(2)->member, 3);
+ QCOMPARE(trans.at(3)->member, 4);
+ qDeleteAll(trans);
+ }
+ {
+ // specific result container with member function
+ QList<Struct> v({1, 2, 3, 4});
+ const QVector<double> trans = Utils::transform<QVector<double>>(v, &Struct::getMember);
+ QCOMPARE(trans, QVector<double>({1.0, 2.0, 3.0, 4.0}));
+ }
+ {
+ // specific result container with member
+ QList<Struct> v({1, 2, 3, 4});
+ const QVector<double> trans = Utils::transform<QVector<double>>(v, &Struct::member);
+ QCOMPARE(trans, QVector<double>({1.0, 2.0, 3.0, 4.0}));
+ }
}
void tst_Algorithm::sort()