Fix some bogus date calculations in QDateTime's benchmark

Multiplying a Julian Day number by the number of milliseconds per day
does not get you a time since the start of 1970; it gets you a time
since the start of the Julian Day number system, which was several
millennia earlier.

Change-Id: Ic90a6c3de445baf9cfd30f28dd847f146e6a7adf
Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
Edward Welbourne 2019-08-29 13:41:17 +02:00
parent 2faa6cafa9
commit 06f69700af

View File

@ -41,6 +41,7 @@ class tst_QDateTime : public QObject
MSECS_PER_DAY = 86400000, MSECS_PER_DAY = 86400000,
JULIAN_DAY_1950 = 2433283, JULIAN_DAY_1950 = 2433283,
JULIAN_DAY_1960 = 2436935, JULIAN_DAY_1960 = 2436935,
JULIAN_DAY_1970 = 2440588, // Epoch
JULIAN_DAY_2010 = 2455198, JULIAN_DAY_2010 = 2455198,
JULIAN_DAY_2011 = 2455563, JULIAN_DAY_2011 = 2455563,
JULIAN_DAY_2020 = 2458850, JULIAN_DAY_2020 = 2458850,
@ -299,7 +300,7 @@ void tst_QDateTime::setOffsetFromUtc()
void tst_QDateTime::setMSecsSinceEpoch() void tst_QDateTime::setMSecsSinceEpoch()
{ {
qint64 msecs = qint64(JULIAN_DAY_2010 + 180) * MSECS_PER_DAY; qint64 msecs = qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970 + 180) * MSECS_PER_DAY;
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -313,11 +314,12 @@ void tst_QDateTime::setMSecsSinceEpochTz()
{ {
QTimeZone cet = QTimeZone("Europe/Oslo"); QTimeZone cet = QTimeZone("Europe/Oslo");
QList<QDateTime> list; QList<QDateTime> 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) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet)); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet));
QBENCHMARK { QBENCHMARK {
foreach (QDateTime test, list) foreach (QDateTime test, list)
test.setMSecsSinceEpoch((JULIAN_DAY_2010 + 180) * MSECS_PER_DAY); test.setMSecsSinceEpoch(msecs);
} }
} }
@ -424,7 +426,8 @@ void tst_QDateTime::toOffsetFromUtc()
void tst_QDateTime::daysTo() void tst_QDateTime::daysTo()
{ {
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -436,7 +439,8 @@ void tst_QDateTime::daysTo()
void tst_QDateTime::msecsTo() void tst_QDateTime::msecsTo()
{ {
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -449,7 +453,8 @@ void tst_QDateTime::msecsTo()
void tst_QDateTime::equivalent() void tst_QDateTime::equivalent()
{ {
bool result; bool result;
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -463,7 +468,8 @@ void tst_QDateTime::equivalent()
void tst_QDateTime::equivalentUtc() void tst_QDateTime::equivalentUtc()
{ {
bool result = false; bool result = false;
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY, Qt::UTC); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -477,7 +483,8 @@ void tst_QDateTime::equivalentUtc()
void tst_QDateTime::lessThan() void tst_QDateTime::lessThan()
{ {
bool result = false; bool result = false;
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -491,7 +498,8 @@ void tst_QDateTime::lessThan()
void tst_QDateTime::lessThanUtc() void tst_QDateTime::lessThanUtc()
{ {
bool result = false; bool result = false;
QDateTime other = QDateTime::fromMSecsSinceEpoch(qint64(JULIAN_DAY_2010) * MSECS_PER_DAY, Qt::UTC); const QDateTime other = QDateTime::fromMSecsSinceEpoch(
qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC);
QList<QDateTime> list; QList<QDateTime> list;
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd)
list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0))); list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
@ -573,25 +581,31 @@ void tst_QDateTime::fromStringIso()
void tst_QDateTime::fromMSecsSinceEpoch() void tst_QDateTime::fromMSecsSinceEpoch()
{ {
const int start = JULIAN_DAY_2010 - JULIAN_DAY_1970;
const int end = JULIAN_DAY_2020 - JULIAN_DAY_1970;
QBENCHMARK { QBENCHMARK {
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = start; jd < end; ++jd)
QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::LocalTime); QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::LocalTime);
} }
} }
void tst_QDateTime::fromMSecsSinceEpochUtc() void tst_QDateTime::fromMSecsSinceEpochUtc()
{ {
const int start = JULIAN_DAY_2010 - JULIAN_DAY_1970;
const int end = JULIAN_DAY_2020 - JULIAN_DAY_1970;
QBENCHMARK { QBENCHMARK {
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = start; jd < end; ++jd)
QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::UTC); QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::UTC);
} }
} }
void tst_QDateTime::fromMSecsSinceEpochTz() void tst_QDateTime::fromMSecsSinceEpochTz()
{ {
QTimeZone cet = QTimeZone("Europe/Oslo"); const int start = JULIAN_DAY_2010 - JULIAN_DAY_1970;
const int end = JULIAN_DAY_2020 - JULIAN_DAY_1970;
const QTimeZone cet("Europe/Oslo");
QBENCHMARK { QBENCHMARK {
for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) for (int jd = start; jd < end; ++jd)
QDateTime test = QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, cet); QDateTime test = QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, cet);
} }
} }