summaryrefslogtreecommitdiff
path: root/mkgmtime_test.c
blob: 2365cc9a5452a86780e696f688da8e0cad1cfb90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#include "gps.h"

struct {
	struct tm t;
	time_t result;
} tests[] = {
	/* sec, min,  h, md, mon, year, wd,  yd, isdst,    timestamp        what	*/
	{{   0,   0,  0,  1,   0,   70,  0,   0,     0, }, 0 },	
	{{   0,   0,  0,  1,   0,   70,  0,   0,     0, }, 0          }, /* lower limit */
	{{   7,  14,  3, 19,   0,  138,  0,   0,     0, }, 0x7fffffff }, /* upper limit */
	{{   0,   0, 12,  1,   0,   99,  0,   0,     0, }, 915192000  }, /* leap year */
	{{   0,   0, 12,  1,   1,   99,  0,   0,     0, }, 917870400  }, /* leap year */
	{{   0,   0, 12,  1,   2,   99,  0,   0,     0, }, 920289600  }, /* leap year */
	{{   0,   0, 12,  1,   8,   99,  0,   0,     0, }, 936187200  }, /* leap year */
	{{   0,   0, 12,  1,   0,  100,  0,   0,     0, }, 946728000  }, /* leap year */
	{{   0,   0, 12,  1,   1,  100,  0,   0,     0, }, 949406400  }, /* leap year */
	{{   0,   0, 12,  1,   2,  100,  0,   0,     0, }, 951912000  }, /* leap year */
	{{   0,   0, 12,  1,   8,  100,  0,   0,     0, }, 967809600  }, /* leap year */
	{{   0,   0, 12,  1,   0,  101,  0,   0,     0, }, 978350400  }, /* leap year */
	{{   0,   0, 12,  1,   1,  101,  0,   0,     0, }, 981028800  }, /* leap year */
	{{   0,   0, 12,  1,   2,  101,  0,   0,     0, }, 983448000  }, /* leap year */
	{{   0,   0, 12,  1,   8,  101,  0,   0,     0, }, 999345600  }, /* leap year */
	{{   0,   0, 12,  1,   0,  102,  0,   0,     0, }, 1009886400 }, /* leap year */
	{{   0,   0, 12,  1,   1,  102,  0,   0,     0, }, 1012564800 }, /* leap year */
	{{   0,   0, 12,  1,   2,  102,  0,   0,     0, }, 1014984000 }, /* leap year */
	{{   0,   0, 12,  1,   8,  102,  0,   0,     0, }, 1030881600 }, /* leap year */
	{{   0,   0, 12,  1,   0,  103,  0,   0,     0, }, 1041422400 }, /* leap year */
	{{   0,   0, 12,  1,   1,  103,  0,   0,     0, }, 1044100800 }, /* leap year */
	{{   0,   0, 12,  1,   2,  103,  0,   0,     0, }, 1046520000 }, /* leap year */
	{{   0,   0, 12,  1,   8,  103,  0,   0,     0, }, 1062417600 }, /* leap year */
	{{   0,   0, 12,  1,   0,  104,  0,   0,     0, }, 1072958400 }, /* leap year */
	{{   0,   0, 12,  1,   1,  104,  0,   0,     0, }, 1075636800 }, /* leap year */
	{{   0,   0, 12,  1,   2,  104,  0,   0,     0, }, 1078142400 }, /* leap year */
	{{   0,   0, 12,  1,   8,  104,  0,   0,     0, }, 1094040000 }, /* leap year */
	{{   0,   0, 12,  1,   0,  108,  0,   0,     0, }, 1199188800 }, /* leap year */
	{{   0,   0, 12,  1,   1,  108,  0,   0,     0, }, 1201867200 }, /* leap year */
	{{   0,   0, 12,  1,   2,  108,  0,   0,     0, }, 1204372800 }, /* leap year */
	{{   0,   0, 12,  1,   8,  108,  0,   0,     0, }, 1220270400 }, /* leap year */
	{{  59,  59, 23, 31,  12,  110,  0,   0,     0, }, 1296518399 }, /* year wrap */
	{{   0,   0,  0,  1,   0,  111,  0,   0,     0, }, 1293840000 }, /* year wrap */
	{{  59,  59, 23, 31,  12,  111,  0,   0,     0, }, 1328054399 }, /* year wrap */
	{{   0,   0,  0,  1,   0,  112,  0,   0,     0, }, 1325376000 }, /* year wrap */
	{{  59,  59, 23, 31,  12,  112,  0,   0,     0, }, 1359676799 }, /* year wrap */
	{{   0,   0,  0,  1,   0,  113,  0,   0,     0, }, 1356998400 }, /* year wrap */
	{{  59,  59, 23, 31,   0,  115,  0,   0,     0, }, 1422748799 }, /* month wrap */
	{{   0,   0,  0,  1,   1,  115,  0,   0,     0, }, 1422748800 }, /* month wrap */
	{{  59,  59, 23, 28,   1,  115,  0,   0,     0, }, 1425167999 }, /* month wrap */
	{{   0,   0,  0,  1,   2,  115,  0,   0,     0, }, 1425168000 }, /* month wrap */
	{{  59,  59, 23, 31,   2,  115,  0,   0,     0, }, 1427846399 }, /* month wrap */
	{{   0,   0,  0,  1,   3,  115,  0,   0,     0, }, 1427846400 }, /* month wrap */
	{{  59,  59, 23, 30,   3,  115,  0,   0,     0, }, 1430438399 }, /* month wrap */
	{{   0,   0,  0,  1,   4,  115,  0,   0,     0, }, 1430438400 }, /* month wrap */
	{{  59,  59, 23, 31,   4,  115,  0,   0,     0, }, 1433116799 }, /* month wrap */
	{{   0,   0,  0,  1,   5,  115,  0,   0,     0, }, 1433116800 }, /* month wrap */
	{{  59,  59, 23, 30,   5,  115,  0,   0,     0, }, 1435708799 }, /* month wrap */
	{{   0,   0,  0,  1,   6,  115,  0,   0,     0, }, 1435708800 }, /* month wrap */
	{{  59,  59, 23, 31,   6,  115,  0,   0,     0, }, 1438387199 }, /* month wrap */
	{{   0,   0,  0,  1,   7,  115,  0,   0,     0, }, 1438387200 }, /* month wrap */
	{{  59,  59, 23, 31,   7,  115,  0,   0,     0, }, 1441065599 }, /* month wrap */
	{{   0,   0,  0,  1,   8,  115,  0,   0,     0, }, 1441065600 }, /* month wrap */
	{{  59,  59, 23, 30,   8,  115,  0,   0,     0, }, 1443657599 }, /* month wrap */
	{{   0,   0,  0,  1,   9,  115,  0,   0,     0, }, 1443657600 }, /* month wrap */
	{{  59,  59, 23, 31,   9,  115,  0,   0,     0, }, 1446335999 }, /* month wrap */
	{{   0,   0,  0,  1,  10,  115,  0,   0,     0, }, 1446336000 }, /* month wrap */
	{{  59,  59, 23, 30,  10,  115,  0,   0,     0, }, 1448927999 }, /* month wrap */
	{{   0,   0,  0,  1,  11,  115,  0,   0,     0, }, 1448928000 }, /* month wrap */
	{{  59,  59, 23, 31,  11,  115,  0,   0,     0, }, 1451606399 }, /* month wrap */
	{{   0,   0,  0,  1,   0,  116,  0,   0,     0, }, 1451606400 }, /* month wrap */
};

int main(int argc, char *argv[])
{
	int i;
	char tbuf[128];
	time_t ts;
	bool failed = false;

	setenv("TZ", "GMT", 1);

	for (i = 0; i < (sizeof(tests)/sizeof(tests[0])); i++) {
#if 0	/* use this to calculate with glibc */
		ts = mktime(&tests[i].t);
#else
		ts = mkgmtime(&tests[i].t);
#endif
		if (ts != tests[i].result) {
			failed = true;
			strftime(tbuf, sizeof(tbuf), "%F %T", &tests[i].t);
			printf("test %2d failed. " \
			       "Time returned from: %s should be %lu (but was: %lu)\n",
				i, tbuf, tests[i].result, ts);
		}
	}
	return (int)failed;
}