From c90e5b50dc27c67c7ac67d3eb9fc3d6f22ee0e6c Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 28 Nov 2017 16:30:49 +0100 Subject: Algorithm: Support std::vector with contains and findOr Change-Id: I01cb71c06b405f071498ed8752f9acac44d2b223 Reviewed-by: Tobias Hunger --- tests/auto/algorithm/tst_algorithm.cpp | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'tests/auto/algorithm/tst_algorithm.cpp') diff --git a/tests/auto/algorithm/tst_algorithm.cpp b/tests/auto/algorithm/tst_algorithm.cpp index be3f07b070..9692c55c11 100644 --- a/tests/auto/algorithm/tst_algorithm.cpp +++ b/tests/auto/algorithm/tst_algorithm.cpp @@ -37,6 +37,9 @@ class tst_Algorithm : public QObject private slots: void transform(); void sort(); + void contains(); + void findOr(); + void findOrDefault(); }; @@ -50,6 +53,8 @@ struct Struct { Struct(int m) : member(m) {} bool operator==(const Struct &other) const { return member == other.member; } + bool isOdd() const { return member % 2 == 1; } + bool isEven() const { return !isOdd(); } int member; }; @@ -168,6 +173,64 @@ void tst_Algorithm::sort() QCOMPARE(valarray[i], valarrayResult[i]); } +void tst_Algorithm::contains() +{ + std::vector v1{1, 2, 3, 4}; + QVERIFY(Utils::contains(v1, [](int i) { return i == 2; })); + QVERIFY(!Utils::contains(v1, [](int i) { return i == 5; })); + std::vector> v2; + v2.emplace_back(std::make_unique(1)); + v2.emplace_back(std::make_unique(2)); + v2.emplace_back(std::make_unique(3)); + v2.emplace_back(std::make_unique(4)); + QVERIFY(Utils::contains(v2, [](const std::unique_ptr &ip) { return *ip == 2; })); + QVERIFY(!Utils::contains(v2, [](const std::unique_ptr &ip) { return *ip == 5; })); +} + +void tst_Algorithm::findOr() +{ + std::vector v1{1, 2, 3, 4}; + QCOMPARE(Utils::findOr(v1, 6, [](int i) { return i == 2; }), 2); + QCOMPARE(Utils::findOr(v1, 6, [](int i) { return i == 5; }), 6); + std::vector> v2; + v2.emplace_back(std::make_unique(1)); + v2.emplace_back(std::make_unique(2)); + v2.emplace_back(std::make_unique(3)); + v2.emplace_back(std::make_unique(4)); + int def = 6; + QCOMPARE(Utils::findOr(v2, &def, [](const std::unique_ptr &ip) { return *ip == 2; }), v2.at(1).get()); + QCOMPARE(Utils::findOr(v2, &def, [](const std::unique_ptr &ip) { return *ip == 5; }), &def); + std::vector> v3; + v3.emplace_back(std::make_unique(1)); + v3.emplace_back(std::make_unique(3)); + v3.emplace_back(std::make_unique(5)); + v3.emplace_back(std::make_unique(7)); + Struct defS(6); + QCOMPARE(Utils::findOr(v3, &defS, &Struct::isOdd), v3.at(0).get()); + QCOMPARE(Utils::findOr(v3, &defS, &Struct::isEven), &defS); +} + +void tst_Algorithm::findOrDefault() +{ + std::vector v1{1, 2, 3, 4}; + QCOMPARE(Utils::findOrDefault(v1, [](int i) { return i == 2; }), 2); + QCOMPARE(Utils::findOrDefault(v1, [](int i) { return i == 5; }), 0); + std::vector> v2; + v2.emplace_back(std::make_unique(1)); + v2.emplace_back(std::make_unique(2)); + v2.emplace_back(std::make_unique(3)); + v2.emplace_back(std::make_unique(4)); + QCOMPARE(Utils::findOrDefault(v2, [](const std::unique_ptr &ip) { return *ip == 2; }), v2.at(1).get()); + QCOMPARE(Utils::findOrDefault(v2, [](const std::unique_ptr &ip) { return *ip == 5; }), nullptr); + std::vector> v3; + v3.emplace_back(std::make_unique(1)); + v3.emplace_back(std::make_unique(3)); + v3.emplace_back(std::make_unique(5)); + v3.emplace_back(std::make_unique(7)); + QCOMPARE(Utils::findOrDefault(v3, &Struct::isOdd), v3.at(0).get()); + QCOMPARE(Utils::findOrDefault(v3, &Struct::isEven), nullptr); +} + QTEST_MAIN(tst_Algorithm) #include "tst_algorithm.moc" -- cgit v1.2.1