From fcb9ef50622a40bf35f24e833a9d135a65ee3f10 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Mon, 23 Jan 2023 12:33:39 +0200 Subject: [PATCH] QString: split some double/Nan/Inf unittests And switch to using test data rows (rooting out two macros in the process). Pick-to: 6.5 Change-Id: Ib31e6b59f90f0983c0efc4bef7cb246aedfcab5b Reviewed-by: Thiago Macieira --- .../auto/corelib/text/qstring/tst_qstring.cpp | 124 +++++++++++------- 1 file changed, 77 insertions(+), 47 deletions(-) diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 009fa7f7f8..450cc446c0 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -616,6 +616,10 @@ private slots: void fromUtf16_char16(); void latin1String(); + void isInf_data(); + void isInf(); + void isNan_data(); + void isNan(); void nanAndInf(); void compare_data(); void compare(); @@ -7003,58 +7007,84 @@ void tst_QString::latin1String() QVERIFY(!(s < QLatin1String("Hell"))); } +void tst_QString::isInf_data() +{ + QTest::addColumn("str"); + QTest::addColumn("expected_ok"); + QTest::addColumn("expected_is_inf"); + + QTest::newRow("inf") << u"inf"_s << true << true; + QTest::newRow("INF") << u"INF"_s << true << true; + QTest::newRow("inf ") << u"inf "_s << true << true; + QTest::newRow("+inf") << u"+inf"_s << true << true; + QTest::newRow("\t +INF") << u"\t +INF"_s << true << true; + QTest::newRow("\t INF") << u"\t INF"_s << true << true; + QTest::newRow("inF ") << u"inF "_s << true << true; + QTest::newRow("+iNf") << u"+iNf"_s << true << true; + QTest::newRow("INFe-10") << u"INFe-10"_s << false << false; + QTest::newRow("0xINF") << u"0xINF"_s << false << false; + QTest::newRow("- INF") << u"- INF"_s << false << false; + QTest::newRow("+ INF") << u"+ INF"_s << false << false; + QTest::newRow("-- INF") << u"-- INF"_s << false << false; + QTest::newRow("inf0") << u"inf0"_s << false << false; + QTest::newRow("--INF") << u"--INF"_s << false << false; + QTest::newRow("++INF") << u"++INF"_s << false << false; + QTest::newRow("INF++") << u"INF++"_s << false << false; + QTest::newRow("INF--") << u"INF--"_s << false << false; + QTest::newRow("INF +") << u"INF +"_s << false << false; + QTest::newRow("INF -") << u"INF -"_s << false << false; + QTest::newRow("0INF") << u"0INF"_s << false << false; +} + +void tst_QString::isInf() +{ + QFETCH(QString, str); + QFETCH(bool, expected_ok); + QFETCH(bool, expected_is_inf); + + bool ok = false; + double dbl = str.toDouble(&ok); + QVERIFY(ok == expected_ok); + QVERIFY(qIsInf(dbl) == expected_is_inf); +} + +void tst_QString::isNan_data() +{ + QTest::addColumn("str"); + QTest::addColumn("expected_ok"); + QTest::addColumn("expected_is_nan"); + + QTest::newRow("nan") << u"nan"_s << true << true; + QTest::newRow("NAN") << u"NAN"_s << true << true; + QTest::newRow("nan ") << u"nan "_s << true << true; + QTest::newRow("\t NAN") << u"\t NAN"_s << true << true; + QTest::newRow("\t NAN ") << u"\t NAN "_s << true << true; + QTest::newRow("-nan") << u"-nan"_s << false << false; + QTest::newRow("+NAN") << u"+NAN"_s << false << false; + QTest::newRow("NaN") << u"NaN"_s << true << true; + QTest::newRow("nAn") << u"nAn"_s << true << true; + QTest::newRow("NANe-10") << u"NANe-10"_s << false << false; + QTest::newRow("0xNAN") << u"0xNAN"_s << false << false; + QTest::newRow("0NAN") << u"0NAN"_s << false << false; +} + +void tst_QString::isNan() +{ + QFETCH(QString, str); + QFETCH(bool, expected_ok); + QFETCH(bool, expected_is_nan); + + bool ok = false; + double dbl = str.toDouble(&ok); + QVERIFY(ok == expected_ok); + QVERIFY(qIsNaN(dbl) == expected_is_nan); +} + void tst_QString::nanAndInf() { bool ok; double d; -#define CHECK_DOUBLE(str, expected_ok, expected_inf) \ - d = QString(str).toDouble(&ok); \ - QVERIFY(ok == expected_ok); \ - QVERIFY(qIsInf(d) == expected_inf); - - CHECK_DOUBLE("inf", true, true) - CHECK_DOUBLE("INF", true, true) - CHECK_DOUBLE("inf ", true, true) - CHECK_DOUBLE("+inf", true, true) - CHECK_DOUBLE("\t +INF", true, true) - CHECK_DOUBLE("\t INF", true, true) - CHECK_DOUBLE("inF ", true, true) - CHECK_DOUBLE("+iNf", true, true) - CHECK_DOUBLE("INFe-10", false, false) - CHECK_DOUBLE("0xINF", false, false) - CHECK_DOUBLE("- INF", false, false) - CHECK_DOUBLE("+ INF", false, false) - CHECK_DOUBLE("-- INF", false, false) - CHECK_DOUBLE("inf0", false, false) - CHECK_DOUBLE("--INF", false, false) - CHECK_DOUBLE("++INF", false, false) - CHECK_DOUBLE("INF++", false, false) - CHECK_DOUBLE("INF--", false, false) - CHECK_DOUBLE("INF +", false, false) - CHECK_DOUBLE("INF -", false, false) - CHECK_DOUBLE("0INF", false, false) -#undef CHECK_INF - -#define CHECK_NAN(str, expected_ok, expected_nan) \ - d = QString(str).toDouble(&ok); \ - QVERIFY(ok == expected_ok); \ - QVERIFY(qIsNaN(d) == expected_nan); - - CHECK_NAN("nan", true, true) - CHECK_NAN("NAN", true, true) - CHECK_NAN("nan ", true, true) - CHECK_NAN("\t NAN", true, true) - CHECK_NAN("\t NAN ", true, true) - CHECK_NAN("-nan", false, false) - CHECK_NAN("+NAN", false, false) - CHECK_NAN("NaN", true, true) - CHECK_NAN("nAn", true, true) - CHECK_NAN("NANe-10", false, false) - CHECK_NAN("0xNAN", false, false) - CHECK_NAN("0NAN", false, false) -#undef CHECK_NAN - d = QString("-INF").toDouble(&ok); QVERIFY(ok); QVERIFY(d == -qInf());