9
#include "StelUtils.hpp"
13
void _assert(bool b, QString msg = "")
17
qFatal("FAILED: %s", qPrintable(msg));
21
void _assertEquals(int a, int b, QString msg="")
73
"-4712-01-01T12:00:00",
74
"-4713-12-31T12:00:00",
75
"2007-12-31T12:00:00",
77
"0000-01-01T12:00:00",
78
"2132-08-31T12:00:00",
79
"-4711-01-01T12:00:00",
81
"2008-03-08T12:00:00",
82
"1582-10-15T12:00:00",
83
"2008-01-01T00:00:00",
85
"-0002-12-31T12:00:00",
86
"-0001-01-01T12:00:00",
87
"1858-11-16T12:00:00",
89
"1066-04-12T12:00:00",
90
"0540-04-12T12:00:00",
91
"0201-04-12T12:00:00",
93
"0099-04-12T12:00:00",
94
"0001-01-01T12:00:00",
95
"0002-01-01T12:00:00",
97
"-4713-12-01T12:00:00",
98
"-4713-11-01T12:00:00",
99
"-4713-10-01T12:00:00",
101
"-4713-09-01T12:00:00",
102
"-4713-08-01T12:00:00",
103
"-4713-07-01T12:00:00",
105
"-4713-06-01T12:00:00",
106
"-4713-05-01T12:00:00",
107
"-4713-04-01T12:00:00",
109
"-4713-03-01T12:00:00",
110
"-4713-02-01T12:00:00", // 28 days
111
"-4713-01-01T12:00:00",
113
"-4714-02-01T12:00:00", // 28 days
114
"-4715-02-01T12:00:00", // 28 days
115
"-4716-02-01T12:00:00", // 29 days
117
"-4717-02-01T12:00:00", // 28 days
121
// does jdToIsoString() of item in t1d match string in t1s?
122
QList<int> fromString;
125
for (int i = 0; i < 31; i++)
127
_assert(QString::compare(StelUtils::jdToIsoString(t1d[i]),
129
QString("%1").arg(i) + ": " +StelUtils::jdToIsoString(t1d[i]) + " ne " + t1s[i] + " (" + QDate::fromJulianDay((int)floor(t1d[i])).toString() + ")");
131
fromString = StelUtils::getIntsFromISO8601String(t1s[i]);
132
success = StelUtils::getJDFromDate( &jd,
139
_assert(t1d[i] == jd && success,
140
QString("%1").arg(i) + ": " + QString("failed with ") + t1s[i] + " " +
141
QString("%1").arg(jd, 10, 'f') + " vs " +
142
QString("%1").arg(t1d[i], 10, 'f') );
152
// test formatting of StelUtils::localeDateString, the fall-back if QDateTime cannot do it.
154
QLocale::setDefault(QLocale::German);
155
_assert(QString::compare(StelUtils::localeDateString(2008, 03, 10, 0),
156
QString("10.03.08")) == 0,
157
"german for 2008-03-10 wrong: " + (StelUtils::localeDateString(2008, 03, 10, 0)));
158
_assert(QString::compare(StelUtils::localeDateString(8, 03, 10, 0),
159
QString("10.03.08")) == 0,
160
"german for 8-03-10 wrong: " + (StelUtils::localeDateString(8, 03, 10, 0)));
161
_assert(QString::compare(StelUtils::localeDateString(-8, 03, 10, 0),
162
QString("10.03.-8")) == 0,
163
"german for -8-03-10 wrong: " + (StelUtils::localeDateString(-8, 03, 10, 0)));
164
_assert(QString::compare(StelUtils::localeDateString(-1118, 03, 10, 0),
165
QString("10.03.-18")) == 0,
166
"german for -1118-03-10 wrong: " + (StelUtils::localeDateString(-1118, 03, 10, 0)));
167
_assert(QString::compare(StelUtils::localeDateString(-5118, 03, 10, 0),
168
QString("10.03.-18")) == 0,
169
"german for -5118-03-10 wrong: " + (StelUtils::localeDateString(-5118, 03, 10, 0)));
171
_assert(-18 == (-5118 % 100), "modulus arithmetic works diff: " + QString("%1").arg(-5118 % 100));
173
// test arbitrary fmt
174
QLocale::setDefault(usEN);
176
QString easyLong("d dd ddd dddd M MM MMM MMMM yy yyyy");
177
_assert(QString::compare(QString("9 09 Sun Sunday 3 03 Mar March 08 2008"),
178
StelUtils::localeDateString(2008, 3, 9, 6, easyLong)) == 0,
179
"formatter1 not working: " + StelUtils::localeDateString(2008, 3, 9, 6, easyLong));
180
QString hardLong("dddddddd '''doh' ''yyyyyyy");
181
_assert(QString::compare(QString("SundaySunday 'doh '200808y"),
182
StelUtils::localeDateString(2008, 3, 9, 6, hardLong)) == 0,
183
"formatter2 not working: " + StelUtils::localeDateString(2008, 3, 9, 6, hardLong));
185
// test detection of offset from UTC.
187
double mar122008 = QDate(2008,3,12).toJulianDay();
188
_assert(-4.0 == StelUtils::getGMTShiftFromQT(mar122008),
189
"gmt shift wrong: " + QString("%1").arg(StelUtils::getGMTShiftFromQT(mar122008)));
190
double mar012008 = QDate(2008,3,1).toJulianDay();
191
_assert(-5.0 == StelUtils::getGMTShiftFromQT(mar012008),
192
"gmt shift wrong: " + QString("%1").arg(StelUtils::getGMTShiftFromQT(mar012008)));
197
void qdateroundtrip() {
199
QDate tst = QDate::currentDate();
200
long jd = tst.toJulianDay();
202
while ( tst.isValid() ) {
204
tst = tst.addDays( -1 );
206
QDate comp = QDate::fromJulianDay(jd);
208
_assert( tst == comp, "failed at jd " + QString("%1").arg(jd) + " " +
209
tst.toString() + " vs " + comp.toString() );
217
void testrolloverandvalidity()
220
_assertEquals(31, StelUtils::numberOfDaysInMonthInYear(1, 2008), "1a");
221
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 2008), "1b");
222
_assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 2007), "1c");
224
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 2000), "1d");
225
_assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1900), "1e");
227
_assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1001), "1f");
228
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 1000), "1g");
229
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 1200), "1h");
231
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 0), "1i");
232
_assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1), "1j");
233
_assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, -4), "1k");
235
int dy, dm, dd, dh, dmin,ds;
237
_assert( StelUtils::changeDateTimeForRollover(2008, 1, 32, 12, 0, 0,
238
&dy, &dm, &dd, &dh, &dmin, &ds), "1l");
239
_assertEquals(2008, dy);
240
_assertEquals(2, dm);
241
_assertEquals(1, dd);
242
_assertEquals(12, dh);
243
_assertEquals(0, dmin);
244
_assertEquals(0, ds);
246
_assert( StelUtils::changeDateTimeForRollover(-1, 12, 32, 12, 0, 0,
247
&dy, &dm, &dd, &dh, &dmin, &ds), "1m");
248
_assertEquals(0, dy);
249
_assertEquals(1, dm);
250
_assertEquals(1, dd);
251
_assertEquals(12, dh);
252
_assertEquals(0, dmin);
253
_assertEquals(0, ds);
255
_assert( StelUtils::changeDateTimeForRollover(-1, 11, 45, 12, 0, 0,
256
&dy, &dm, &dd, &dh, &dmin, &ds), "1n");
257
_assertEquals(-1, dy);
258
_assertEquals(12, dm);
259
_assertEquals(15, dd);
260
_assertEquals(12, dh);
261
_assertEquals(0, dmin);
262
_assertEquals(0, ds);
266
/************************************************************************
267
Run several of the time-related functions through paces.
268
************************************************************************/
269
int main(int argc, char* argv[])
274
testrolloverandvalidity();