diff options
Diffstat (limited to 'tests/benchmarks/testlib/tostring/tst_tostring.cpp')
-rw-r--r-- | tests/benchmarks/testlib/tostring/tst_tostring.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/benchmarks/testlib/tostring/tst_tostring.cpp b/tests/benchmarks/testlib/tostring/tst_tostring.cpp new file mode 100644 index 0000000000..1731929f98 --- /dev/null +++ b/tests/benchmarks/testlib/tostring/tst_tostring.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** 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 <QtCore/qmath.h> // pi, e + +// Tests for QTest::toString +class tst_toString : public QObject +{ + Q_OBJECT + + template <typename T> void numeric_data(); + template <typename T> void numeric(); + +private slots: + void floatTst_data() { numeric_data<float>(); } + void floatTst() { numeric<float>(); } + void doubleTst_data() { numeric_data<double>(); } + void doubleTst() { numeric<double>(); } + void intTst_data() { numeric_data<int>(); } + void intTst() { numeric<int>(); } + void unsignedTst_data() { numeric_data<unsigned>(); } + void unsignedTst() { numeric<unsigned>(); } + void quint64Tst_data() { numeric_data<quint64>(); } + void quint64Tst() { numeric<quint64>(); } + void qint64Tst_data() { numeric_data<qint64>(); } + void qint64Tst() { numeric<qint64>(); } +}; + +template <typename T> +void tst_toString::numeric_data() +{ + QTest::addColumn<T>("datum"); + const bool floaty = std::is_floating_point<T>::value; + + QTest::newRow("zero") << T(0); + QTest::newRow("one") << T(1); + if (floaty) { + QTest::newRow("pi") << T(M_PI); + QTest::newRow("e") << T(M_E); + + // Stress canonicalisation of leading zeros on exponents: + QTest::newRow("milli") << T(1e-3); + QTest::newRow("micro") << T(1e-6); + QTest::newRow("mu0") << T(.4e-6 * M_PI); // Henry/metre + QTest::newRow("Planck") << T(662.606876e-36); // Joule.second/turn + } + QTest::newRow("2e9") << T(2000000000); + QTest::newRow("c.s/m") << T(299792458); + QTest::newRow("Avogadro") << T(6.022045e+23); // things/mol (.996 << 79, so ints overflow to max) + + QTest::newRow("lowest") << std::numeric_limits<T>::lowest(); + QTest::newRow("max") << std::numeric_limits<T>::max(); + if (floaty) { + QTest::newRow("min") << std::numeric_limits<T>::min(); + + if (std::numeric_limits<T>::has_infinity) { + const T uge = std::numeric_limits<T>::infinity(); + QTest::newRow("inf") << uge; + QTest::newRow("-inf") << -uge; + } + if (std::numeric_limits<T>::has_quiet_NaN) + QTest::newRow("nan") << std::numeric_limits<T>::quiet_NaN(); + } +} + +template <typename T> +void tst_toString::numeric() +{ + QFETCH(T, datum); + + QBENCHMARK { + QTest::toString<T>(datum); + } +} + +QTEST_MAIN(tst_toString) +#include "tst_tostring.moc" |