summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/global
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/global')
-rw-r--r--tests/auto/corelib/global/global.pro1
-rw-r--r--tests/auto/corelib/global/qflags/tst_qflags.cpp8
-rw-r--r--tests/auto/corelib/global/qfloat16/qfloat16.pro4
-rw-r--r--tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp266
-rw-r--r--tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp8
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp7
-rw-r--r--tests/auto/corelib/global/qglobalstatic/qglobalstatic.pro1
-rw-r--r--tests/auto/corelib/global/qlogging/test/test.pro2
8 files changed, 287 insertions, 10 deletions
diff --git a/tests/auto/corelib/global/global.pro b/tests/auto/corelib/global/global.pro
index 219e9de818..b4cc8035e6 100644
--- a/tests/auto/corelib/global/global.pro
+++ b/tests/auto/corelib/global/global.pro
@@ -5,6 +5,7 @@ SUBDIRS=\
qgetputenv \
qglobal \
qnumeric \
+ qfloat16 \
qrand \
qlogging \
qtendian \
diff --git a/tests/auto/corelib/global/qflags/tst_qflags.cpp b/tests/auto/corelib/global/qflags/tst_qflags.cpp
index 634d9a2df3..d70b099fe3 100644
--- a/tests/auto/corelib/global/qflags/tst_qflags.cpp
+++ b/tests/auto/corelib/global/qflags/tst_qflags.cpp
@@ -134,11 +134,11 @@ void tst_QFlags::signedness()
// underlying type is implementation-defined, we need to allow for
// a different signedness, so we only check that the relative
// signedness of the types matches:
- Q_STATIC_ASSERT((QtPrivate::QIsUnsignedEnum<Qt::MouseButton>::value ==
- QtPrivate::QIsUnsignedEnum<Qt::MouseButtons::Int>::value));
+ Q_STATIC_ASSERT((std::is_unsigned<typename std::underlying_type<Qt::MouseButton>::type>::value ==
+ std::is_unsigned<Qt::MouseButtons::Int>::value));
- Q_STATIC_ASSERT((QtPrivate::QIsSignedEnum<Qt::AlignmentFlag>::value ==
- QtPrivate::QIsSignedEnum<Qt::Alignment::Int>::value));
+ Q_STATIC_ASSERT((std::is_signed<typename std::underlying_type<Qt::AlignmentFlag>::type>::value ==
+ std::is_signed<Qt::Alignment::Int>::value));
}
#if defined(Q_COMPILER_CLASS_ENUM)
diff --git a/tests/auto/corelib/global/qfloat16/qfloat16.pro b/tests/auto/corelib/global/qfloat16/qfloat16.pro
new file mode 100644
index 0000000000..42081181b4
--- /dev/null
+++ b/tests/auto/corelib/global/qfloat16/qfloat16.pro
@@ -0,0 +1,4 @@
+CONFIG += testcase
+TARGET = tst_qfloat16
+QT = core testlib
+SOURCES = tst_qfloat16.cpp
diff --git a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
new file mode 100644
index 0000000000..c894a9c897
--- /dev/null
+++ b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
@@ -0,0 +1,266 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 by Southwest Research Institute (R)
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** 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-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QFloat16>
+
+#include <math.h>
+
+class tst_qfloat16: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void fuzzyCompare_data();
+ void fuzzyCompare();
+ void ltgt_data();
+ void ltgt();
+ void qNan();
+ void float_cast();
+ void float_cast_data();
+ void promotionTests();
+};
+
+void tst_qfloat16::fuzzyCompare_data()
+{
+ QTest::addColumn<qfloat16>("val1");
+ QTest::addColumn<qfloat16>("val2");
+ QTest::addColumn<bool>("fuzEqual");
+ QTest::addColumn<bool>("isEqual");
+
+ QTest::newRow("zero") << qfloat16(0.0f) << qfloat16(0.0f) << true << true;
+ QTest::newRow("ten") << qfloat16(1e1f) << qfloat16(1e1f) << true << true;
+ QTest::newRow("large") << qfloat16(1e4f) << qfloat16(1e4f) << true << true;
+ QTest::newRow("small") << qfloat16(1e-5f) << qfloat16(1e-5f) << true << true;
+ QTest::newRow("eps") << qfloat16(10.01f) << qfloat16(10.02f) << true << false;
+ QTest::newRow("eps2") << qfloat16(1024.f) << qfloat16(1033.f) << true << false;
+
+ QTest::newRow("mis1") << qfloat16(0.0f) << qfloat16(1.0f) << false << false;
+ QTest::newRow("mis2") << qfloat16(0.0f) << qfloat16(1e7f) << false << false;
+ QTest::newRow("mis3") << qfloat16(0.0f) << qfloat16(1e-4f) << false << false;
+ QTest::newRow("mis4") << qfloat16(1e8f) << qfloat16(1e-8f) << false << false;
+ QTest::newRow("mis5") << qfloat16(1e-4f) << qfloat16(1e-5) << false << false;
+ QTest::newRow("mis6") << qfloat16(1024.f) << qfloat16(1034.f) << false << false;
+}
+
+void tst_qfloat16::fuzzyCompare()
+{
+ QFETCH(qfloat16, val1);
+ QFETCH(qfloat16, val2);
+ QFETCH(bool, fuzEqual);
+ QFETCH(bool, isEqual);
+
+ if (!isEqual && (val1==val2))
+ qWarning() << "Identical arguments provided unintentionally!";
+
+ if (fuzEqual) {
+ QVERIFY(::qFuzzyCompare(val1, val2));
+ QVERIFY(::qFuzzyCompare(val2, val1));
+ QVERIFY(::qFuzzyCompare(-val1, -val2));
+ QVERIFY(::qFuzzyCompare(-val2, -val1));
+ } else {
+ QVERIFY(!::qFuzzyCompare(val1, val2));
+ QVERIFY(!::qFuzzyCompare(val2, val1));
+ QVERIFY(!::qFuzzyCompare(-val1, -val2));
+ QVERIFY(!::qFuzzyCompare(-val2, -val1));
+ }
+}
+
+void tst_qfloat16::ltgt_data()
+{
+ QTest::addColumn<float>("val1");
+ QTest::addColumn<float>("val2");
+
+ QTest::newRow("zero") << 0.0f << 0.0f;
+ QTest::newRow("ten") << 10.0f << 10.0f;
+ QTest::newRow("large") << 100000.0f << 100000.0f;
+ QTest::newRow("small") << 0.0000001f << 0.0000001f;
+ QTest::newRow("eps") << 10.000000000000001f << 10.00000000000002f;
+ QTest::newRow("eps2") << 10.000000000000001f << 10.000000000000009f;
+
+ QTest::newRow("mis1") << 0.0f << 1.0f;
+ QTest::newRow("mis2") << 0.0f << 10000000.0f;
+ QTest::newRow("mis3") << 0.0f << 0.0001f;
+ QTest::newRow("mis4") << 100000000.0f << 0.000000001f;
+ QTest::newRow("mis5") << 0.0001f << 0.00001f;
+
+ QTest::newRow("45,23") << 45.f << 23.f;
+ QTest::newRow("1000,76") << 1000.f << 76.f;
+}
+
+void tst_qfloat16::ltgt()
+{
+ QFETCH(float, val1);
+ QFETCH(float, val2);
+
+ QCOMPARE(qfloat16(val1) == qfloat16(val2), val1 == val2);
+ QCOMPARE(qfloat16(val1) < qfloat16(val2), val1 < val2);
+ QCOMPARE(qfloat16(val1) <= qfloat16(val2), val1 <= val2);
+ QCOMPARE(qfloat16(val1) > qfloat16(val2), val1 > val2);
+ QCOMPARE(qfloat16(val1) >= qfloat16(val2), val1 >= val2);
+
+ QCOMPARE(qfloat16(val1) == qfloat16(-val2), val1 == -val2);
+ QCOMPARE(qfloat16(val1) < qfloat16(-val2), val1 < -val2);
+ QCOMPARE(qfloat16(val1) <= qfloat16(-val2), val1 <= -val2);
+ QCOMPARE(qfloat16(val1) > qfloat16(-val2), val1 > -val2);
+ QCOMPARE(qfloat16(val1) >= qfloat16(-val2), val1 >= -val2);
+
+ QCOMPARE(qfloat16(-val1) == qfloat16(val2), -val1 == val2);
+ QCOMPARE(qfloat16(-val1) < qfloat16(val2), -val1 < val2);
+ QCOMPARE(qfloat16(-val1) <= qfloat16(val2), -val1 <= val2);
+ QCOMPARE(qfloat16(-val1) > qfloat16(val2), -val1 > val2);
+ QCOMPARE(qfloat16(-val1) >= qfloat16(val2), -val1 >= val2);
+
+ QCOMPARE(qfloat16(-val1) == qfloat16(-val2), -val1 == -val2);
+ QCOMPARE(qfloat16(-val1) < qfloat16(-val2), -val1 < -val2);
+ QCOMPARE(qfloat16(-val1) <= qfloat16(-val2), -val1 <= -val2);
+ QCOMPARE(qfloat16(-val1) > qfloat16(-val2), -val1 > -val2);
+ QCOMPARE(qfloat16(-val1) >= qfloat16(-val2), -val1 >= -val2);
+}
+
+#if defined __FAST_MATH__ && (__GNUC__ * 100 + __GNUC_MINOR__ >= 404)
+ // turn -ffast-math off
+# pragma GCC optimize "no-fast-math"
+#endif
+
+void tst_qfloat16::qNan()
+{
+#if defined __FAST_MATH__ && (__GNUC__ * 100 + __GNUC_MINOR__ < 404)
+ QSKIP("Non-conformant fast math mode is enabled, cannot run test");
+#endif
+ qfloat16 nan = qQNaN();
+ QVERIFY(!(0. > nan));
+ QVERIFY(!(0. < nan));
+ QVERIFY(qIsNaN(nan));
+ QVERIFY(qIsNaN(nan + 1.f));
+ QVERIFY(qIsNaN(-nan));
+ qfloat16 inf = qInf();
+ QVERIFY(inf > qfloat16(0));
+ QVERIFY(-inf < qfloat16(0));
+ QVERIFY(qIsInf(inf));
+ QVERIFY(qIsInf(-inf));
+ QVERIFY(qIsInf(2.f*inf));
+ QVERIFY(qIsInf(inf*2.f));
+ QCOMPARE(qfloat16(1.f/inf), qfloat16(0.f));
+#ifdef Q_CC_INTEL
+ QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue);
+#endif
+ QVERIFY(qIsNaN(nan*0.f));
+#ifdef Q_CC_INTEL
+ QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue);
+#endif
+ QVERIFY(qIsNaN(inf*0.f));
+ QVERIFY(qFuzzyCompare(qfloat16(1.f/inf), qfloat16(0.0)));
+}
+
+void tst_qfloat16::float_cast_data()
+{
+ QTest::addColumn<float>("val");
+
+ QTest::newRow("zero") << 0.f;
+ QTest::newRow("one") << 1e0f;
+ QTest::newRow("ten") << 1e1f;
+ QTest::newRow("hund") << 1e2f;
+ QTest::newRow("thou") << 1e3f;
+ QTest::newRow("tthou") << 1e4f;
+ //QTest::newRow("hthou") << 1e5f;
+ //QTest::newRow("mil") << 1e6f;
+ //QTest::newRow("tmil") << 1e7f;
+ //QTest::newRow("hmil") << 1e8f;
+}
+
+void tst_qfloat16::float_cast()
+{
+ QFETCH(float, val);
+
+ QVERIFY(qFuzzyCompare(float(qfloat16(val)),val));
+ QVERIFY(qFuzzyCompare(float(qfloat16(-val)),-val));
+}
+
+void tst_qfloat16::promotionTests()
+{
+ QCOMPARE(sizeof(qfloat16),sizeof(qfloat16(1.f)+qfloat16(1.f)));
+ QCOMPARE(sizeof(qfloat16),sizeof(qfloat16(1.f)-qfloat16(1.f)));
+ QCOMPARE(sizeof(qfloat16),sizeof(qfloat16(1.f)*qfloat16(1.f)));
+ QCOMPARE(sizeof(qfloat16),sizeof(qfloat16(1.f)/qfloat16(1.f)));
+
+ QCOMPARE(sizeof(float),sizeof(1.f+qfloat16(1.f)));
+ QCOMPARE(sizeof(float),sizeof(1.f-qfloat16(1.f)));
+ QCOMPARE(sizeof(float),sizeof(1.f*qfloat16(1.f)));
+ QCOMPARE(sizeof(float),sizeof(1.f/qfloat16(1.f)));
+
+ QCOMPARE(sizeof(float),sizeof(qfloat16(1.f)+1.f));
+ QCOMPARE(sizeof(float),sizeof(qfloat16(1.f)-1.f));
+ QCOMPARE(sizeof(float),sizeof(qfloat16(1.f)*1.f));
+ QCOMPARE(sizeof(float),sizeof(qfloat16(1.f)/1.f));
+
+ QCOMPARE(sizeof(double),sizeof(1.+qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1.-qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1.*qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1./qfloat16(1.f)));
+
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)+1.));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)-1.));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)*1.));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)/1.));
+
+ QCOMPARE(sizeof(long double),sizeof((long double)(1.)+qfloat16(1.f)));
+ QCOMPARE(sizeof(long double),sizeof((long double)(1.)-qfloat16(1.f)));
+ QCOMPARE(sizeof(long double),sizeof((long double)(1.)*qfloat16(1.f)));
+ QCOMPARE(sizeof(long double),sizeof((long double)(1.)/qfloat16(1.f)));
+
+ QCOMPARE(sizeof(long double),sizeof(qfloat16(1.f)+(long double)(1.)));
+ QCOMPARE(sizeof(long double),sizeof(qfloat16(1.f)-(long double)(1.)));
+ QCOMPARE(sizeof(long double),sizeof(qfloat16(1.f)*(long double)(1.)));
+ QCOMPARE(sizeof(long double),sizeof(qfloat16(1.f)/(long double)(1.)));
+
+ QCOMPARE(sizeof(double),sizeof(1+qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1-qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1*qfloat16(1.f)));
+ QCOMPARE(sizeof(double),sizeof(1/qfloat16(1.f)));
+
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)+1));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)-1));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)*1));
+ QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)/1));
+}
+
+QTEST_APPLESS_MAIN(tst_qfloat16)
+#include "tst_qfloat16.moc"
diff --git a/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp b/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
index 7ffb5d0fd7..66fc578d5f 100644
--- a/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
+++ b/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
@@ -112,13 +112,13 @@ void tst_QGetPutEnv::intValue_data()
ROW(0xffffffff, 0, false);
const int bases[] = {10, 8, 16};
for (size_t i = 0; i < sizeof bases / sizeof *bases; ++i) {
- QTest::newRow(qPrintable(QString::asprintf("INT_MAX, base %d", bases[i])))
+ QTest::addRow("INT_MAX, base %d", bases[i])
<< QByteArray::number(INT_MAX) << INT_MAX << true;
- QTest::newRow(qPrintable(QString::asprintf("INT_MAX+1, base %d", bases[i])))
+ QTest::addRow("INT_MAX+1, base %d", bases[i])
<< QByteArray::number(qlonglong(INT_MAX) + 1) << 0 << false;
- QTest::newRow(qPrintable(QString::asprintf("INT_MIN, base %d", bases[i])))
+ QTest::addRow("INT_MIN, base %d", bases[i])
<< QByteArray::number(INT_MIN) << INT_MIN << true;
- QTest::newRow(qPrintable(QString::asprintf("INT_MIN-1, base %d", bases[i])))
+ QTest::addRow("INT_MIN-1, base %d", bases[i])
<< QByteArray::number(qlonglong(INT_MIN) - 1) << 0 << false;
};
}
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index bb6ec1c8e7..083526fdc4 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -102,6 +102,13 @@ void tst_QGlobal::for_each()
QCOMPARE(i, counter++);
}
QCOMPARE(counter, list.count());
+
+ // check whether we can use a lambda
+ counter = 0;
+ foreach (int i, [&](){ return list; }()) {
+ QCOMPARE(i, counter++);
+ }
+ QCOMPARE(counter, list.count());
}
void tst_QGlobal::qassert()
diff --git a/tests/auto/corelib/global/qglobalstatic/qglobalstatic.pro b/tests/auto/corelib/global/qglobalstatic/qglobalstatic.pro
index 056d940da7..21bb040b8d 100644
--- a/tests/auto/corelib/global/qglobalstatic/qglobalstatic.pro
+++ b/tests/auto/corelib/global/qglobalstatic/qglobalstatic.pro
@@ -5,7 +5,6 @@ QT -= gui
TARGET = tst_qglobalstatic
CONFIG += console
-CONFIG -= app_bundle
CONFIG += exceptions
SOURCES += tst_qglobalstatic.cpp
diff --git a/tests/auto/corelib/global/qlogging/test/test.pro b/tests/auto/corelib/global/qlogging/test/test.pro
index 93eee7307a..7c46ae9d16 100644
--- a/tests/auto/corelib/global/qlogging/test/test.pro
+++ b/tests/auto/corelib/global/qlogging/test/test.pro
@@ -1,5 +1,5 @@
CONFIG += testcase
-CONFIG -= app_bundle debug_and_release_target
+CONFIG -= debug_and_release_target
qtConfig(c++11): CONFIG += c++11
qtConfig(c++14): CONFIG += c++14
TARGET = ../tst_qlogging