Add a test for container API symmetry
Akin to the successful tst_QStringApiSymmetry, add such a test for generic containers, too. Yes, we have tst_collections, but it's a cut'n'paste mess that makes it hard to systematically perform cross-class checks for consistency. This new test, still in its infancy, uses templates and thus ensures that exactly the same checks are run on all containers. Starting out with front()/back(), which the string classes were found to lack, we will build this test up, as we did and continue to do with the string API one. Change-Id: I07323340b5612ecc658232b2776d788018010d0d Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
5e93361888
commit
95263dbf7a
1
tests/auto/corelib/tools/containerapisymmetry/.gitignore
vendored
Normal file
1
tests/auto/corelib/tools/containerapisymmetry/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
tst_containerapisymmetry
|
@ -0,0 +1,7 @@
|
||||
CONFIG += testcase
|
||||
TARGET = tst_containerapisymmetry
|
||||
SOURCES += tst_containerapisymmetry.cpp
|
||||
QT = core testlib
|
||||
|
||||
# This test does not work with strict iterators
|
||||
DEFINES -= QT_STRICT_ITERATORS
|
@ -0,0 +1,84 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** 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.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
|
||||
#include "qlinkedlist.h"
|
||||
#include "qlist.h"
|
||||
#include "qvarlengtharray.h"
|
||||
#include "qvector.h"
|
||||
|
||||
#include <vector> // for reference
|
||||
|
||||
class tst_ContainerApiSymmetry : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
template <typename Container>
|
||||
void front_back_impl() const;
|
||||
|
||||
private Q_SLOTS:
|
||||
void front_back_std_vector() { front_back_impl<std::vector<int>>(); }
|
||||
void front_back_QVector() { front_back_impl<QVector<int>>(); }
|
||||
void front_back_QList() { front_back_impl<QList<qintptr>>(); }
|
||||
void front_back_QLinkedList() { front_back_impl<QLinkedList<int>>(); }
|
||||
void front_back_QVarLengthArray() { front_back_impl<QVarLengthArray<int>>(); }
|
||||
};
|
||||
|
||||
template <typename Container>
|
||||
Container make(int size)
|
||||
{
|
||||
Container c;
|
||||
int i = 1;
|
||||
while (size--)
|
||||
c.push_back(typename Container::value_type(i++));
|
||||
return c;
|
||||
}
|
||||
|
||||
template <typename T> T clean(T &&t) { return std::forward<T>(t); }
|
||||
|
||||
template <typename Container>
|
||||
void tst_ContainerApiSymmetry::front_back_impl() const
|
||||
{
|
||||
using V = typename Container::value_type;
|
||||
auto c1 = make<Container>(1);
|
||||
QCOMPARE(clean(c1.front()), V(1));
|
||||
QCOMPARE(clean(c1.back()), V(1));
|
||||
QCOMPARE(clean(qAsConst(c1).front()), V(1));
|
||||
QCOMPARE(clean(qAsConst(c1).back()), V(1));
|
||||
|
||||
auto c2 = make<Container>(2);
|
||||
QCOMPARE(clean(c2.front()), V(1));
|
||||
QCOMPARE(clean(c2.back()), V(2));
|
||||
QCOMPARE(clean(qAsConst(c2).front()), V(1));
|
||||
QCOMPARE(clean(qAsConst(c2).back()), V(2));
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(tst_ContainerApiSymmetry)
|
||||
#include "tst_containerapisymmetry.moc"
|
@ -1,6 +1,7 @@
|
||||
TEMPLATE=subdirs
|
||||
SUBDIRS=\
|
||||
collections \
|
||||
containerapisymmetry \
|
||||
qalgorithms \
|
||||
qarraydata \
|
||||
qarraydata_strictiterators \
|
||||
|
Loading…
Reference in New Issue
Block a user