~ubuntu-branches/ubuntu/precise/stellarium/precise

« back to all changes in this revision

Viewing changes to src/tests/testdates.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Scott Howard
  • Date: 2010-02-15 20:48:39 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20100215204839-u3qgbv60rho997yk
Tags: 0.10.3-0ubuntu1
* New upstream release.
  - fixes intel rendering bug (LP: #480553)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include <config.h>
2
 
 
3
 
#include <QString>
4
 
#include <QDateTime>
5
 
#include <QDate>
6
 
#include <QtGlobal>
7
 
#include <QLocale>
8
 
#include <QtDebug>
9
 
#include "StelUtils.hpp"
10
 
 
11
 
using namespace std;
12
 
 
13
 
void _assert(bool b, QString msg = "")
14
 
{
15
 
        if (!b)
16
 
        {
17
 
                qFatal("FAILED: %s",  qPrintable(msg));
18
 
        }
19
 
}
20
 
 
21
 
void _assertEquals(int a, int b, QString msg="")
22
 
{
23
 
        _assert(a == b, msg);
24
 
}
25
 
 
26
 
void dateRoundTrip()
27
 
{
28
 
        double t1d[] = { 
29
 
                0.0,
30
 
                -1.0,
31
 
                2454466.0,
32
 
                1721058.0,
33
 
                2500000.0,
34
 
                366.0,
35
 
                2454534,
36
 
                2299161.0,
37
 
                2454466.5,
38
 
                1720692.0,
39
 
                1720693.0,
40
 
                2400000.0,
41
 
                2110516.00000,
42
 
                1918395.00000,
43
 
                1794575.00000,
44
 
                1757319.00000,
45
 
                1721424.0,
46
 
                1721789.0,
47
 
                
48
 
                -31.0,
49
 
                -61.0,
50
 
                -92.0,
51
 
                
52
 
                -122.0,
53
 
                -153.0,
54
 
                -184.0,
55
 
                
56
 
                -214.0,
57
 
                -245.0,
58
 
                -275.0,
59
 
                
60
 
                -306.0,
61
 
                -334.0,
62
 
                -365.0,
63
 
                
64
 
                -699.0,
65
 
                -1064.0,
66
 
                -1420.0,
67
 
                
68
 
                -1785.0,
69
 
};
70
 
 
71
 
        QString t1s[] =
72
 
        { 
73
 
                "-4712-01-01T12:00:00", 
74
 
                "-4713-12-31T12:00:00", 
75
 
                "2007-12-31T12:00:00",
76
 
                
77
 
                "0000-01-01T12:00:00", 
78
 
                "2132-08-31T12:00:00",
79
 
                "-4711-01-01T12:00:00", 
80
 
                
81
 
                "2008-03-08T12:00:00",
82
 
                "1582-10-15T12:00:00",
83
 
                "2008-01-01T00:00:00",
84
 
                
85
 
                "-0002-12-31T12:00:00",  
86
 
                "-0001-01-01T12:00:00",
87
 
                "1858-11-16T12:00:00",
88
 
        
89
 
                "1066-04-12T12:00:00",
90
 
                "0540-04-12T12:00:00",
91
 
                "0201-04-12T12:00:00",
92
 
        
93
 
                "0099-04-12T12:00:00",
94
 
                "0001-01-01T12:00:00", 
95
 
                "0002-01-01T12:00:00",
96
 
        
97
 
                "-4713-12-01T12:00:00", 
98
 
                "-4713-11-01T12:00:00", 
99
 
                "-4713-10-01T12:00:00", 
100
 
        
101
 
                "-4713-09-01T12:00:00", 
102
 
                "-4713-08-01T12:00:00", 
103
 
                "-4713-07-01T12:00:00", 
104
 
        
105
 
                "-4713-06-01T12:00:00", 
106
 
                "-4713-05-01T12:00:00", 
107
 
                "-4713-04-01T12:00:00", 
108
 
                
109
 
                "-4713-03-01T12:00:00", 
110
 
                "-4713-02-01T12:00:00", // 28 days
111
 
                "-4713-01-01T12:00:00", 
112
 
        
113
 
                "-4714-02-01T12:00:00", // 28 days
114
 
                "-4715-02-01T12:00:00", // 28 days
115
 
                "-4716-02-01T12:00:00", // 29 days
116
 
        
117
 
                "-4717-02-01T12:00:00", // 28 days
118
 
        };
119
 
 
120
 
 
121
 
        // does jdToIsoString() of item in t1d match string in t1s?
122
 
        QList<int> fromString;
123
 
        double jd;
124
 
        bool success;
125
 
        for (int i = 0; i < 31; i++)
126
 
        {
127
 
                _assert(QString::compare(StelUtils::jdToIsoString(t1d[i]),
128
 
                                         t1s[i]) == 0,
129
 
                        QString("%1").arg(i) + ": " +StelUtils::jdToIsoString(t1d[i]) + " ne " + t1s[i] + " (" + QDate::fromJulianDay((int)floor(t1d[i])).toString() + ")");
130
 
 
131
 
                fromString = StelUtils::getIntsFromISO8601String(t1s[i]);
132
 
                success = StelUtils::getJDFromDate( &jd, 
133
 
                                                    fromString[0],
134
 
                                                    fromString[1],
135
 
                                                    fromString[2],
136
 
                                                    fromString[3],
137
 
                                                    fromString[4],
138
 
                                                    fromString[5] );
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') );
143
 
 
144
 
        }
145
 
}
146
 
 
147
 
 
148
 
void formatting () 
149
 
{
150
 
        QLocale usEN;
151
 
 
152
 
        // test formatting of StelUtils::localeDateString, the fall-back if QDateTime cannot do it.
153
 
 
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)));
170
 
 
171
 
        _assert(-18 == (-5118 % 100), "modulus arithmetic works diff: " + QString("%1").arg(-5118 % 100));
