diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2020-04-15 18:31:51 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2021-04-29 14:13:23 +0200 |
commit | 6dfec83051c3426fcf2336f8b7acfdc290efe94c (patch) | |
tree | b6b9ab31164a48035024df1b01d498de20887003 /tests/auto/corelib/global | |
parent | 16c96837182056a1a755e420289dce8a57341c6c (diff) |
Add tests for qFuzzyIsNull() to tst_QNumeric and tst_QFloat16
They were missing.
I also wanted to verify that it's true for sub-normal values.
At the same time, relocate qfloat16's implementation of qFuzzyIsNull()
to between those of qFuzzyCompare() and qIsNull(), since its apparent
absence initially confused me.
Change-Id: I9637c0070e754d16744c76fc9f846596257c6a63
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/global')
-rw-r--r-- | tests/auto/corelib/global/qfloat16/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp | 31 | ||||
-rw-r--r-- | tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp | 38 |
3 files changed, 69 insertions, 2 deletions
diff --git a/tests/auto/corelib/global/qfloat16/CMakeLists.txt b/tests/auto/corelib/global/qfloat16/CMakeLists.txt index b2848846fa..1dbc95ec95 100644 --- a/tests/auto/corelib/global/qfloat16/CMakeLists.txt +++ b/tests/auto/corelib/global/qfloat16/CMakeLists.txt @@ -7,4 +7,6 @@ qt_internal_add_test(tst_qfloat16 SOURCES tst_qfloat16.cpp + PUBLIC_LIBRARIES + Qt::TestPrivate ) diff --git a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp index 96051cbe2c..71a05d3031 100644 --- a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp +++ b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Copyright (C) 2016 by Southwest Research Institute (R) ** Contact: https://www.qt.io/licensing/ ** @@ -43,6 +43,8 @@ class tst_qfloat16: public QObject private slots: void fuzzyCompare_data(); void fuzzyCompare(); + void fuzzyIsNull_data(); + void fuzzyIsNull(); void ltgt_data(); void ltgt(); void qNaN(); @@ -111,6 +113,33 @@ void tst_qfloat16::fuzzyCompare() } } +void tst_qfloat16::fuzzyIsNull_data() +{ + QTest::addColumn<qfloat16>("value"); + QTest::addColumn<bool>("isNull"); + using Bounds = std::numeric_limits<qfloat16>; + const qfloat16 one(1), huge(1000), tiny(0.00099f); + + QTest::newRow("zero") << qfloat16(0.0f) << true; + QTest::newRow("min") << Bounds::min() << true; + QTest::newRow("denorm_min") << Bounds::denorm_min() << true; + QTest::newRow("tiny") << tiny << true; + + QTest::newRow("deci") << qfloat16(.1) << false; + QTest::newRow("one") << one << false; + QTest::newRow("ten") << qfloat16(10) << false; + QTest::newRow("huge") << huge << false; +} + +void tst_qfloat16::fuzzyIsNull() +{ + QFETCH(qfloat16, value); + QFETCH(bool, isNull); + + QCOMPARE(::qFuzzyIsNull(value), isNull); + QCOMPARE(::qFuzzyIsNull(-value), isNull); +} + void tst_qfloat16::ltgt_data() { QTest::addColumn<float>("val1"); diff --git a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp index 0cfb8541ab..5b54eeae01 100644 --- a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp +++ b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -52,6 +52,8 @@ class tst_QNumeric: public QObject // Support for floating-point: template<typename F> inline void fuzzyCompare_data(); template<typename F> inline void fuzzyCompare(); + template<typename F> inline void fuzzyIsNull_data(); + template<typename F> inline void fuzzyIsNull(); template<typename F> inline void checkNaN(F nan); template<typename F> inline void rawNaN_data(); template<typename F> inline void rawNaN(); @@ -71,6 +73,10 @@ private slots: void fuzzyCompareF() { fuzzyCompare<float>(); } void fuzzyCompareD_data() { fuzzyCompare_data<double>(); } void fuzzyCompareD() { fuzzyCompare<double>(); } + void fuzzyIsNullF_data() { fuzzyIsNull_data<float>(); } + void fuzzyIsNullF() { fuzzyIsNull<float>(); } + void fuzzyIsNullD_data() { fuzzyIsNull_data<double>(); } + void fuzzyIsNullD() { fuzzyIsNull<double>(); } void rawNaNF_data() { rawNaN_data<float>(); } void rawNaNF() { rawNaN<float>(); } void rawNaND_data() { rawNaN_data<double>(); } @@ -143,6 +149,36 @@ void tst_QNumeric::fuzzyCompare() QCOMPARE(::qFuzzyCompare(-val2, -val1), isEqual); } +template<typename F> +void tst_QNumeric::fuzzyIsNull_data() +{ + QTest::addColumn<F>("value"); + QTest::addColumn<bool>("isNull"); + using Bounds = std::numeric_limits<F>; + const F one(1), huge = Fuzzy<F>::scale, tiny = one / huge; + + QTest::newRow("zero") << F(0) << true; + QTest::newRow("min") << Bounds::min() << true; + QTest::newRow("denorm_min") << Bounds::denorm_min() << true; + QTest::newRow("tiny") << tiny << true; + + QTest::newRow("deci") << F(.1) << false; + QTest::newRow("one") << one << false; + QTest::newRow("ten") << F(10) << false; + QTest::newRow("large") << F(1e9) << false; + QTest::newRow("huge") << huge << false; +} + +template<typename F> +void tst_QNumeric::fuzzyIsNull() +{ + QFETCH(F, value); + QFETCH(bool, isNull); + + QCOMPARE(::qFuzzyIsNull(value), isNull); + QCOMPARE(::qFuzzyIsNull(-value), isNull); +} + #if defined __FAST_MATH__ && (__GNUC__ * 100 + __GNUC_MINOR__ >= 404) // turn -ffast-math off # pragma GCC optimize "no-fast-math" |