/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #include #include class tst_Algorithm : public QObject { Q_OBJECT private slots: void transform(); }; int stringToInt(const QString &s) { return s.toInt(); } void tst_Algorithm::transform() { // same container type { // QList has standard inserter const QList strings({"1", "3", "132"}); const QList i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); QCOMPARE(i1, QList({1, 3, 132})); const QList i2 = Utils::transform(strings, stringToInt); QCOMPARE(i2, QList({1, 3, 132})); const QList i3 = Utils::transform(strings, &QString::size); QCOMPARE(i3, QList({1, 1, 3})); } { // QStringList const QStringList strings({"1", "3", "132"}); const QList i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); QCOMPARE(i1, QList({1, 3, 132})); const QList i2 = Utils::transform(strings, stringToInt); QCOMPARE(i2, QList({1, 3, 132})); const QList i3 = Utils::transform(strings, &QString::size); QCOMPARE(i3, QList({1, 1, 3})); } { // QSet internally needs special inserter const QSet strings({QString("1"), QString("3"), QString("132")}); const QSet i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); QCOMPARE(i1, QSet({1, 3, 132})); const QSet i2 = Utils::transform(strings, stringToInt); QCOMPARE(i2, QSet({1, 3, 132})); const QSet i3 = Utils::transform(strings, &QString::size); QCOMPARE(i3, QSet({1, 3})); } // different container types { // QList to QSet const QList strings({"1", "3", "132"}); const QSet i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); QCOMPARE(i1, QSet({1, 3, 132})); const QSet i2 = Utils::transform(strings, stringToInt); QCOMPARE(i2, QSet({1, 3, 132})); const QSet i3 = Utils::transform(strings, &QString::size); QCOMPARE(i3, QSet({1, 3})); } { // QStringList to QSet const QStringList strings({"1", "3", "132"}); const QSet i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); QCOMPARE(i1, QSet({1, 3, 132})); const QSet i2 = Utils::transform(strings, stringToInt); QCOMPARE(i2, QSet({1, 3, 132})); const QSet i3 = Utils::transform(strings, &QString::size); QCOMPARE(i3, QSet({1, 3})); } { // QSet to QList const QSet strings({QString("1"), QString("3"), QString("132")}); QList i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); }); qSort(i1); QCOMPARE(i1, QList({1, 3, 132})); QList i2 = Utils::transform(strings, stringToInt); qSort(i2); QCOMPARE(i2, QList({1, 3, 132})); QList i3 = Utils::transform(strings, &QString::size); qSort(i3); QCOMPARE(i3, QList({1, 1, 3})); } } QTEST_MAIN(tst_Algorithm) #include "tst_algorithm.moc"