1 /* $Id: date-t.c 7495 2006-03-19 23:21:38Z eagle $ */
2 /* makedate test suite */
11 static const time_t test_times[] = {
12 28800UL, /* Thu, 1 Jan 1970 00:00:00 -0800 (PST) */
13 362762400UL, /* Tue, 30 Jun 1981 15:20:00 +0000 (UTC) */
14 396977449UL, /* Sat, 31 Jul 1982 15:30:49 +0000 (UTC) */
15 825597049UL, /* Thu, 29 Feb 1996 12:30:49 +0000 (UTC) */
16 850435199UL, /* Thu, 12 Dec 1996 23:59:59 +0000 (UTC) */
17 852101999UL, /* Wed, 1 Jan 1997 06:59:59 +0000 (UTC) */
18 934288249UL, /* Tue, 10 Aug 1999 12:30:49 +0000 (UTC) */
19 946684800UL, /* Sat, 1 Jan 2000 00:00:00 +0000 (UTC) */
20 946713599UL, /* Fri, 31 Dec 1999 23:59:59 -0800 (PST) */
21 946713600UL, /* Sat, 1 Jan 2000 00:00:00 -0800 (PST) */
22 951827449UL, /* Tue, 29 Feb 2000 12:30:49 +0000 (UTC) */
23 954669599UL, /* Sun, 2 Apr 2000 01:59:59 -0800 (PST) */
24 954669600UL, /* Sun, 2 Apr 2000 03:00:00 -0700 (PDT) */
25 967707668UL, /* Thu, 31 Aug 2000 07:41:08 +0000 (UTC) */
26 972813600UL /* Sun, 29 Oct 2000 02:00:00 -0800 (PST) */
30 ok_time(int n, time_t right, const char *date, const char *hour, bool local)
34 seen = parsedate_nntp(date, hour, local);
38 printf("not ok %d\n wanted %lu seen %lu\n %s %s %d\n", n,
39 (unsigned long) right, (unsigned long) seen, date, hour,
44 check_nntp(int *n, time_t timestamp)
46 char date[9], hour[7];
47 struct tm *tmp_tm, tm;
49 tmp_tm = localtime(×tamp);
51 sprintf(date, "%02d%02d%02d", tm.tm_year % 100, tm.tm_mon + 1,
53 sprintf(hour, "%02d%02d%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
54 ok_time((*n)++, timestamp, date, hour, true);
55 sprintf(date, "%04d%02d%02d", tm.tm_year + 1900, tm.tm_mon + 1,
57 ok_time((*n)++, timestamp, date, hour, true);
58 tmp_tm = gmtime(×tamp);
60 sprintf(date, "%04d%02d%02d", tm.tm_year + 1900, tm.tm_mon + 1,
62 sprintf(hour, "%02d%02d%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
63 ok_time((*n)++, timestamp, date, hour, false);
76 char PST8PDT[] = "TZ=PST8PDT";
77 char Newfoundland[] = "TZ=Canada/Newfoundland";
79 printf("%d\n", 44 + ARRAY_SIZE(test_times) * 3 + 3);
82 status = makedate(-1, false, buff, sizeof(buff));
84 result = parsedate(buff, NULL);
85 diff = difftime(result, now);
87 ok(1, status && diff >= 0 && diff < 10);
89 status = makedate(-1, true, buff, sizeof(buff));
91 result = parsedate(buff, NULL);
92 diff = difftime(result, now);
94 ok(2, status && diff >= 0 && diff < 10);
99 status = makedate(100000000UL, false, buff, sizeof(buff));
101 ok_string(4, "Sat, 3 Mar 1973 09:46:40 +0000 (UTC)", buff);
102 status = makedate(100000000UL, true, buff, sizeof(buff));
104 ok_string(6, "Sat, 3 Mar 1973 01:46:40 -0800 (PST)", buff);
105 status = makedate(300000000UL, false, buff, sizeof(buff));
107 ok_string(8, "Thu, 5 Jul 1979 05:20:00 +0000 (UTC)", buff);
108 status = makedate(300000000UL, true, buff, sizeof(buff));
110 ok_string(10, "Wed, 4 Jul 1979 22:20:00 -0700 (PDT)", buff);
112 status = makedate(300000000UL, false, buff, 31);
114 status = makedate(300000000UL, false, buff, 32);
116 ok_string(13, "Thu, 5 Jul 1979 05:20:00 +0000", buff);
117 status = makedate(300000000UL, true, buff, 32);
119 ok_string(15, "Wed, 4 Jul 1979 22:20:00 -0700", buff);
121 putenv(Newfoundland);
124 status = makedate(900000045UL, true, buff, sizeof(buff));
126 if (memcmp(buff, "Thu, 9 Jul 1998 16:00:45 +0000", 30) == 0)
127 printf("ok 17 # skip - Newfoundland time zone not installed\n");
129 ok_string(17, "Thu, 9 Jul 1998 13:30:45 -0230 (NDT)", buff);
134 ok_time(18, (time_t) -1, "20000132", "000000", false);
135 ok_time(19, (time_t) -1, "20000132", "000000", true);
136 ok_time(20, (time_t) -1, "20000230", "000000", false);
137 ok_time(21, (time_t) -1, "20000230", "000000", true);
138 ok_time(22, (time_t) -1, "19990229", "000000", false);
139 ok_time(23, (time_t) -1, "19990229", "000000", true);
140 ok_time(24, (time_t) -1, "19990020", "000000", false);
141 ok_time(25, (time_t) -1, "19990120", "240000", false);
142 ok_time(26, (time_t) -1, "19990120", "146000", false);
143 ok_time(27, (time_t) -1, "19990120", "145961", false);
144 ok_time(28, (time_t) -1, "691231", "235959", false);
145 ok_time(29, (time_t) -1, "19691231", "235959", false);
146 ok_time(30, (time_t) -1, "19700100", "000000", false);
147 ok_time(31, 0, "19700101", "000000", false);
148 ok_time(32, 0, "700101", "000000", false);
149 ok_time(33, (time_t) -1, "2000010101", "000000", false);
150 ok_time(34, (time_t) -1, "00101", "000000", false);
151 ok_time(35, (time_t) -1, "20000101", "11111", false);
152 ok_time(36, (time_t) -1, "20000101", "1111111", false);
153 ok_time(37, (time_t) -1, "200001a1", "000000", false);
154 ok_time(38, (time_t) -1, "20000101", "00a000", false);
156 /* Times around the fall daylight savings change are ambiguous; accept
157 either of the possible interpretations, but make sure we get one or
159 result = parsedate_nntp("20001029", "010000", true);
160 ok(39, result == 972806400UL || result == 972810000UL);
161 result = parsedate_nntp("001029", "013000", true);
162 ok(40, result == 972808200UL || result == 972811800UL);
163 result = parsedate_nntp("20001029", "013000", true);
164 ok(41, result == 972808200UL || result == 972811800UL);
165 result = parsedate_nntp("001029", "013000", true);
166 ok(42, result == 972808200UL || result == 972811800UL);
167 result = parsedate_nntp("20001029", "015959", true);
168 ok(43, result == 972809999UL || result == 972813599UL);
169 result = parsedate_nntp("001029", "015959", true);
170 ok(44, result == 972809999UL || result == 972813599UL);
173 for (i = 0; i < ARRAY_SIZE(test_times); i++)
174 check_nntp(&n, test_times[i]);
175 check_nntp(&n, time(NULL));