31 #include "test-stuff.h" 33 static gboolean test_data_is_init = FALSE;
34 static GList *test_data = NULL;
50 check_date_cycles (gpointer data,
51 gpointer user_data __attribute__ ((unused)))
68 for (i = 1; i <= 6; i++)
71 cmp = (gchar*)g_list_nth_data (d->string_list, (i - 1));
73 DEBUG (
" str=%s cmp=%s", str, cmp);
81 base.tm_year = base.tm_mday = base.tm_mon = 0;
82 base.tm_min = base.tm_hour = base.tm_gmtoff = 0;
83 base.tm_sec = base.tm_isdst = 0;
85 if ((d->date->qd_year > 0) &&
86 (d->date->qd_year < 9999))
89 do_test ((h != NULL),
"no date could be parsed");
91 PERR (
" h failed for str=%s, " 92 "cmp=%s, %d\n", str, cmp, i);
94 strptime (cmp, t, &base);
96 do_test ((j != NULL),
"no value from struct tm");
102 "compare with strptime");
113 test_date_init (
void)
115 test_data_is_init = TRUE;
119 QTestDate *td = g_new0 (QTestDate, 1);
124 td->date->qd_year = 2006;
125 td->date->qd_mon = 5;
126 td->date->qd_mday = 14;
127 td->date->qd_hour = 15;
128 td->date->qd_min = 45;
129 td->date->qd_sec = G_GINT64_CONSTANT(50);
132 td->string_list = NULL;
133 td->string_list = g_list_append (td->string_list,
"05/14/2006");
134 td->string_list = g_list_append (td->string_list,
"14/05/2006");
135 td->string_list = g_list_append (td->string_list,
"14.05.2006");
136 td->string_list = g_list_append (td->string_list,
"2006-05-14");
137 td->string_list = g_list_append (td->string_list,
"2006-05-14T15:45:50Z");
138 td->string_list = g_list_append (td->string_list,
139 "2006-05-14 15:45:50.000001000 +0000");
140 td->id =
"a current time";
141 test_data = g_list_prepend (test_data, td);
144 QTestDate *td = g_new0 (QTestDate, 1);
149 td->date->qd_year = 2006;
150 td->date->qd_mon = 5;
151 td->date->qd_mday = 9;
152 td->date->qd_hour = 0;
153 td->date->qd_min = 0;
154 td->date->qd_sec = G_GINT64_CONSTANT(0);
157 td->string_list = NULL;
158 td->string_list = g_list_prepend (td->string_list,
"05/09/2006");
159 td->string_list = g_list_prepend (td->string_list,
"09/05/2006");
160 td->string_list = g_list_prepend (td->string_list,
"09.05.2006");
161 td->string_list = g_list_prepend (td->string_list,
"2006-05-09");
162 td->string_list = g_list_prepend (td->string_list,
"2006-05-09T00:00:00Z");
163 td->string_list = g_list_prepend (td->string_list,
164 "2006-05-09 00:00:00.000000002 +0000");
165 td->string_list = g_list_reverse (td->string_list);
166 td->id =
"a recent time";
167 test_data = g_list_prepend (test_data, td);
170 QTestDate *td = g_new0 (QTestDate, 1);
175 td->date->qd_year = 2006;
176 td->date->qd_mon = 5;
177 td->date->qd_mday = 9;
178 td->date->qd_hour = 14;
179 td->date->qd_min = 49;
180 td->date->qd_sec = G_GINT64_CONSTANT(4);
183 td->string_list = NULL;
184 td->string_list = g_list_prepend (td->string_list,
"05/09/2006");
185 td->string_list = g_list_prepend (td->string_list,
"09/05/2006");
186 td->string_list = g_list_prepend (td->string_list,
"09.05.2006");
187 td->string_list = g_list_prepend (td->string_list,
"2006-05-09");
188 td->string_list = g_list_prepend (td->string_list,
"2006-05-09T14:49:04Z");
189 td->string_list = g_list_prepend (td->string_list,
190 "2006-05-09 14:49:04.000000100 +0000");
191 td->string_list = g_list_reverse (td->string_list);
192 td->id =
"second recent time";
193 test_data = g_list_prepend (test_data, td);
196 QTestDate *td = g_new0 (QTestDate, 1);
201 td->date->qd_year = 1971;
202 td->date->qd_mon = 12;
203 td->date->qd_mday = 31;
204 td->date->qd_hour = 15;
205 td->date->qd_min = 0;
206 td->date->qd_sec = G_GINT64_CONSTANT(0);
209 td->string_list = NULL;
210 td->string_list = g_list_prepend (td->string_list,
"12/31/1971");
211 td->string_list = g_list_prepend (td->string_list,
"31/12/1971");
212 td->string_list = g_list_prepend (td->string_list,
"31.12.1971");
213 td->string_list = g_list_prepend (td->string_list,
"1971-12-31");
214 td->string_list = g_list_prepend (td->string_list,
"1971-12-31T15:00:00Z");
215 td->string_list = g_list_prepend (td->string_list,
216 "1971-12-31 15:00:00.000000004 +0000");
217 td->string_list = g_list_reverse (td->string_list);
218 td->id =
"New Year's Eve 1971";
219 test_data = g_list_prepend (test_data, td);
222 QTestDate *td = g_new0 (QTestDate, 1);
227 td->date->qd_year = 1980;
228 td->date->qd_mon = 1;
229 td->date->qd_mday = 1;
230 td->date->qd_hour = 0;
231 td->date->qd_min = 0;
232 td->date->qd_sec = G_GINT64_CONSTANT(0);
235 td->string_list = NULL;
236 td->string_list = g_list_prepend (td->string_list,
"01/01/1980");
237 td->string_list = g_list_prepend (td->string_list,
"01/01/1980");
238 td->string_list = g_list_prepend (td->string_list,
"01.01.1980");
239 td->string_list = g_list_prepend (td->string_list,
"1980-01-01");
240 td->string_list = g_list_prepend (td->string_list,
"1980-01-01T00:00:00Z");
241 td->string_list = g_list_prepend (td->string_list,
242 "1980-01-01 00:00:00.123456789 +0000");
243 td->string_list = g_list_reverse (td->string_list);
244 td->id =
"New Year's Day 1980";
245 test_data = g_list_prepend (test_data, td);
248 QTestDate *td = g_new0 (QTestDate, 1);
253 td->date->qd_year = 1999;
254 td->date->qd_mon = 12;
255 td->date->qd_mday = 31;
256 td->date->qd_hour = 23;
257 td->date->qd_min = 59;
258 td->date->qd_sec = G_GINT64_CONSTANT(59);
261 td->string_list = NULL;
262 td->string_list = g_list_prepend (td->string_list,
"12/31/1999");
263 td->string_list = g_list_prepend (td->string_list,
"31/12/1999");
264 td->string_list = g_list_prepend (td->string_list,
"31.12.1999");
265 td->string_list = g_list_prepend (td->string_list,
"1999-12-31");
266 td->string_list = g_list_prepend (td->string_list,
"1999-12-31T23:59:59Z");
267 td->string_list = g_list_prepend (td->string_list,
268 "1999-12-31 23:59:59.987654321 +0000");
269 td->string_list = g_list_reverse (td->string_list);
270 td->id =
"Millenium Eve";
271 test_data = g_list_prepend (test_data, td);
274 QTestDate *td = g_new0 (QTestDate, 1);
279 td->date->qd_year = 1992;
280 td->date->qd_mon = 2;
281 td->date->qd_mday = 29;
282 td->date->qd_hour = 15;
283 td->date->qd_min = 45;
284 td->date->qd_sec = G_GINT64_CONSTANT(23);
287 td->string_list = NULL;
288 td->string_list = g_list_prepend (td->string_list,
"02/29/1992");
289 td->string_list = g_list_prepend (td->string_list,
"29/02/1992");
290 td->string_list = g_list_prepend (td->string_list,
"29.02.1992");
291 td->string_list = g_list_prepend (td->string_list,
"1992-02-29");
292 td->string_list = g_list_prepend (td->string_list,
"1992-02-29T15:45:23Z");
293 td->string_list = g_list_prepend (td->string_list,
294 "1992-02-29 15:45:23.000090000 +0000");
295 td->string_list = g_list_reverse (td->string_list);
296 td->id =
"29th February 1992";
297 test_data = g_list_prepend (test_data, td);
301 QTestDate *td = g_new0 (QTestDate, 1);
306 td->date->qd_year = 1969;
307 td->date->qd_mon = 12;
308 td->date->qd_mday = 31;
309 td->date->qd_hour = 23;
310 td->date->qd_min = 59;
311 td->date->qd_sec = G_GINT64_CONSTANT(59);
314 td->string_list = NULL;
315 td->string_list = g_list_prepend (td->string_list,
"12/31/1969");
316 td->string_list = g_list_prepend (td->string_list,
"31/12/1969");
317 td->string_list = g_list_prepend (td->string_list,
"31.12.1969");
318 td->string_list = g_list_prepend (td->string_list,
"1969-12-31");
319 td->string_list = g_list_prepend (td->string_list,
"1969-12-31T23:59:59Z");
320 td->string_list = g_list_prepend (td->string_list,
321 "1969-12-31 23:59:59.000000009 +0000");
322 td->string_list = g_list_reverse (td->string_list);
323 td->id =
"epoch eve";
324 test_data = g_list_prepend (test_data, td);
327 QTestDate *td = g_new0 (QTestDate, 1);
332 td->date->qd_year = 1963;
333 td->date->qd_mon = 11;
334 td->date->qd_mday = 22;
335 td->date->qd_hour = 19;
336 td->date->qd_min = 0;
337 td->date->qd_sec = G_GINT64_CONSTANT(0);
340 td->string_list = NULL;
341 td->string_list = g_list_prepend (td->string_list,
"11/22/1963");
342 td->string_list = g_list_prepend (td->string_list,
"22/11/1963");
343 td->string_list = g_list_prepend (td->string_list,
"22.11.1963");
344 td->string_list = g_list_prepend (td->string_list,
"1963-11-22");
345 td->string_list = g_list_prepend (td->string_list,
"1963-11-22T19:00:00Z");
346 td->string_list = g_list_prepend (td->string_list,
347 "1963-11-22 19:00:00.818818818 +0000");
348 td->string_list = g_list_reverse (td->string_list);
349 td->id =
"approx JFK, 1963";
350 test_data = g_list_prepend (test_data, td);
353 QTestDate *td = g_new0 (QTestDate, 1);
358 td->date->qd_year = 1945;
359 td->date->qd_mon = 9;
360 td->date->qd_mday = 8;
361 td->date->qd_hour = 2;
362 td->date->qd_min = 2;
363 td->date->qd_sec = G_GINT64_CONSTANT(0);
366 td->string_list = NULL;
367 td->string_list = g_list_prepend (td->string_list,
"09/08/1945");
368 td->string_list = g_list_prepend (td->string_list,
"08/09/1945");
369 td->string_list = g_list_prepend (td->string_list,
"08.09.1945");
370 td->string_list = g_list_prepend (td->string_list,
"1945-09-08");
371 td->string_list = g_list_prepend (td->string_list,
"1945-09-08T02:02:00Z");
372 td->string_list = g_list_prepend (td->string_list,
373 "1945-09-08 02:02:00.000000000 +0000");
374 td->string_list = g_list_reverse (td->string_list);
375 td->id =
"Nagasaki, 1945";
376 test_data = g_list_prepend (test_data, td);
379 QTestDate *td = g_new0 (QTestDate, 1);
384 td->date->qd_year = 1918;
385 td->date->qd_mon = 11;
386 td->date->qd_mday = 11;
387 td->date->qd_hour = 11;
388 td->date->qd_min = 0;
389 td->date->qd_sec = G_GINT64_CONSTANT(0);
392 td->string_list = NULL;
393 td->string_list = g_list_prepend (td->string_list,
"11/11/1918");
394 td->string_list = g_list_prepend (td->string_list,
"11/11/1918");
395 td->string_list = g_list_prepend (td->string_list,
"11.11.1918");
396 td->string_list = g_list_prepend (td->string_list,
"1918-11-11");
397 td->string_list = g_list_prepend (td->string_list,
"1918-11-11T11:00:00Z");
398 td->string_list = g_list_prepend (td->string_list,
399 "1918-11-11 11:00:00.000000000 +0000");
400 td->string_list = g_list_reverse (td->string_list);
401 td->id =
"Armistice 1918";
402 test_data = g_list_prepend (test_data, td);
405 QTestDate *td = g_new0 (QTestDate, 1);
408 G_GINT64_CONSTANT(-2208988801));
411 td->date->qd_year = 1899;
412 td->date->qd_mon = 12;
413 td->date->qd_mday = 31;
414 td->date->qd_hour = 23;
415 td->date->qd_min = 59;
416 td->date->qd_sec = G_GINT64_CONSTANT(59);
419 td->string_list = NULL;
420 td->string_list = g_list_prepend (td->string_list,
"12/31/1899");
421 td->string_list = g_list_prepend (td->string_list,
"31/12/1899");
422 td->string_list = g_list_prepend (td->string_list,
"31.12.1899");
423 td->string_list = g_list_prepend (td->string_list,
"1899-12-31");
424 td->string_list = g_list_prepend (td->string_list,
"1899-12-31T23:59:59Z");
425 td->string_list = g_list_prepend (td->string_list,
426 "1899-12-31 23:59:59.000000000 +0000");
427 td->string_list = g_list_reverse (td->string_list);
428 td->id =
"19th century Millenium Eve";
429 test_data = g_list_prepend (test_data, td);
432 QTestDate *td = g_new0 (QTestDate, 1);
435 G_GINT64_CONSTANT(-13311993599));
438 td->date->qd_year = 1548;
439 td->date->qd_mon = 2;
440 td->date->qd_mday = 29;
441 td->date->qd_hour = 0;
442 td->date->qd_min = 0;
443 td->date->qd_sec = G_GINT64_CONSTANT(1);
446 td->string_list = NULL;
447 td->string_list = g_list_prepend (td->string_list,
"02/29/1548");
448 td->string_list = g_list_prepend (td->string_list,
"29/02/1548");
449 td->string_list = g_list_prepend (td->string_list,
"29.02.1548");
450 td->string_list = g_list_prepend (td->string_list,
"1548-02-29");
451 td->string_list = g_list_prepend (td->string_list,
"1548-02-29T00:00:01Z");
452 td->string_list = g_list_prepend (td->string_list,
453 "1548-02-29 00:00:01.000000000 +0000");
454 td->string_list = g_list_reverse (td->string_list);
455 td->id =
"16th century leap day";
456 test_data = g_list_prepend (test_data, td);
459 QTestDate *td = g_new0 (QTestDate, 1);
464 td->date->qd_year = 1066;
465 td->date->qd_mon = 10;
466 td->date->qd_mday = 14;
467 td->date->qd_hour = 8;
468 td->date->qd_min = 0;
469 td->date->qd_sec = G_GINT64_CONSTANT(0);
472 td->string_list = NULL;
473 td->string_list = g_list_prepend (td->string_list,
"10/14/1066");
474 td->string_list = g_list_prepend (td->string_list,
"14/10/1066");
475 td->string_list = g_list_prepend (td->string_list,
"14.10.1066");
476 td->string_list = g_list_prepend (td->string_list,
"1066-10-14");
477 td->string_list = g_list_prepend (td->string_list,
"1066-10-14T08:00:00Z");
478 td->string_list = g_list_prepend (td->string_list,
479 "1066-10-14 08:00:00.000000000 +0000");
480 td->string_list = g_list_reverse (td->string_list);
481 td->id =
"Battle of Hastings, 1066";
482 test_data = g_list_prepend (test_data, td);
485 QTestDate *td = g_new0 (QTestDate, 1);
488 G_GINT64_CONSTANT(-36417340799));
491 td->date->qd_year = 815;
492 td->date->qd_mon = 12;
493 td->date->qd_mday = 25;
494 td->date->qd_hour = 0;
495 td->date->qd_min = 0;
496 td->date->qd_sec = G_GINT64_CONSTANT(1);
499 td->string_list = NULL;
500 td->string_list = g_list_prepend (td->string_list,
"12/25/0815");
501 td->string_list = g_list_prepend (td->string_list,
"25/12/0815");
502 td->string_list = g_list_prepend (td->string_list,
"25.12.0815");
503 td->string_list = g_list_prepend (td->string_list,
"0815-12-25");
504 td->string_list = g_list_prepend (td->string_list,
"0815-12-25T00:00:01Z");
505 td->string_list = g_list_prepend (td->string_list,
506 "0815-12-25 00:00:01.000000000 +0000");
507 td->string_list = g_list_reverse (td->string_list);
508 td->id =
"9th century Christmas Day";
509 test_data = g_list_prepend (test_data, td);
512 QTestDate *td = g_new0 (QTestDate, 1);
517 td->date->qd_year = 43;
518 td->date->qd_mon = 5;
519 td->date->qd_mday = 20;
520 td->date->qd_hour = 14;
521 td->date->qd_min = 0;
522 td->date->qd_sec = G_GINT64_CONSTANT(0);
525 td->string_list = NULL;
526 td->string_list = g_list_prepend (td->string_list,
"05/20/0043");
527 td->string_list = g_list_prepend (td->string_list,
"20/05/0043");
528 td->string_list = g_list_prepend (td->string_list,
"20.05.0043");
529 td->string_list = g_list_prepend (td->string_list,
"0043-05-20");
530 td->string_list = g_list_prepend (td->string_list,
"0043-05-20T14:00:00Z");
531 td->string_list = g_list_prepend (td->string_list,
532 "0043-05-20 14:00:00.000000000 +0000");
533 td->string_list = g_list_reverse (td->string_list);
534 td->id =
"approx Roman invasion, 43AD";
535 test_data = g_list_prepend (test_data, td);
542 QTestDate *td = g_new0 (QTestDate, 1);
547 td->date->qd_year = -1;
548 td->date->qd_mon = 12;
549 td->date->qd_mday = 24;
550 td->date->qd_hour = 23;
551 td->date->qd_min = 59;
552 td->date->qd_sec = G_GINT64_CONSTANT(59);
555 td->string_list = NULL;
556 td->string_list = g_list_prepend (td->string_list,
"12/24/-001");
557 td->string_list = g_list_prepend (td->string_list,
"24/12/-001");
558 td->string_list = g_list_prepend (td->string_list,
"24.12.-001");
559 td->string_list = g_list_prepend (td->string_list,
"-001-12-24");
560 td->string_list = g_list_prepend (td->string_list,
"-001-12-24T23:59:59Z");
561 td->string_list = g_list_prepend (td->string_list,
562 "-001-12-24 23:59:59.000000000 +0000");
563 td->string_list = g_list_reverse (td->string_list);
564 td->id =
"Xmas eve, 1BC";
565 test_data = g_list_prepend (test_data, td);
568 QTestDate *td = g_new0 (QTestDate, 1);
571 G_GINT64_CONSTANT(-204110409601));
574 td->date->qd_year = -4499;
575 td->date->qd_mon = 12;
576 td->date->qd_mday = 31;
577 td->date->qd_hour = 23;
578 td->date->qd_min = 59;
579 td->date->qd_sec = G_GINT64_CONSTANT(59);
582 td->string_list = NULL;
583 td->string_list = g_list_prepend (td->string_list,
"12/31/-4499");
584 td->string_list = g_list_prepend (td->string_list,
"31/12/-4499");
585 td->string_list = g_list_prepend (td->string_list,
"31.12.-4499");
586 td->string_list = g_list_prepend (td->string_list,
"-4499-12-31");
587 td->string_list = g_list_prepend (td->string_list,
"-4499-12-31T23:59:59Z");
588 td->string_list = g_list_prepend (td->string_list,
589 "-4499-12-31 23:59:59.000000000 +0000");
590 td->string_list = g_list_reverse (td->string_list);
591 td->id =
"far past.";
592 test_data = g_list_prepend (test_data, td);
595 QTestDate *td = g_new0 (QTestDate, 1);
598 G_GINT64_CONSTANT(-2097527529601));
601 td->date->qd_year = -64499;
602 td->date->qd_mon = 12;
603 td->date->qd_mday = 31;
604 td->date->qd_hour = 23;
605 td->date->qd_min = 59;
606 td->date->qd_sec = G_GINT64_CONSTANT(59);
609 td->string_list = NULL;
610 td->string_list = g_list_prepend (td->string_list,
"12/31/-64499");
611 td->string_list = g_list_prepend (td->string_list,
"31/12/-64499");
612 td->string_list = g_list_prepend (td->string_list,
"31.12.-64499");
613 td->string_list = g_list_prepend (td->string_list,
"-64499-12-31");
614 td->string_list = g_list_prepend (td->string_list,
"-64499-12-31T23:59:59Z");
615 td->string_list = g_list_prepend (td->string_list,
616 "-64499-12-31 23:59:59.000000000 +0000");
617 td->string_list = g_list_reverse (td->string_list);
618 td->id =
"far, far past.";
619 test_data = g_list_prepend (test_data, td);
623 QTestDate *td = g_new0 (QTestDate, 1);
628 td->date->qd_year = 3005;
629 td->date->qd_mon = 7;
630 td->date->qd_mday = 24;
631 td->date->qd_hour = 6;
632 td->date->qd_min = 34;
633 td->date->qd_sec = G_GINT64_CONSTANT(26);
636 td->string_list = NULL;
637 td->string_list = g_list_prepend (td->string_list,
"07/24/3005");
638 td->string_list = g_list_prepend (td->string_list,
"24/07/3005");
639 td->string_list = g_list_prepend (td->string_list,
"24.07.3005");
640 td->string_list = g_list_prepend (td->string_list,
"3005-07-24");
641 td->string_list = g_list_prepend (td->string_list,
"3005-07-24T06:34:26Z");
642 td->string_list = g_list_prepend (td->string_list,
643 "3005-07-24 06:34:26.000000800 +0000");
644 td->string_list = g_list_reverse (td->string_list);
645 td->id =
"24th July 3005";
646 test_data = g_list_prepend (test_data, td);
649 QTestDate *td = g_new0 (QTestDate, 1);
652 G_GINT64_CONSTANT(79839129599));
655 td->date->qd_year = 4499;
656 td->date->qd_mon = 12;
657 td->date->qd_mday = 31;
658 td->date->qd_hour = 23;
659 td->date->qd_min = 59;
660 td->date->qd_sec = G_GINT64_CONSTANT(59);
663 td->string_list = NULL;
664 td->string_list = g_list_prepend (td->string_list,
"12/31/4499");
665 td->string_list = g_list_prepend (td->string_list,
"31/12/4499");
666 td->string_list = g_list_prepend (td->string_list,
"31.12.4499");
667 td->string_list = g_list_prepend (td->string_list,
"4499-12-31");
668 td->string_list = g_list_prepend (td->string_list,
"4499-12-31T23:59:59Z");
669 td->string_list = g_list_prepend (td->string_list,
670 "4499-12-31 23:59:59.000050000 +0000");
671 td->string_list = g_list_reverse (td->string_list);
672 td->id =
"44th century Millenium Eve";
673 test_data = g_list_prepend (test_data, td);
676 QTestDate *td = g_new0 (QTestDate, 1);
679 G_GINT64_CONSTANT(395408649599));
682 td->date->qd_year = 14499;
683 td->date->qd_mon = 12;
684 td->date->qd_mday = 31;
685 td->date->qd_hour = 23;
686 td->date->qd_min = 59;
687 td->date->qd_sec = G_GINT64_CONSTANT(59);
690 td->string_list = NULL;
691 td->string_list = g_list_prepend (td->string_list,
"12/31/14499");
692 td->string_list = g_list_prepend (td->string_list,
"31/12/14499");
693 td->string_list = g_list_prepend (td->string_list,
"31.12.14499");
694 td->string_list = g_list_prepend (td->string_list,
"14499-12-31");
695 td->string_list = g_list_prepend (td->string_list,
"14499-12-31T23:59:59Z");
696 td->string_list = g_list_prepend (td->string_list,
697 "14499-12-31 23:59:59.007000000 +0000");
698 td->string_list = g_list_reverse (td->string_list);
699 td->id =
"144th century Millenium Eve";
700 test_data = g_list_prepend (test_data, td);
703 QTestDate *td = g_new0 (QTestDate, 1);
706 G_GINT64_CONSTANT(74869815369599));
709 td->date->qd_year = 2374499;
710 td->date->qd_mon = 12;
711 td->date->qd_mday = 31;
712 td->date->qd_hour = 23;
713 td->date->qd_min = 59;
714 td->date->qd_sec = G_GINT64_CONSTANT(59);
717 td->string_list = NULL;
718 td->string_list = g_list_prepend (td->string_list,
"12/31/2374499");
719 td->string_list = g_list_prepend (td->string_list,
"31/12/2374499");
720 td->string_list = g_list_prepend (td->string_list,
"31.12.2374499");
721 td->string_list = g_list_prepend (td->string_list,
"2374499-12-31");
722 td->string_list = g_list_prepend (td->string_list,
"2374499-12-31T23:59:59Z");
723 td->string_list = g_list_prepend (td->string_list,
724 "2374499-12-31 23:59:59.045321545 +0000");
725 td->string_list = g_list_reverse (td->string_list);
726 td->id =
"far, far future";
727 test_data = g_list_prepend (test_data, td);
732 free_test_data (gpointer data, gpointer user_data __attribute__ ((unused)))
736 td = (QTestDate*)data;
739 td->string_list = NULL;
745 test_date_close (
void)
747 g_list_foreach (test_data, free_test_data, NULL);
759 do_test ((scan != NULL),
"scan failed");
763 " timezone reset incorrect");
767 PERR (
" wrong time value %" 768 G_GINT64_FORMAT
" %" G_GINT64_FORMAT
" diff=%" 769 G_GINT64_FORMAT
" df=%d str=%s cmp=%s",
774 do_test ((stamp != NULL),
"stamp failed");
791 do_test ((str1 != NULL),
"stamp failed");
795 do_test ((check != NULL),
"parse failed");
797 PERR (
" tried to parse %s\n", str1);
800 do_test ((scan != NULL),
"scan failed");
810 do_test ((str2 != NULL),
"printed string is null");
812 "from_qtime failed");
814 "stamp different to scan");
816 PERR (
" df=%d str=%s scan=%s", df, str1, str2);
824 run_print_scan_tests (
void)
837 stamp_and_scan (796179600, 0, i);
838 stamp_and_scan (796179500, 72000, i);
839 stamp_and_scan (152098136, 0, i);
840 stamp_and_scan (1964049931, 0, i);
841 stamp_and_scan (1162088421, 12548000, i);
842 stamp_and_scan (325659000 - 6500, 0, i);
843 stamp_and_scan (1143943200, 0, i);
844 stamp_and_scan (1603591171, 595311000, i);
845 stamp_and_scan (1738909365, 204102000, i);
846 stamp_and_scan (1603591171, 595311000, i);
847 stamp_and_scan (1143943200 - 1, 0, i);
848 stamp_and_scan (1143943200, 0, i);
849 stamp_and_scan (1143943200 + (7 * 60 * 60), 0, i);
850 stamp_and_scan (1143943200 + (8 * 60 * 60), 0, i);
851 stamp_and_scan (1841443200, 0, i);
854 stamp_and_scan (G_GINT64_CONSTANT (-796179600), 253, i);
855 stamp_and_scan (G_GINT64_CONSTANT (-152098136), 865, i);
856 stamp_and_scan (G_GINT64_CONSTANT (-1143943200), 67, i);
857 stamp_and_scan (G_GINT64_CONSTANT (-1964049931), 53, i);
858 stamp_and_scan (G_GINT64_CONSTANT (-2463880447), 48, i);
859 stamp_and_scan (G_GINT64_CONSTANT (-22905158401), 9, i);
860 stamp_and_scan (G_GINT64_CONSTANT (-28502726400), 1, i);
861 stamp_and_scan (G_GINT64_CONSTANT (-60798211200), 0, i);
862 stamp_and_scan (G_GINT64_CONSTANT (-32727638740), 0, i);
864 stamp_and_scan (secs, 0, i);
866 stamp_and_scan (G_GINT64_CONSTANT (2463880447), 0, i);
868 stamp_and_scan (G_GINT64_CONSTANT (2527038847), 0, i);
871 stamp_and_scan (G_GINT64_CONSTANT (32727638740), 0, i);
873 stamp_and_scan (G_GINT64_CONSTANT (88313632867), 0, i);
875 stamp_and_scan (G_GINT64_CONSTANT (189216632865), 0, i);
877 stamp_and_scan (G_GINT64_CONSTANT (378432632864), 0, i);
879 stamp_and_scan (G_GINT64_CONSTANT (3165071328567), 0, i);
884 stamp_and_scan (G_GINT64_CONSTANT (3165071328567),
887 stamp_and_scan (G_GINT64_CONSTANT(843165071328567),
912 &df) == TRUE),
"failed to add scan suitable format");
915 scan_and_stamp (
"1971-12-31 15:00:00 -0900", df, 63072000);
917 scan_and_stamp (
"1979-12-31 15:00:00 -0900", df, 315532800);
918 scan_and_stamp (
"1980-01-01 00:00:00 -0000", df, 315532800);
919 scan_and_stamp (
"1980-01-01 00:00:00 +0000", df, 315532800);
920 scan_and_stamp (
"1980-01-01 09:00:00 +0900", df, 315532800);
921 scan_and_stamp (
"1980-01-01 08:30:00 +0830", df, 315532800);
923 scan_and_stamp (
"1963-11-22 14:00:00 -0500", df, -192776400);
924 scan_and_stamp (
"1945-09-08 11:02:00 +0900", df, -767311080);
925 scan_and_stamp (
"1918-11-11 11:00:00 +0000", df, -1613826000);
928 scan_and_stamp (
"1066-10-14 08:00:00 +0000", df,
929 G_GINT64_CONSTANT (-28502726400));
931 scan_and_stamp (
"0043-05-20 14:00:00 +0000", df,
932 G_GINT64_CONSTANT (-60798160800));
937 gchar * str1, * str2;
943 do_test ((copy != NULL),
"copy time NULL");
948 do_test ((
safe_strcmp(str1, str2) == 0),
"copied time fails to match original");
951 do_test ((qof_time_is_valid(qt) == TRUE),
"qt time invalid");
952 do_test ((qof_time_is_valid(copy) == TRUE),
"copy time invalid");
953 do_test ((
qof_time_equal(qt, copy) == TRUE),
"copy time not equal");
963 get_random_int_in_range(0, 999999);
969 do_test ((
id > 0),
"add seconds only custom format");
983 do_test ((
id > id1),
"add nanoseconds only custom format");
991 do_test ((
id > id2),
"add sec+nanosec custom format");
1011 "add_days gave incorrect result.");
1013 PERR (
" secs=%" G_GINT64_FORMAT
"cmp=%" 1018 "add_months failed");
1022 "add_months gave incorrect result.");
1029 run_qofdate_test (
void)
1039 "setting current format as UK");
1041 "uk") == 0),
"getting the shorthand name");
1044 "default name should not be overridden");
1047 "getting date format from shorthand name");
1049 "getting date format separator from date format");
1051 test)),
"default separator should not be overridden");
1057 "adding a valid format");
1059 &df2) == FALSE),
"adding an invalid format");
1062 do_test ((test == df),
"setting current format");
1064 "%T") == 0),
"getting the shorthand name");
1066 "custom name should be overridden");
1068 "getting date format from shorthand name");
1070 "getting date format separator from date format");
1072 "custom separator should be overridden");
1074 "getting modified date format separator from date format");
1086 do_test ((date->
qd_sec == 30),
"normalised seconds incorrect - 1");
1087 do_test ((date->
qd_mday == 3),
"normalised day incorrect - 1");
1090 do_test ((date->
qd_sec == 30),
"normalised seconds incorrect - 2");
1091 do_test ((date->
qd_mday == 23),
"normalised day incorrect - 2");
1094 do_test ((date->
qd_hour == 10),
"normalised hour incorrect");
1095 do_test ((date->
qd_mday == 24),
"normalised day incorrect - 3");
1098 do_test ((date->
qd_mon == 5),
"normalised month incorrect");
1099 do_test ((date->
qd_year == 2001),
"normalised year incorrect");
1102 do_test ((date->
qd_hour == 3),
"normalised hour incorrect - 1");
1103 do_test ((date->
qd_mday == 25),
"normalised day incorrect - 4");
1106 do_test ((date->
qd_hour == 19),
"normalised hour incorrect - 2");
1107 do_test ((date->
qd_mday == 22),
"normalised day incorrect - 5");
1110 do_test ((date->
qd_min == 15),
"normalised min incorrect");
1111 do_test ((date->
qd_hour == 15),
"normalised hour incorrect - 3");
1115 do_test ((date->
qd_sec == 8),
"doxygen sec example incorrect - 1");
1116 do_test ((date->
qd_min == 6),
"doxygen min example incorrect - 1");
1120 do_test ((date->
qd_sec == 56),
"doxygen sec example incorrect - 2");
1121 do_test ((date->
qd_min == 3),
"doxygen min example incorrect - 2");
1142 "2006-05-30T18:24:17Z")),
"with nanosecs");
1144 123456789L),
"nanosecs mismatched.");
1147 "strftime:US:first");
1150 "strftime:UK:first");
1153 "strftime:CE:first");
1156 "strftime:ISO:first");
1159 "strftime:UTC:first");
1162 "strftime:LOCALE:first:inrange");
1165 "strftime:CUSTOM:first:inrange");
1179 "strftime:US:forward");
1182 "strftime:UK:forward");
1185 "strftime:CE:forward");
1188 "strftime:ISO:forward");
1191 "strftime:UTC:forward");
1194 "strftime:LOCALE:forward:inrange");
1197 "strftime:CUSTOM:forward:inrange");
1210 "strftime:US:fifth");
1213 "strftime:UK:fifth");
1216 "strftime:CE:fifth");
1219 "strftime:ISO:fifth");
1222 "strftime:UTC:fifth");
1225 "strftime:LOCALE:fifth:inrange");
1228 "strftime:CUSTOM:fifth:inrange");
1241 "strftime:US:forward2");
1244 "strftime:UK:forward2");
1247 "strftime:CE:forward2");
1250 "strftime:ISO:forward2");
1253 "strftime:UTC:forward2");
1256 "strftime:LOCALE:forward2:outofrange");
1259 "strftime:CUSTOM:forward2:outofrange");
1271 "1914-11-11T11:00:00Z")),
"armistice day");
1274 "strftime:US:second");
1277 "strftime:UK:second");
1280 "strftime:CE:second");
1283 "strftime:ISO:second");
1286 "strftime:UTC:second");
1289 "strftime:LOCALE:second:inrange");
1292 "strftime:CUSTOM:second:inrange");
1306 "strftime:US:third");
1309 "strftime:UK:third");
1312 "strftime:CE:third");
1315 "strftime:ISO:third");
1318 "strftime:UTC:third");
1321 "strftime:LOCALE:third:outofrange");
1324 "strftime:CUSTOM:third:outofrange");
1337 "strftime:US:fourth");
1340 "strftime:UK:fourth");
1343 "strftime:CE:fourth");
1346 "strftime:ISO:fourth");
1349 "strftime:UTC:fourth");
1352 "strftime:LOCALE:fourth:outofrange");
1355 "strftime:CUSTOM:fourth:outofrange");
1368 "strftime:US:fifth");
1371 "strftime:UK:fifth");
1374 "strftime:CE:fifth");
1377 "strftime:ISO:fifth");
1380 "strftime:UTC:fifth");
1383 "strftime:LOCALE:fifth:outofrange");
1386 "strftime:CUSTOM:fifth:outofrange");
1399 "strftime:US:sixth");
1402 "strftime:UK:sixth");
1405 "strftime:CE:sixth");
1408 "strftime:ISO:sixth");
1411 "strftime:UTC:sixth");
1414 "strftime:LOCALE:sixth:outofrange");
1417 "strftime:CUSTOM:sixth:outofrange");
1430 "strftime:US:seventh");
1433 "strftime:UK:seventh");
1436 "strftime:CE:seventh");
1439 "strftime:ISO:seventh");
1442 "strftime:UTC:seventh");
1445 "strftime:LOCALE:seventh:outofrange");
1448 "strftime:CUSTOM:seventh:outofrange");
1454 run_qoftime_test (
void)
1459 do_test ((time != NULL),
"failed to initialise QofTime.");
1464 do_test ((time != NULL),
"error found");
1468 do_test ((time != NULL),
"error found");
1470 "failed to set nanosecs");
1476 do_test ((time != NULL),
"error found");
1479 do_test ((
qof_time_equal (time, cmp) == FALSE),
"test equal failed.");
1480 do_test ((
qof_time_cmp (time, cmp) == -1),
"compare cmp test");
1483 do_test ((
qof_time_cmp (diff, cmp) == 0),
"compare diff test");
1495 "equality test failed");
1504 date = g_date_new_dmy (15, 5, 2006);
1507 do_test ((g_date_get_day (test) == 15),
"gdate day fail");
1508 do_test ((g_date_get_month (test) == 5),
"gdate month fail");
1509 do_test ((g_date_get_year (test) == 2006),
"gdate year fail");
1518 "add seconds failed");
1529 gint64 time_secs, diff;
1532 date = g_date_new_dmy (15, 5, 2006);
1535 do_test ((g_date_compare (date, cmp) == 0),
1536 "convert to and from gdate failed");
1544 "start of day incorrect");
1546 "set nano at day start incorrect");
1548 "set_day_middle failed");
1550 do_test (diff == (
SECS_PER_DAY / 2),
"middle of day incorrect");
1553 do_test ((g_date_compare (date, cmp) == 0),
1554 "middle of day not the same as original day");
1564 do_test ((g_date_compare (date, cmp) == 0),
1565 "end of day not the same as original day");
1582 "start of day incorrect");
1584 "today start nanosecs non zero");
1589 "start of today incorrect");
1591 "today start nanosecs non zero");
1599 date = g_date_new_dmy (15, 5, 2006);
1602 do_test ((mday == 31),
" wrong last day of May");
1609 "get year day test, September");
1615 "3/9/2003 not valid");
1616 do_test ((3 == d->
qd_wday),
"not Wednesday");
1620 "get year day test, leap year");
1626 "3/9/2003 not valid");
1627 do_test ((5 == d->
qd_wday),
"not Friday");
1631 "get year day test, May");
1637 "3/9/2003 not valid");
1638 do_test ((0 == d->
qd_wday),
"not Sunday");
1642 "get year day test, May");
1648 "3/9/2003 not valid");
1649 do_test ((3 == d->
qd_wday),
"not Wednesday, May");
1653 "get days in month, non-leap");
1656 "get days in month, leap year");
1666 date = g_date_new_dmy (15, 5, 2006);
1669 do_test ((success == TRUE),
"time to dmy failed");
1670 do_test ((day == 15),
"wrong day calculated");
1671 do_test ((month == 5),
"wrong month calculated");
1672 do_test ((year == 2006),
"wrong year calculated");
1674 do_test ((
qof_time_cmp (time, reverse) == 0),
"dmy to time failed");
1683 glong day, month, year;
1688 PINFO (
" base date for section = %s",
1698 do_test ((wrap_d->
qd_mon == month &&
1700 wrap_d->
qd_mday == (day - 1)),
1701 " this time on previous day");
1702 PINFO (
" same time previous day = %s",
1709 do_test ((wrap_d->
qd_mon == (month - 1) &&
1712 " this time last month");
1713 PINFO (
" same time previous month = %s",
1720 do_test ((wrap_d->
qd_mon == month &&
1721 wrap_d->
qd_year == (year - 1) &&
1723 " this time last year");
1724 PINFO (
" same time previous year = %s",
1741 run_qoftime_test ();
1742 run_qofdate_test ();
1743 run_print_scan_tests ();
1744 g_list_foreach (test_data, check_date_cycles, NULL);
1745 print_test_results ();
gint64 qd_year
Extended version to cope with full range of dates.
#define QOF_DATE_FORMAT_UTC
QOF UTC format, xsd:date compatible. QOF_UTC_DATE_FORMAT "%Y-%m-%dT%H:%M:%SZ".
#define PERR(format, args...)
gboolean qof_date_format_set_current(QofDateFormat df)
Selects one registered date format as the current default.
QofTime * qof_time_from_gdate(GDate *date)
Convert a GDate to a QofTime.
#define QOF_DATE_FORMAT_ISO
Short ISO form. "%F".
void qof_log_init_filename(const gchar *logfilename)
#define PINFO(format, args...)
gboolean qof_date_adddays(QofDate *qd, gint days)
Add a number of days to a QofDate and normalise.
void qof_date_free(QofDate *date)
QofDate * qof_date_from_qtime(const QofTime *qt)
gboolean qof_time_set_day_end(QofTime *qt)
set the given QofTime to the last second of that day.
gboolean qof_date_format_set_name(const gchar *name, QofDateFormat format)
Set a shorthand name for a custom date format.
QofDateFormat qof_date_format_from_name(const gchar *name)
Returns the default date format for a known shorthand name.
const gchar * qd_zone
Calculated value based on struct tm.tm_zone.
QofTime * qof_time_add_secs_copy(QofTime *qt, QofTimeSecs secs)
Create a new QofTime, secs different to an original.
guint8 qof_date_get_mday(gint month, gint64 year)
QofTime * qof_time_abs(QofTime *qt)
QofTimeSecs qof_time_get_secs(const QofTime *qt)
Get the number of seconds.
QofTime * qof_time_get_today_end(void)
gboolean qof_time_to_dmy(QofTime *qt, guint8 *day, guint8 *month, guint16 *year)
gint safe_strcasecmp(const gchar *da, const gchar *db)
gchar * qof_date_print(const QofDate *date, QofDateFormat df)
Convert a QofDate to a timestamp according to the specified date format.
QofTime * qof_time_copy(const QofTime *qt)
Create a copy of a QofTime.
gboolean qof_date_format_set_date_separator(const gchar sep, QofDateFormat df)
Set a locale-specific separator.
void qof_time_set_secs(QofTime *qt, QofTimeSecs secs)
Set the number of seconds.
QofTime * qof_time_new(void)
create an empty QofTime
QofDateFormat qof_date_format_get_current(void)
returns the current date format.
void qof_log_shutdown(void)
GDate * qof_time_to_gdate(QofTime *qt)
Convert QofTime to GDate.
gboolean qof_time_set_day_start(QofTime *qt)
set the given QofTime to the first second of that day.
QofTime * qof_time_dmy_to_time(guint8 day, guint8 month, guint16 year)
glong qof_time_get_nanosecs(const QofTime *qt)
Get the number of seconds.
const gchar * qof_date_format_get_format(QofDateFormat df)
Retrieve the strftime format string for a registered date format.
#define LEAVE(format, args...)
QofTime * qof_date_to_qtime(const QofDate *qd)
Full range replacement for struct tm.
gchar qof_date_format_get_date_separator(QofDateFormat df)
Return the field separator for the current date format.
gboolean qof_time_set_day_middle(QofTime *qt)
set the given QofTime to midday on the same day.
QofDate * qof_date_parse(const gchar *str, QofDateFormat df)
Convert a timestamp to a QofTime.
#define QOF_DATE_FORMAT_CE
Contintental European default. "%d.%m.%Y".
glong qd_hour
Signed replacement of struct tm.tm_hour.
void qof_time_free(QofTime *qt)
Free a QofTime when no longer required.
glong qd_min
Signed replacement of struct tm.tm_min.
gint qof_time_cmp(const QofTime *ta, const QofTime *tb)
glong qd_mon
Signed replacement of struct tm.tm_mon.
guint16 qof_date_get_yday(gint mday, gint month, gint64 year)
void qof_time_add_secs(QofTime *qt, QofTimeSecs secs)
Add (or subtract) seconds from a QofTime.
#define DEBUG(format, args...)
QofTime * qof_time_get_today_start(void)
GTimeVal * qof_time_get_current_start(void)
#define QOF_DATE_FORMAT_ISO8601
#define QOF_DATE_FORMAT_UK
United Kingdom default. "%d/%m/%Y".
gboolean qof_time_equal(const QofTime *ta, const QofTime *tb)
#define QOF_DATE_FORMAT_LOCALE
GNU locale default. "%x".
void qof_time_set_nanosecs(QofTime *qt, glong nano)
Set the number of seconds.
guint8 qof_time_last_mday(QofTime *qt)
QofTime * qof_time_set(QofTimeSecs t, glong nanosecs)
gboolean qof_date_addmonths(QofDate *qd, gint months, gboolean track_last_day)
void qof_log_set_default(QofLogLevel log_level)
const gchar * qof_date_format_to_name(QofDateFormat format)
Retrieve the shorthand name for the selected date format.
void qof_close(void)
Safely close down the Query Object Framework.
gint64 QofTimeSecs
Replacement for time_t.
#define QOF_DATE_FORMAT_CUSTOM
Date and time for the current locale "%c".
struct QofTime64 QofTime
Use a 64-bit signed int QofTime.
QofDate * qof_date_new(void)
gint qof_date_compare(const QofDate *d1, const QofDate *d2)
gint safe_strcmp(const gchar *da, const gchar *db)
void qof_time_from_gtimeval(QofTime *qt, GTimeVal *gtv)
Convert a QofTime to a GTimeVal.
glong qd_mday
Signed replacement of struct tm.tm_mday.
gboolean qof_time_to_gtimeval(QofTime *qt, GTimeVal *gtv)
Convert a QofTime to a GTimeVal.
void qof_init(void)
Initialise the Query Object Framework.
#define ENTER(format, args...)
gboolean qof_date_format_add(const gchar *str, QofDateFormat *identifier)
Add a specific strftime compatible string as a new QofDateFormat.
#define QOF_DATE_FORMAT_US
Continental US default. "%m/%d/%Y".
gboolean qof_date_valid(QofDate *date)
Validate a QofDate.
QofTime * qof_time_diff(const QofTime *ta, const QofTime *tb)
difference between two QofTimes.
const gchar * QofLogModule
QofDate * qof_date_from_struct_tm(const struct tm *stm)
Convert a struct tm to a QofDate.