Add auto test for algorithms

The currently most interesting is Utils::transform.

Change-Id: Ic21ec098f15ae4564227a84d11ef95f57ac72d6c
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Eike Ziller
2016-07-07 11:46:02 +02:00
parent 0d4f4d9ba6
commit 61ab1382dc
4 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
QTC_LIB_DEPENDS = utils
include(../qttest.pri)
SOURCES += tst_algorithm.cpp
OTHER_FILES += $$IDE_SOURCE_TREE/src/libs/utils/algorithm.h

View File

@@ -0,0 +1,10 @@
import qbs
QtcAutotest {
name: "Algorithm autotest"
Depends { name: "Utils" }
files: [
"tst_algorithm.cpp",
]
}

View File

@@ -0,0 +1,116 @@
/****************************************************************************
**
** 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 <utils/algorithm.h>
#include <QtTest>
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<QString> strings({"1", "3", "132"});
const QList<int> i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); });
QCOMPARE(i1, QList<int>({1, 3, 132}));
const QList<int> i2 = Utils::transform(strings, stringToInt);
QCOMPARE(i2, QList<int>({1, 3, 132}));
const QList<int> i3 = Utils::transform(strings, &QString::size);
QCOMPARE(i3, QList<int>({1, 1, 3}));
}
{
// QStringList
const QStringList strings({"1", "3", "132"});
const QList<int> i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); });
QCOMPARE(i1, QList<int>({1, 3, 132}));
const QList<int> i2 = Utils::transform(strings, stringToInt);
QCOMPARE(i2, QList<int>({1, 3, 132}));
const QList<int> i3 = Utils::transform(strings, &QString::size);
QCOMPARE(i3, QList<int>({1, 1, 3}));
}
{
// QSet internally needs special inserter
const QSet<QString> strings({"1", "3", "132"});
const QSet<int> i1 = Utils::transform(strings, [](const QString &s) { return s.toInt(); });
QCOMPARE(i1, QSet<int>({1, 3, 132}));
const QSet<int> i2 = Utils::transform(strings, stringToInt);
QCOMPARE(i2, QSet<int>({1, 3, 132}));
const QSet<int> i3 = Utils::transform(strings, &QString::size);
QCOMPARE(i3, QSet<int>({1, 3}));
}
// different container types
{
// QList to QSet
const QList<QString> strings({"1", "3", "132"});
const QSet<int> i1 = Utils::transform<QSet>(strings, [](const QString &s) { return s.toInt(); });
QCOMPARE(i1, QSet<int>({1, 3, 132}));
const QSet<int> i2 = Utils::transform<QSet>(strings, stringToInt);
QCOMPARE(i2, QSet<int>({1, 3, 132}));
const QSet<int> i3 = Utils::transform<QSet>(strings, &QString::size);
QCOMPARE(i3, QSet<int>({1, 3}));
}
{
// QStringList to QSet
const QStringList strings({"1", "3", "132"});
const QSet<int> i1 = Utils::transform<QSet>(strings, [](const QString &s) { return s.toInt(); });
QCOMPARE(i1, QSet<int>({1, 3, 132}));
const QSet<int> i2 = Utils::transform<QSet>(strings, stringToInt);
QCOMPARE(i2, QSet<int>({1, 3, 132}));
const QSet<int> i3 = Utils::transform<QSet>(strings, &QString::size);
QCOMPARE(i3, QSet<int>({1, 3}));
}
{
// QSet to QList
const QSet<QString> strings({"1", "3", "132"});
QList<int> i1 = Utils::transform<QList>(strings, [](const QString &s) { return s.toInt(); });
qSort(i1);
QCOMPARE(i1, QList<int>({1, 3, 132}));
QList<int> i2 = Utils::transform<QList>(strings, stringToInt);
qSort(i2);
QCOMPARE(i2, QList<int>({1, 3, 132}));
QList<int> i3 = Utils::transform<QList>(strings, &QString::size);
qSort(i3);
QCOMPARE(i3, QList<int>({1, 1, 3}));
}
}
QTEST_MAIN(tst_Algorithm)
#include "tst_algorithm.moc"

View File

@@ -1,6 +1,7 @@
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS += \ SUBDIRS += \
algorithm \
aggregation \ aggregation \
changeset \ changeset \
clangstaticanalyzer \ clangstaticanalyzer \