3
3
// University of Illinois/NCSA Open Source License. Both these licenses can be
4
4
// found in the LICENSE file.
5
5
6
+ #include <assert.h>
6
7
#include <time.h>
7
8
#include <stdio.h>
8
9
#include <string.h>
9
10
#include <stdlib.h>
10
11
11
- void test (int result, const char * comment, const char * parsed = " " ) {
12
- printf (" %s: %d\n " , comment, result);
13
- if (!result) {
14
- printf (" \n ERROR: %s (\" %s\" )\n " , comment, parsed);
15
- abort ();
16
- }
17
- }
12
+ #define TEST (result , comment , parsed ) \
13
+ printf("%s: %d\n", comment, result); \
14
+ if (!(result)) printf("ERROR: %s (%s)\n", comment, parsed); \
15
+ assert(result); \
18
16
19
17
int cmp (const char * s1 , const char * s2 ) {
20
18
for (; * s1 == * s2 ; s1 ++ , s2 ++ ) {
@@ -50,100 +48,100 @@ int main() {
50
48
printf ("%s -> %s\n" , fmt , s );
51
49
52
50
size = strftime (s , sizeof (s ), "" , & tm );
53
- test ((size == 0 ) && (*s == ' \0 ' ), " strftime test #1" , s);
51
+ TEST ((size == 0 ) && (* s == '\0' ), "strftime test #1" , s );
54
52
55
53
size = strftime (s , sizeof (s ), "%a" , & tm );
56
- test ((size == 3 ) && !cmp (s, " Thu" ), " strftime test #2" , s);
54
+ TEST ((size == 3 ) && !cmp (s , "Thu" ), "strftime test #2" , s );
57
55
58
56
size = strftime (s , sizeof (s ), "%A" , & tm );
59
- test ((size == 8 ) && !cmp (s, " Thursday" ), " strftime test #3" , s);
57
+ TEST ((size == 8 ) && !cmp (s , "Thursday" ), "strftime test #3" , s );
60
58
61
59
size = strftime (s , sizeof (s ), "%b" , & tm );
62
- test ((size == 3 ) && !cmp (s, " Feb" ), " strftime test #4" , s);
60
+ TEST ((size == 3 ) && !cmp (s , "Feb" ), "strftime test #4" , s );
63
61
64
62
size = strftime (s , sizeof (s ), "%B" , & tm );
65
- test ((size == 8 ) && !cmp (s, " February" ), " strftime test #5" , s);
63
+ TEST ((size == 8 ) && !cmp (s , "February" ), "strftime test #5" , s );
66
64
67
65
size = strftime (s , sizeof (s ), "%d" , & tm );
68
- test ((size == 2 ) && !cmp (s, " 21" ), " strftime test #6" , s);
66
+ TEST ((size == 2 ) && !cmp (s , "21" ), "strftime test #6" , s );
69
67
70
68
size = strftime (s , sizeof (s ), "%Od" , & tm );
71
- test ((size == 2 ) && !cmp (s, " 21" ), " strftime test #6a" , s);
69
+ TEST ((size == 2 ) && !cmp (s , "21" ), "strftime test #6a" , s );
72
70
73
71
size = strftime (s , sizeof (s ), "%H" , & tm );
74
- test ((size == 2 ) && !cmp (s, " 20" ), " strftime test #7" , s);
72
+ TEST ((size == 2 ) && !cmp (s , "20" ), "strftime test #7" , s );
75
73
76
74
size = strftime (s , sizeof (s ), "%OH" , & tm );
77
- test ((size == 2 ) && !cmp (s, " 20" ), " strftime test #7a" , s);
75
+ TEST ((size == 2 ) && !cmp (s , "20" ), "strftime test #7a" , s );
78
76
79
77
size = strftime (s , sizeof (s ), "%I" , & tm );
80
- test ((size == 2 ) && !cmp (s, " 08" ), " strftime test #8" , s);
78
+ TEST ((size == 2 ) && !cmp (s , "08" ), "strftime test #8" , s );
81
79
82
80
size = strftime (s , sizeof (s ), "%OI" , & tm );
83
- test ((size == 2 ) && !cmp (s, " 08" ), " strftime test #8a" , s);
81
+ TEST ((size == 2 ) && !cmp (s , "08" ), "strftime test #8a" , s );
84
82
85
83
size = strftime (s , sizeof (s ), "%j" , & tm );
86
- test ((size == 3 ) && !cmp (s, " 052" ), " strftime test #9" , s);
84
+ TEST ((size == 3 ) && !cmp (s , "052" ), "strftime test #9" , s );
87
85
88
86
size = strftime (s , sizeof (s ), "%m" , & tm );
89
- test ((size == 2 ) && !cmp (s, " 02" ), " strftime test #10" , s);
87
+ TEST ((size == 2 ) && !cmp (s , "02" ), "strftime test #10" , s );
90
88
91
89
size = strftime (s , sizeof (s ), "%Om" , & tm );
92
- test ((size == 2 ) && !cmp (s, " 02" ), " strftime test #10a" , s);
90
+ TEST ((size == 2 ) && !cmp (s , "02" ), "strftime test #10a" , s );
93
91
94
92
size = strftime (s , sizeof (s ), "%M" , & tm );
95
- test ((size == 2 ) && !cmp (s, " 23" ), " strftime test #11" , s);
93
+ TEST ((size == 2 ) && !cmp (s , "23" ), "strftime test #11" , s );
96
94
97
95
size = strftime (s , sizeof (s ), "%OM" , & tm );
98
- test ((size == 2 ) && !cmp (s, " 23" ), " strftime test #11a" , s);
96
+ TEST ((size == 2 ) && !cmp (s , "23" ), "strftime test #11a" , s );
99
97
100
98
size = strftime (s , sizeof (s ), "%p" , & tm );
101
- test ((size == 2 ) && !cmp (s, " PM" ), " strftime test #12" , s);
99
+ TEST ((size == 2 ) && !cmp (s , "PM" ), "strftime test #12" , s );
102
100
103
101
size = strftime (s , sizeof (s ), "%S" , & tm );
104
- test ((size == 2 ) && !cmp (s, " 04" ), " strftime test #13" , s);
102
+ TEST ((size == 2 ) && !cmp (s , "04" ), "strftime test #13" , s );
105
103
106
104
size = strftime (s , sizeof (s ), "%OS" , & tm );
107
- test ((size == 2 ) && !cmp (s, " 04" ), " strftime test #13a" , s);
105
+ TEST ((size == 2 ) && !cmp (s , "04" ), "strftime test #13a" , s );
108
106
109
107
size = strftime (s , sizeof (s ), "%U" , & tm );
110
- test ((size == 2 ) && !cmp (s, " 07" ), " strftime test #14" , s);
108
+ TEST ((size == 2 ) && !cmp (s , "07" ), "strftime test #14" , s );
111
109
112
110
size = strftime (s , sizeof (s ), "%OU" , & tm );
113
- test ((size == 2 ) && !cmp (s, " 07" ), " strftime test #14a" , s);
111
+ TEST ((size == 2 ) && !cmp (s , "07" ), "strftime test #14a" , s );
114
112
115
113
size = strftime (s , sizeof (s ), "%w" , & tm );
116
- test ((size == 1 ) && !cmp (s, " 4" ), " strftime test #15" , s);
114
+ TEST ((size == 1 ) && !cmp (s , "4" ), "strftime test #15" , s );
117
115
118
116
size = strftime (s , sizeof (s ), "%Ow" , & tm );
119
- test ((size == 1 ) && !cmp (s, " 4" ), " strftime test #15a" , s);
117
+ TEST ((size == 1 ) && !cmp (s , "4" ), "strftime test #15a" , s );
120
118
121
119
size = strftime (s , sizeof (s ), "%W" , & tm );
122
- test ((size == 2 ) && !cmp (s, " 07" ), " strftime test #16" , s);
120
+ TEST ((size == 2 ) && !cmp (s , "07" ), "strftime test #16" , s );
123
121
124
122
size = strftime (s , sizeof (s ), "%OW" , & tm );
125
- test ((size == 2 ) && !cmp (s, " 07" ), " strftime test #16a" , s);
123
+ TEST ((size == 2 ) && !cmp (s , "07" ), "strftime test #16a" , s );
126
124
127
125
size = strftime (s , sizeof (s ), "%y" , & tm );
128
- test ((size == 2 ) && !cmp (s, " 74" ), " strftime test #17" , s);
126
+ TEST ((size == 2 ) && !cmp (s , "74" ), "strftime test #17" , s );
129
127
130
128
size = strftime (s , sizeof (s ), "%Oy" , & tm );
131
- test ((size == 2 ) && !cmp (s, " 74" ), " strftime test #17a" , s);
129
+ TEST ((size == 2 ) && !cmp (s , "74" ), "strftime test #17a" , s );
132
130
133
131
size = strftime (s , sizeof (s ), "%Y" , & tm );
134
- test ((size == 4 ) && !cmp (s, " 1974" ), " strftime test #18" , s);
132
+ TEST ((size == 4 ) && !cmp (s , "1974" ), "strftime test #18" , s );
135
133
136
134
size = strftime (s , sizeof (s ), "%EY" , & tm );
137
- test ((size == 4 ) && !cmp (s, " 1974" ), " strftime test #18a" , s);
135
+ TEST ((size == 4 ) && !cmp (s , "1974" ), "strftime test #18a" , s );
138
136
139
137
size = strftime (s , sizeof (s ), "%%" , & tm );
140
- test ((size == 1 ) && !cmp (s, " %" ), " strftime test #19" , s);
138
+ TEST ((size == 1 ) && !cmp (s , "%" ), "strftime test #19" , s );
141
139
142
140
size = strftime (s , sizeof (s ), "%Y" , & tm );
143
- test ((size == 4 ) && !cmp (s, " 1974" ), " strftime test #20" , s);
141
+ TEST ((size == 4 ) && !cmp (s , "1974" ), "strftime test #20" , s );
144
142
145
143
size = strftime (s , 0 , "%Y" , & tm );
146
- test ((size == 0 ), " strftime test #21" , s);
144
+ TEST ((size == 0 ), "strftime test #21" , s );
147
145
148
146
// Reset tm to Jan 1st
149
147
tm .tm_mon = 0 ;
@@ -153,84 +151,84 @@ int main() {
153
151
// 1/1/1972 was a Tuesday
154
152
tm .tm_wday = 2 ;
155
153
size = strftime (s , sizeof (s ), "%U" , & tm );
156
- test ((size == 2 ) && !cmp (s, " 00" ), " strftime test #22" , s);
154
+ TEST ((size == 2 ) && !cmp (s , "00" ), "strftime test #22" , s );
157
155
158
156
size = strftime (s , sizeof (s ), "%W" , & tm );
159
- test ((size == 2 ) && !cmp (s, " 00" ), " strftime test #23" , s);
157
+ TEST ((size == 2 ) && !cmp (s , "00" ), "strftime test #23" , s );
160
158
161
159
// 1/1/1973 was a Monday and is in CW 1
162
160
tm .tm_year = 73 ;
163
161
tm .tm_wday = 1 ;
164
162
size = strftime (s , sizeof (s ), "%W" , & tm );
165
- test ((size == 2 ) && !cmp (s, " 01" ), " strftime test #24" , s);
163
+ TEST ((size == 2 ) && !cmp (s , "01" ), "strftime test #24" , s );
166
164
167
165
// 1/1/1978 was a Sunday and is in CW 1
168
166
tm .tm_year = 78 ;
169
167
tm .tm_wday = 0 ;
170
168
size = strftime (s , sizeof (s ), "%U" , & tm );
171
- test ((size == 2 ) && !cmp (s, " 01" ), " strftime test #25" , s);
169
+ TEST ((size == 2 ) && !cmp (s , "01" ), "strftime test #25" , s );
172
170
173
171
// 2/1/1999 (was a Saturday)
174
172
tm .tm_year = 99 ;
175
173
tm .tm_yday = 1 ;
176
174
tm .tm_wday = 6 ;
177
175
size = strftime (s , sizeof (s ), "%G (%V)" , & tm );
178
- test ((size == 9 ) && !cmp (s, " 1998 (53)" ), " strftime test #26" , s);
176
+ TEST ((size == 9 ) && !cmp (s , "1998 (53)" ), "strftime test #26" , s );
179
177
180
178
size = strftime (s , sizeof (s ), "%g" , & tm );
181
- test ((size == 2 ) && !cmp (s, " 98" ), " strftime test #27" , s);
179
+ TEST ((size == 2 ) && !cmp (s , "98" ), "strftime test #27" , s );
182
180
183
181
// 30/12/1997 (was a Tuesday)
184
182
tm .tm_year = 97 ;
185
183
tm .tm_yday = 363 ;
186
184
tm .tm_wday = 2 ;
187
185
size = strftime (s , sizeof (s ), "%G (%V)" , & tm );
188
- test ((size == 9 ) && !cmp (s, " 1998 (01)" ), " strftime test #28" , s);
186
+ TEST ((size == 9 ) && !cmp (s , "1998 (01)" ), "strftime test #28" , s );
189
187
190
188
size = strftime (s , sizeof (s ), "%g" , & tm );
191
- test ((size == 2 ) && !cmp (s, " 98" ), " strftime test #29" , s);
189
+ TEST ((size == 2 ) && !cmp (s , "98" ), "strftime test #29" , s );
192
190
193
191
tm .tm_wday = 0 ;
194
192
size = strftime (s , sizeof (s ), "%w" , & tm );
195
- test ((size == 1 ) && !cmp (s, " 0" ), " strftime test #30" , s);
193
+ TEST ((size == 1 ) && !cmp (s , "0" ), "strftime test #30" , s );
196
194
size = strftime (s , sizeof (s ), "%u" , & tm );
197
- test ((size == 1 ) && !cmp (s, " 7" ), " strftime test #31" , s);
195
+ TEST ((size == 1 ) && !cmp (s , "7" ), "strftime test #31" , s );
198
196
199
197
tm .tm_wday = 1 ;
200
198
size = strftime (s , sizeof (s ), "%w" , & tm );
201
- test ((size == 1 ) && !cmp (s, " 1" ), " strftime test #32" , s);
199
+ TEST ((size == 1 ) && !cmp (s , "1" ), "strftime test #32" , s );
202
200
size = strftime (s , sizeof (s ), "%u" , & tm );
203
- test ((size == 1 ) && !cmp (s, " 1" ), " strftime test #33" , s);
201
+ TEST ((size == 1 ) && !cmp (s , "1" ), "strftime test #33" , s );
204
202
205
203
tm .tm_wday = 2 ;
206
204
size = strftime (s , sizeof (s ), "%w" , & tm );
207
- test ((size == 1 ) && !cmp (s, " 2" ), " strftime test #34" , s);
205
+ TEST ((size == 1 ) && !cmp (s , "2" ), "strftime test #34" , s );
208
206
size = strftime (s , sizeof (s ), "%u" , & tm );
209
- test ((size == 1 ) && !cmp (s, " 2" ), " strftime test #35" , s);
207
+ TEST ((size == 1 ) && !cmp (s , "2" ), "strftime test #35" , s );
210
208
211
209
tm .tm_wday = 3 ;
212
210
size = strftime (s , sizeof (s ), "%w" , & tm );
213
- test ((size == 1 ) && !cmp (s, " 3" ), " strftime test #36" , s);
211
+ TEST ((size == 1 ) && !cmp (s , "3" ), "strftime test #36" , s );
214
212
size = strftime (s , sizeof (s ), "%u" , & tm );
215
- test ((size == 1 ) && !cmp (s, " 3" ), " strftime test #37" , s);
213
+ TEST ((size == 1 ) && !cmp (s , "3" ), "strftime test #37" , s );
216
214
217
215
tm .tm_wday = 4 ;
218
216
size = strftime (s , sizeof (s ), "%w" , & tm );
219
- test ((size == 1 ) && !cmp (s, " 4" ), " strftime test #38" , s);
217
+ TEST ((size == 1 ) && !cmp (s , "4" ), "strftime test #38" , s );
220
218
size = strftime (s , sizeof (s ), "%u" , & tm );
221
- test ((size == 1 ) && !cmp (s, " 4" ), " strftime test #39" , s);
219
+ TEST ((size == 1 ) && !cmp (s , "4" ), "strftime test #39" , s );
222
220
223
221
tm .tm_wday = 5 ;
224
222
size = strftime (s , sizeof (s ), "%w" , & tm );
225
- test ((size == 1 ) && !cmp (s, " 5" ), " strftime test #40" , s);
223
+ TEST ((size == 1 ) && !cmp (s , "5" ), "strftime test #40" , s );
226
224
size = strftime (s , sizeof (s ), "%u" , & tm );
227
- test ((size == 1 ) && !cmp (s, " 5" ), " strftime test #41" , s);
225
+ TEST ((size == 1 ) && !cmp (s , "5" ), "strftime test #41" , s );
228
226
229
227
tm .tm_wday = 6 ;
230
228
size = strftime (s , sizeof (s ), "%w" , & tm );
231
- test ((size == 1 ) && !cmp (s, " 6" ), " strftime test #42" , s);
229
+ TEST ((size == 1 ) && !cmp (s , "6" ), "strftime test #42" , s );
232
230
size = strftime (s , sizeof (s ), "%u" , & tm );
233
- test ((size == 1 ) && !cmp (s, " 6" ), " strftime test #43" , s);
231
+ TEST ((size == 1 ) && !cmp (s , "6" ), "strftime test #43" , s );
234
232
235
233
// timezones
236
234
time_t xmas2002 = 1040786563ll ;
@@ -241,67 +239,67 @@ int main() {
241
239
struct tm copy = tm ;
242
240
int ahead = timegm (& copy ) >= summer2002 ;
243
241
size = strftime (s , sizeof (s ), "%z" , & tm );
244
- test ((size == 5 ) && strchr (s, ahead ? ' +' : ' -' ), " strftime zone test #1" , s);
242
+ TEST ((size == 5 ) && strchr (s , ahead ? '+' : '-' ), "strftime zone test #1" , s );
245
243
size = strftime (s , sizeof (s ), "%Z" , & tm );
246
- test (strcmp (s, tzname[tm.tm_isdst ]) == 0 , " strftime zone test #2" , s);
244
+ TEST (strcmp (s , tzname [tm .tm_isdst ]) == 0 , "strftime zone test #2" , s );
247
245
248
246
localtime_r (& xmas2002 , & tm );
249
247
copy = tm ;
250
248
ahead = timegm (& copy ) >= xmas2002 ;
251
249
size = strftime (s , sizeof (s ), "%z" , & tm );
252
- test ((size == 5 ) && strchr (s, ahead ? ' +' : ' -' ), " strftime zone test #3" , s);
250
+ TEST ((size == 5 ) && strchr (s , ahead ? '+' : '-' ), "strftime zone test #3" , s );
253
251
size = strftime (s , sizeof (s ), "%Z" , & tm );
254
- test (strcmp (s, tzname[tm.tm_isdst ]) == 0 , " strftime zone test #4" , s);
252
+ TEST (strcmp (s , tzname [tm .tm_isdst ]) == 0 , "strftime zone test #4" , s );
255
253
256
254
// AM/PM
257
255
tm .tm_sec = 0 ;
258
256
tm .tm_min = 0 ;
259
257
260
258
tm .tm_hour = 0 ;
261
259
size = strftime (s , sizeof (s ), "%I %p" , & tm );
262
- test (!cmp (s, " 12 AM" ), " strftime test #32" , s);
260
+ TEST (!cmp (s , "12 AM" ), "strftime test #32" , s );
263
261
264
262
tm .tm_hour = 12 ;
265
263
size = strftime (s , sizeof (s ), "%I %p" , & tm );
266
- test (!cmp (s, " 12 PM" ), " strftime test #33" , s);
264
+ TEST (!cmp (s , "12 PM" ), "strftime test #33" , s );
267
265
268
266
tm .tm_min = 1 ;
269
267
270
268
tm .tm_hour = 0 ;
271
269
size = strftime (s , sizeof (s ), "%I %M %p" , & tm );
272
- test (!cmp (s, " 12 01 AM" ), " strftime test #34" , s);
270
+ TEST (!cmp (s , "12 01 AM" ), "strftime test #34" , s );
273
271
274
272
tm .tm_hour = 12 ;
275
273
size = strftime (s , sizeof (s ), "%I %M %p" , & tm );
276
- test (!cmp (s, " 12 01 PM" ), " strftime test #35" , s);
274
+ TEST (!cmp (s , "12 01 PM" ), "strftime test #35" , s );
277
275
278
276
// strftime week number edge case
279
277
// 2013-01-06 Sunday
280
278
time_t y2013 = 1357430400ll ;
281
279
gmtime_r (& y2013 , & tm );
282
280
size = strftime (s , sizeof (s ), "%Y-%m-%d %W %U" , & tm );
283
- test (!cmp (s, " 2013-01-06 00 01" ), " strftime test #36" , s);
281
+ TEST (!cmp (s , "2013-01-06 00 01" ), "strftime test #36" , s );
284
282
285
283
y2013 += 60 * 60 * 24 ;
286
284
gmtime_r (& y2013 , & tm );
287
285
size = strftime (s , sizeof (s ), "%Y-%m-%d %W %U" , & tm );
288
- test (!cmp (s, " 2013-01-07 01 01" ), " strftime test #36a" , s);
286
+ TEST (!cmp (s , "2013-01-07 01 01" ), "strftime test #36a" , s );
289
287
290
288
// strftime %V (ISO 8601 week number) edge cases
291
289
time_t dec17 = 1481932800 ;
292
290
gmtime_r (& dec17 , & tm );
293
291
size = strftime (s , sizeof (s ), "%Y-%m-%d %G %V %w" , & tm );
294
- test (!cmp (s, " 2016-12-17 2016 50 6" ), " strftime test #37" , s);
292
+ TEST (!cmp (s , "2016-12-17 2016 50 6" ), "strftime test #37" , s );
295
293
296
294
dec17 = 1513468800 ;
297
295
gmtime_r (& dec17 , & tm );
298
296
size = strftime (s , sizeof (s ), "%Y-%m-%d %G %V %w" , & tm );
299
- test (!cmp (s, " 2017-12-17 2017 50 0" ), " strftime test #37a" , s);
297
+ TEST (!cmp (s , "2017-12-17 2017 50 0" ), "strftime test #37a" , s );
300
298
301
299
dec17 = 1545004800 ;
302
300
gmtime_r (& dec17 , & tm );
303
301
size = strftime (s , sizeof (s ), "%Y-%m-%d %G %V %w" , & tm );
304
- test (!cmp (s, " 2018-12-17 2018 51 1" ), " strftime test #37b" , s);
302
+ TEST (!cmp (s , "2018-12-17 2018 51 1" ), "strftime test #37b" , s );
305
303
306
304
return 0 ;
307
305
}
0 commit comments