From 32925d0a85b13d2a8032e580db544af5cdfecf8b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 2 Jun 2022 20:22:01 +0200 Subject: tst_tostring: add benchmarks for QCOMPARE vs. QCOMPARE_EQ There's currently no statistically-significant difference between the two, due to a huge pessimistion in QTestLib where every QCOMPARE* and QVERIFY writes 1KiB of data onto the stack before doing anything else, so I'm not reporting numbers in this commit message. Pick-to: 6.4 Task-number: QTBUG-98873 Task-number: QTBUG-98874 Change-Id: I233878596f0a8fe6b96360adb839fecd72c398a2 Reviewed-by: Ivan Solovev Reviewed-by: Edward Welbourne --- tests/benchmarks/testlib/tostring/tst_tostring.cpp | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'tests') diff --git a/tests/benchmarks/testlib/tostring/tst_tostring.cpp b/tests/benchmarks/testlib/tostring/tst_tostring.cpp index 913a0337c6..c72ec220b1 100644 --- a/tests/benchmarks/testlib/tostring/tst_tostring.cpp +++ b/tests/benchmarks/testlib/tostring/tst_tostring.cpp @@ -25,6 +25,36 @@ private slots: void quint64Tst() { numeric(); } void qint64Tst_data() { numeric_data(); } void qint64Tst() { numeric(); } + +private: + template void compare(); + template void compare_eq(); + +private slots: + void floatCompare_data() { numeric_data(); } + void floatCompare() { compare(); } + void floatCompareEq_data() { numeric_data(); } + void floatCompareEq() { compare_eq(); } + void doubleCompare_data() { numeric_data(); } + void doubleCompare() { compare(); } + void doubleCompareEq_data() { numeric_data(); } + void doubleCompareEq() { compare_eq(); } + void intCompare_data() { numeric_data(); } + void intCompare() { compare(); } + void intCompareEq_data() { numeric_data(); } + void intCompareEq() { compare_eq(); } + void unsignedCompare_data() { numeric_data(); } + void unsignedCompare() { compare(); } + void unsignedCompareEq_data() { numeric_data(); } + void unsignedCompareEq() { compare_eq(); } + void quint64Compare_data() { numeric_data(); } + void quint64Compare() { compare(); } + void quint64CompareEq_data() { numeric_data(); } + void quint64CompareEq() { compare_eq(); } + void qint64Compare_data() { numeric_data(); } + void qint64Compare() { compare(); } + void qint64CompareEq_data() { numeric_data(); } + void qint64CompareEq() { compare_eq(); } }; template @@ -75,5 +105,30 @@ void tst_toString::numeric() } } +template +void tst_toString::compare() +{ + QFETCH(T, datum); + + QBENCHMARK { + QCOMPARE(datum, datum); + } +} + +template +void tst_toString::compare_eq() +{ + QFETCH(T, datum); + + if constexpr (std::numeric_limits::has_quiet_NaN) { + if (qIsNaN(datum)) + QSKIP("Unlike QCOMPARE, QCOMPARE_EQ doesn't handle NaN specially"); + } + + QBENCHMARK { + QCOMPARE_EQ(datum, datum); + } +} + QTEST_MAIN(tst_toString) #include "tst_tostring.moc" -- cgit v1.2.3