From 0556366ddb3a59071256a5646c3c82e7da23d619 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Thu, 29 Aug 2019 15:24:52 +0200 Subject: [PATCH] Deduplicate list-building code in QDateTime benchmark Aside from the start-date and the end-date, and a variant with a time-zone, the lists various tests were building were all built the same way; so pack that up as a pair of functions (one without time-zone, one with) to save duplication. Make the list in each function const, ready for conversion of foreach loops to ranged for. In the process, replace QList with QVector, reserve space before we populate and use auto for the now-const list variables it's saved in. Change-Id: I7d8cce459a4d6111cd645e8d3966ad769ab7e201 Reviewed-by: Marc Mutz --- .../corelib/time/qdatetime/main.cpp | 165 ++++++------------ 1 file changed, 57 insertions(+), 108 deletions(-) diff --git a/tests/benchmarks/corelib/time/qdatetime/main.cpp b/tests/benchmarks/corelib/time/qdatetime/main.cpp index e616181bea1..2730e7e18b4 100644 --- a/tests/benchmarks/corelib/time/qdatetime/main.cpp +++ b/tests/benchmarks/corelib/time/qdatetime/main.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include class tst_QDateTime : public QObject @@ -49,6 +50,9 @@ class tst_QDateTime : public QObject JULIAN_DAY_2060 = 2473460 }; + static QVector daily(qint64 start, qint64 end); + static QVector norse(qint64 start, qint64 end); + private Q_SLOTS: void create(); void isNull(); @@ -98,6 +102,25 @@ private Q_SLOTS: void fromMSecsSinceEpochTz(); }; +QVector tst_QDateTime::daily(qint64 start, qint64 end) +{ + QVector list; + list.reserve(end - start); + for (int jd = start; jd < end; ++jd) + list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + return list; +} + +QVector tst_QDateTime::norse(qint64 start, qint64 end) +{ + const QTimeZone cet("Europe/Oslo"); + QVector list; + list.reserve(end - start); + for (int jd = start; jd < end; ++jd) + list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + return list; +} + void tst_QDateTime::create() { QBENCHMARK { @@ -110,9 +133,7 @@ void tst_QDateTime::create() void tst_QDateTime::isNull() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.isNull(); @@ -121,9 +142,7 @@ void tst_QDateTime::isNull() void tst_QDateTime::isValid() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.isValid(); @@ -132,9 +151,7 @@ void tst_QDateTime::isValid() void tst_QDateTime::date() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.date(); @@ -143,9 +160,7 @@ void tst_QDateTime::date() void tst_QDateTime::time() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.time(); @@ -154,9 +169,7 @@ void tst_QDateTime::time() void tst_QDateTime::timeSpec() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.timeSpec(); @@ -165,9 +178,7 @@ void tst_QDateTime::timeSpec() void tst_QDateTime::offsetFromUtc() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.offsetFromUtc(); @@ -176,9 +187,7 @@ void tst_QDateTime::offsetFromUtc() void tst_QDateTime::timeZoneAbbreviation() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.timeZoneAbbreviation(); @@ -187,9 +196,7 @@ void tst_QDateTime::timeZoneAbbreviation() void tst_QDateTime::toMSecsSinceEpoch() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.toMSecsSinceEpoch(); @@ -198,9 +205,7 @@ void tst_QDateTime::toMSecsSinceEpoch() void tst_QDateTime::toMSecsSinceEpoch1950() { - QList list; - for (int jd = JULIAN_DAY_1950; jd < JULIAN_DAY_1960; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_1950, JULIAN_DAY_1960); QBENCHMARK { foreach (const QDateTime &test, list) test.toMSecsSinceEpoch(); @@ -209,9 +214,7 @@ void tst_QDateTime::toMSecsSinceEpoch1950() void tst_QDateTime::toMSecsSinceEpoch2050() { - QList list; - for (int jd = JULIAN_DAY_2050; jd < JULIAN_DAY_2060; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2050, JULIAN_DAY_2060); QBENCHMARK { foreach (const QDateTime &test, list) test.toMSecsSinceEpoch(); @@ -220,11 +223,8 @@ void tst_QDateTime::toMSecsSinceEpoch2050() void tst_QDateTime::toMSecsSinceEpochTz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); qint64 result; - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) result = test.toMSecsSinceEpoch(); @@ -234,11 +234,8 @@ void tst_QDateTime::toMSecsSinceEpochTz() void tst_QDateTime::toMSecsSinceEpoch1950Tz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); qint64 result; - QList list; - for (int jd = JULIAN_DAY_1950; jd < JULIAN_DAY_1960; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_1950, JULIAN_DAY_1960); QBENCHMARK { foreach (const QDateTime &test, list) result = test.toMSecsSinceEpoch(); @@ -248,11 +245,8 @@ void tst_QDateTime::toMSecsSinceEpoch1950Tz() void tst_QDateTime::toMSecsSinceEpoch2050Tz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); qint64 result; - QList list; - for (int jd = JULIAN_DAY_2050; jd < JULIAN_DAY_2060; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_2050, JULIAN_DAY_2060); QBENCHMARK { foreach (const QDateTime &test, list) result = test.toMSecsSinceEpoch(); @@ -262,9 +256,7 @@ void tst_QDateTime::toMSecsSinceEpoch2050Tz() void tst_QDateTime::setDate() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setDate(QDate::fromJulianDay(JULIAN_DAY_2010)); @@ -273,9 +265,7 @@ void tst_QDateTime::setDate() void tst_QDateTime::setTime() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setTime(QTime(12, 0, 0)); @@ -284,9 +274,7 @@ void tst_QDateTime::setTime() void tst_QDateTime::setTimeSpec() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setTimeSpec(Qt::UTC); @@ -295,9 +283,7 @@ void tst_QDateTime::setTimeSpec() void tst_QDateTime::setOffsetFromUtc() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setOffsetFromUtc(3600); @@ -307,9 +293,7 @@ void tst_QDateTime::setOffsetFromUtc() void tst_QDateTime::setMSecsSinceEpoch() { qint64 msecs = qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970 + 180) * MSECS_PER_DAY; - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setMSecsSinceEpoch(msecs); @@ -318,11 +302,8 @@ void tst_QDateTime::setMSecsSinceEpoch() void tst_QDateTime::setMSecsSinceEpochTz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); - QList list; const qint64 msecs = qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970 + 180) * MSECS_PER_DAY; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (QDateTime test, list) test.setMSecsSinceEpoch(msecs); @@ -331,9 +312,7 @@ void tst_QDateTime::setMSecsSinceEpochTz() void tst_QDateTime::toString() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2011; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2011); QBENCHMARK { foreach (const QDateTime &test, list) test.toString(QStringLiteral("yyy-MM-dd hh:mm:ss.zzz t")); @@ -342,9 +321,7 @@ void tst_QDateTime::toString() void tst_QDateTime::toStringTextFormat() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2011; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2011); QBENCHMARK { foreach (const QDateTime &test, list) test.toString(Qt::TextDate); @@ -353,9 +330,7 @@ void tst_QDateTime::toStringTextFormat() void tst_QDateTime::toStringIsoFormat() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2011; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2011); QBENCHMARK { foreach (const QDateTime &test, list) test.toString(Qt::ISODate); @@ -364,10 +339,8 @@ void tst_QDateTime::toStringIsoFormat() void tst_QDateTime::addDays() { - QList list; + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QDateTime next; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); QBENCHMARK { foreach (const QDateTime &test, list) next = test.addDays(1); @@ -377,10 +350,7 @@ void tst_QDateTime::addDays() void tst_QDateTime::addDaysTz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) QDateTime result = test.addDays(1); @@ -389,10 +359,8 @@ void tst_QDateTime::addDaysTz() void tst_QDateTime::addMSecs() { - QList list; + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QDateTime next; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); QBENCHMARK { foreach (const QDateTime &test, list) next = test.addMSecs(1); @@ -402,10 +370,7 @@ void tst_QDateTime::addMSecs() void tst_QDateTime::addMSecsTz() { - QTimeZone cet = QTimeZone("Europe/Oslo"); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); + const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) QDateTime result = test.addMSecs(1); @@ -414,9 +379,7 @@ void tst_QDateTime::addMSecsTz() void tst_QDateTime::toTimeSpec() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.toTimeSpec(Qt::UTC); @@ -425,9 +388,7 @@ void tst_QDateTime::toTimeSpec() void tst_QDateTime::toOffsetFromUtc() { - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.toOffsetFromUtc(3600); @@ -438,9 +399,7 @@ void tst_QDateTime::daysTo() { const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.daysTo(other); @@ -451,9 +410,7 @@ void tst_QDateTime::msecsTo() { const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) test.msecsTo(other); @@ -465,9 +422,7 @@ void tst_QDateTime::equivalent() bool result; const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) result = (test == other); @@ -480,9 +435,7 @@ void tst_QDateTime::equivalentUtc() bool result = false; const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) result = (test == other); @@ -495,9 +448,7 @@ void tst_QDateTime::lessThan() bool result = false; const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) result = (test < other); @@ -510,9 +461,7 @@ void tst_QDateTime::lessThanUtc() bool result = false; const QDateTime other = QDateTime::fromMSecsSinceEpoch( qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC); - QList list; - for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) - list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); + const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020); QBENCHMARK { foreach (const QDateTime &test, list) result = (test < other);