172
 
 
173
 
        // test arbitrary fmt
174
 
        QLocale::setDefault(usEN);
175
 
 
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));
184
 
 
185
 
        // test detection of offset from UTC.
186
 
 
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)));
193
 
 
194
 
 
195
 
}
196
 
 
197
 
void qdateroundtrip() {
198
 
 
199
 
  QDate tst = QDate::currentDate();
200
 
  long jd = tst.toJulianDay();
201
 
 
202
 
  while ( tst.isValid() ) {
203
 
    jd --;
204
 
    tst = tst.addDays( -1 );
205
 
 
206
 
    QDate comp = QDate::fromJulianDay(jd);
207
 
 
208
 
    _assert( tst == comp, "failed at jd " + QString("%1").arg(jd) + " " + 
209
 
             tst.toString() + " vs " + comp.toString() );
210
 
    if ( tst != comp ) {
211
 
      break;
212
 
    }
213
 
  }
214
 
 
215
 
}
216
 
 
217
 
void testrolloverandvalidity()
218
 
{
219
 
 
220
 
  _assertEquals(31, StelUtils::numberOfDaysInMonthInYear(1, 2008), "1a");
221
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 2008), "1b");
222
 
  _assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 2007), "1c");
223
 
 
224
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 2000), "1d");
225
 
  _assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1900), "1e");
226
 
 
227
 
  _assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1001), "1f");
228
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 1000), "1g");
229
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 1200), "1h");
230
 
 
231
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, 0), "1i");
232
 
  _assertEquals(28, StelUtils::numberOfDaysInMonthInYear(2, 1), "1j");
233
 
  _assertEquals(29, StelUtils::numberOfDaysInMonthInYear(2, -4), "1k");
234
 
 
235
 
  int dy, dm, dd, dh, dmin,ds;
236
 
 
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);
245
 
 
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);
254
 
 
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);
263
 
 
264
 
}
265
 
 
266
 
/************************************************************************
267
 
Run several of the time-related functions through paces.
268
 
 ************************************************************************/
269
 
int main(int argc, char* argv[])
270
 
{
271
 
 
272
 
  dateRoundTrip();
273
 
  formatting();
274
 
  testrolloverandvalidity();
275
 
 
276
 
}