Merge from vendor branch NCURSES:
[dragonfly.git] / crypto / heimdal-0.6.3 / lib / roken / strpftime-test.c
1 /*
2  * Copyright (c) 1999 Kungliga Tekniska Högskolan
3  * (Royal Institute of Technology, Stockholm, Sweden). 
4  * All rights reserved. 
5  *
6  * Redistribution and use in source and binary forms, with or without 
7  * modification, are permitted provided that the following conditions 
8  * are met: 
9  *
10  * 1. Redistributions of source code must retain the above copyright 
11  *    notice, this list of conditions and the following disclaimer. 
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright 
14  *    notice, this list of conditions and the following disclaimer in the 
15  *    documentation and/or other materials provided with the distribution. 
16  *
17  * 3. Neither the name of KTH nor the names of its contributors may be
18  *    used to endorse or promote products derived from this software without
19  *    specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
32
33 #ifdef HAVE_CONFIG_H
34 #include <config.h>
35 #endif
36 #include "roken.h"
37
38 RCSID("$Id: strpftime-test.c,v 1.2 1999/11/12 15:29:55 assar Exp $");
39
40 enum { MAXSIZE = 26 };
41
42 static struct testcase {
43     time_t t;
44     struct {
45         const char *format;
46         const char *result;
47     } vals[MAXSIZE];
48 } tests[] = {
49     {0,
50      {
51          {"%A", "Thursday"},
52          {"%a", "Thu"},
53          {"%B", "January"},
54          {"%b", "Jan"},
55          {"%C", "19"},
56          {"%d", "01"},
57          {"%e", " 1"},
58          {"%H", "00"},
59          {"%I", "12"},
60          {"%j", "001"},
61          {"%k", " 0"},
62          {"%l", "12"},
63          {"%M", "00"},
64          {"%m", "01"},
65          {"%n", "\n"},
66          {"%p", "AM"},
67          {"%S", "00"},
68          {"%t", "\t"},
69          {"%w", "4"},
70          {"%Y", "1970"},
71          {"%y", "70"},
72          {"%U", "00"},
73          {"%W", "00"},
74          {"%V", "01"},
75          {"%%", "%"},
76          {NULL, NULL}}
77     },
78     {90000,
79      {
80          {"%A", "Friday"},
81          {"%a", "Fri"},
82          {"%B", "January"},
83          {"%b", "Jan"},
84          {"%C", "19"},
85          {"%d", "02"},
86          {"%e", " 2"},
87          {"%H", "01"},
88          {"%I", "01"},
89          {"%j", "002"},
90          {"%k", " 1"},
91          {"%l", " 1"},
92          {"%M", "00"},
93          {"%m", "01"},
94          {"%n", "\n"},
95          {"%p", "AM"},
96          {"%S", "00"},
97          {"%t", "\t"},
98          {"%w", "5"},
99          {"%Y", "1970"},
100          {"%y", "70"},
101          {"%U", "00"},
102          {"%W", "00"},
103          {"%V", "01"},
104          {"%%", "%"},
105          {NULL, NULL}
106      }
107     },
108     {216306,
109      {
110          {"%A", "Saturday"},
111          {"%a", "Sat"},
112          {"%B", "January"},
113          {"%b", "Jan"},
114          {"%C", "19"},
115          {"%d", "03"},
116          {"%e", " 3"},
117          {"%H", "12"},
118          {"%I", "12"},
119          {"%j", "003"},
120          {"%k", "12"},
121          {"%l", "12"},
122          {"%M", "05"},
123          {"%m", "01"},
124          {"%n", "\n"},
125          {"%p", "PM"},
126          {"%S", "06"},
127          {"%t", "\t"},
128          {"%w", "6"},
129          {"%Y", "1970"},
130          {"%y", "70"},
131          {"%U", "00"},
132          {"%W", "00"},
133          {"%V", "01"},
134          {"%%", "%"},
135          {NULL, NULL}
136      }
137     },
138     {259200,
139      {
140          {"%A", "Sunday"},
141          {"%a", "Sun"},
142          {"%B", "January"},
143          {"%b", "Jan"},
144          {"%C", "19"},
145          {"%d", "04"},
146          {"%e", " 4"},
147          {"%H", "00"},
148          {"%I", "12"},
149          {"%j", "004"},
150          {"%k", " 0"},
151          {"%l", "12"},
152          {"%M", "00"},
153          {"%m", "01"},
154          {"%n", "\n"},
155          {"%p", "AM"},
156          {"%S", "00"},
157          {"%t", "\t"},
158          {"%w", "0"},
159          {"%Y", "1970"},
160          {"%y", "70"},
161          {"%U", "01"},
162          {"%W", "00"},
163          {"%V", "01"},
164          {"%%", "%"},
165          {NULL, NULL}
166      }
167     },
168     {915148800,
169      {
170          {"%A", "Friday"},
171          {"%a", "Fri"},
172          {"%B", "January"},
173          {"%b", "Jan"},
174          {"%C", "19"},
175          {"%d", "01"},
176          {"%e", " 1"},
177          {"%H", "00"},
178          {"%I", "12"},
179          {"%j", "001"},
180          {"%k", " 0"},
181          {"%l", "12"},
182          {"%M", "00"},
183          {"%m", "01"},
184          {"%n", "\n"},
185          {"%p", "AM"},
186          {"%S", "00"},
187          {"%t", "\t"},
188          {"%w", "5"},
189          {"%Y", "1999"},
190          {"%y", "99"},
191          {"%U", "00"},
192          {"%W", "00"},
193          {"%V", "53"},
194          {"%%", "%"},
195          {NULL, NULL}}
196     },
197     {942161105,
198      {
199
200          {"%A", "Tuesday"},
201          {"%a", "Tue"},
202          {"%B", "November"},
203          {"%b", "Nov"},
204          {"%C", "19"},
205          {"%d", "09"},
206          {"%e", " 9"},
207          {"%H", "15"},
208          {"%I", "03"},
209          {"%j", "313"},
210          {"%k", "15"},
211          {"%l", " 3"},
212          {"%M", "25"},
213          {"%m", "11"},
214          {"%n", "\n"},
215          {"%p", "PM"},
216          {"%S", "05"},
217          {"%t", "\t"},
218          {"%w", "2"},
219          {"%Y", "1999"},
220          {"%y", "99"},
221          {"%U", "45"},
222          {"%W", "45"},
223          {"%V", "45"},
224          {"%%", "%"},
225          {NULL, NULL}
226      }
227     }
228 };
229
230 int
231 main(int argc, char **argv)
232 {
233     int i, j;
234     int ret = 0;
235
236     for (i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) {
237         struct tm *tm;
238
239         tm = gmtime (&tests[i].t);
240
241         for (j = 0; tests[i].vals[j].format != NULL; ++j) {
242             char buf[128];
243             size_t len;
244             struct tm tm2;
245             char *ptr;
246
247             len = strftime (buf, sizeof(buf), tests[i].vals[j].format, tm);
248             if (len != strlen (buf)) {
249                 printf ("length of strftime(\"%s\") = %d (\"%s\")\n",
250                         tests[i].vals[j].format, len,
251                         buf);
252                 ++ret;
253                 continue;
254             }
255             if (strcmp (buf, tests[i].vals[j].result) != 0) {
256                 printf ("result of strftime(\"%s\") = \"%s\" != \"%s\"\n",
257                         tests[i].vals[j].format, buf,
258                         tests[i].vals[j].result);
259                 ++ret;
260                 continue;
261             }
262             memset (&tm2, 0, sizeof(tm2));
263             ptr = strptime (tests[i].vals[j].result,
264                             tests[i].vals[j].format,
265                             &tm2);
266             if (ptr == NULL || *ptr != '\0') {
267                 printf ("bad return value from strptime("
268                         "\"%s\", \"%s\")\n",
269                         tests[i].vals[j].result,
270                         tests[i].vals[j].format);
271                 ++ret;
272             }
273             strftime (buf, sizeof(buf), tests[i].vals[j].format, &tm2);
274             if (strcmp (buf, tests[i].vals[j].result) != 0) {
275                 printf ("reverse of \"%s\" failed: \"%s\" vs \"%s\"\n",
276                         tests[i].vals[j].format,
277                         buf, tests[i].vals[j].result);
278                 ++ret;
279             }
280         }
281     }
282     if (ret) {
283         printf ("%d errors\n", ret);
284         return 1;
285     } else
286         return 0;
287 }