1/*
2 * Copyright (c) 2003, Intel Corporation. All rights reserved.
3 * Created by:  majid.awad REMOVE-THIS AT intel DOT com
4 * This file is licensed under the GPL license.  For the full content
5 * of this license, see the COPYING file at the top level of this
6 * source tree.
7 *
8 *
9 * This test case will cover all the conversion specifiers that are supported
10 * in strftime().
11 */
12
13#include <stdio.h>
14#include <stdlib.h>
15#include <locale.h>
16#include <langinfo.h>
17#include <time.h>
18#include "posixtest.h"
19
20int main(void)
21{
22
23	/* current time */
24	time_t t = time(NULL);
25	struct tm *local_t = localtime(&t);
26	char text[256];
27	int result;
28
29	setlocale(LC_TIME, "C");
30	strftime(text, sizeof(text), nl_langinfo(D_T_FMT), local_t);
31	printf("STRING IS:   %s\n\n", text);
32
33	/* use format controls to print the various date/time components. */
34
35	result = strftime(text, sizeof(text), "%a", local_t);
36	printf("a   Bytes %i           %s	", result, text);
37	if (result != 3) {
38		puts("Test Failed: \%a doesn't equal at least 3 bytes");
39		return PTS_FAIL;
40	} else {
41		puts("PASS");
42	}
43
44	result = strftime(text, sizeof(text), "%A", local_t);
45	printf("A   Bytes %i           %s	", result, text);
46	if (result <= 5) {
47		puts("Test Failed: \%A doesn't equal to 6 bytes");
48		return PTS_FAIL;
49	} else {
50		puts("PASS");
51	}
52
53	result = strftime(text, sizeof(text), "%b", local_t);
54	printf("b   Bytes %i           %s	", result, text);
55	if (result != 3) {
56		puts("Test Failed: \%b doesn't equal to 3 bytes");
57		return PTS_FAIL;
58	} else {
59		puts("PASS");
60	}
61
62	result = strftime(text, sizeof(text), "%B", local_t);
63	printf("B   Bytes %i           %s	", result, text);
64	if (result < 3) {
65		puts("Test Failed: \%B is less than3 bytes");
66		return PTS_FAIL;
67	} else {
68		puts("PASS");
69	}
70
71/*  This section has been commented for known bug in gcc:
72 *
73 *  result = strftime(text, sizeof(text), "%c", local_t);
74 *  printf("c   Bytes %i          %s	", result, text);
75 *  if (result <= 30) {
76 *    puts("Test Failed: \%c doesn't equal at least 30 bytes");
77 *   } else {
78 *    puts ("PASS");
79 *   }
80 */
81
82	result = strftime(text, sizeof(text), "%C", local_t);
83	printf("C   Bytes %i           %s	", result, text);
84	if (result != 2) {
85		puts("Test Failed: \%C doesn't equal at least 2 bytes");
86		return PTS_FAIL;
87	} else {
88		puts("PASS");
89	}
90
91	result = strftime(text, sizeof(text), "%d", local_t);
92	printf("d   Bytes %i           %s	", result, text);
93	if (result != 2) {
94		puts("Test Failed: \%d doesn't equal at least 2 bytes");
95		return PTS_FAIL;
96	} else {
97		puts("PASS");
98	}
99
100/*  This section has been commented for known bug in gcc:
101 *
102 *  result = strftime(text, sizeof(text), "%D", local_t);
103 *  printf("D   Bytes %i           %s	", result, text);
104 *  if (result != 8) {
105 *    puts("Test Failed: \%D doesn't equal at least 2 bytes");
106 *    return PTS_FAIL;
107 *   } else {
108 *    puts ("PASS");
109 *   }
110 */
111
112	result = strftime(text, sizeof(text), "%e", local_t);
113	printf("e   Bytes %i           %s	", result, text);
114	if (result != 2) {
115		puts("Test Failed: \%e doesn't equal at least 2 bytes");
116		return PTS_FAIL;
117	} else {
118		puts("PASS");
119	}
120
121	result = strftime(text, sizeof(text), "%F", local_t);
122	printf("F   Bytes %i           %s	", result, text);
123	if (result != 10) {
124		puts("Test Failed: \%F doesn't equal at least 10 bytes");
125		return PTS_FAIL;
126	} else {
127		puts("PASS");
128	}
129
130	result = strftime(text, sizeof(text), "%H", local_t);
131	printf("H   Bytes %i           %s	", result, text);
132	if (result != 2) {
133		puts("Test Failed: \%H doesn't equal at least 2 bytes");
134		return PTS_FAIL;
135	} else {
136		puts("PASS");
137	}
138
139/*  This section has been commented for known bug in gcc:
140 *
141 *   result = strftime(text, sizeof(text), "%g", local_t);
142 *   printf("g   Bytes %i           %s		", result, text);
143 *   if (result != 2) {
144*	    puts("Test Failed: \%g doesn't equal at least 2 bytes");
145*	    return PTS_FAIL;
146*    } else {
147*	    puts ("PASS");
148*    }
149*/
150
151	result = strftime(text, sizeof(text), "%G", local_t);
152	printf("G   Bytes %i           %s	", result, text);
153	if (result != 4) {
154		puts("Test Failed: \%G doesn't equal at least 4 bytes");
155		return PTS_FAIL;
156	} else {
157		puts("PASS");
158	}
159
160	result = strftime(text, sizeof(text), "%h", local_t);
161	printf("h   Bytes %i           %s	", result, text);
162	if (result != 3) {
163		puts("Test Failed: \%h doesn't equal at least 3 bytes");
164		return PTS_FAIL;
165	} else {
166		puts("PASS");
167	}
168
169	result = strftime(text, sizeof(text), "%I", local_t);
170	printf("I   Bytes %i           %s	", result, text);
171	if (result != 2) {
172		puts("Test Failed: \%I doesn't equal at least 2 bytes");
173		return PTS_FAIL;
174	} else {
175		puts("PASS");
176	}
177
178	result = strftime(text, sizeof(text), "%j", local_t);
179	printf("j   Bytes %i           %s	", result, text);
180	if (result != 3) {
181		puts("Test Failed: \%j doesn't equal at least 3 bytes");
182		return PTS_FAIL;
183	} else {
184		puts("PASS");
185	}
186
187	result = strftime(text, sizeof(text), "%m", local_t);
188	printf("m   Bytes %i           %s	", result, text);
189	if (result != 2) {
190		puts("Test Failed: \%m doesn't equal at least 2 bytes");
191		return PTS_FAIL;
192	} else {
193		puts("PASS");
194	}
195
196	result = strftime(text, sizeof(text), "%M", local_t);
197	printf("M   Bytes %i           %s	", result, text);
198	if (result != 2) {
199		puts("Test Failed: \%M doesn't equal at least 2 bytes");
200		return PTS_FAIL;
201	} else {
202		puts("PASS");
203	}
204
205	result = strftime(text, sizeof(text), "%n", local_t);
206	printf("n   Bytes %i           %s	", result, text);
207	if (result != 1) {
208		puts("Test Failed: \%n doesn't equal at least 1 bytes");
209		return PTS_FAIL;
210	} else {
211		puts("PASS");
212	}
213
214	result = strftime(text, sizeof(text), "%p", local_t);
215	printf("p   Bytes %i           %s	", result, text);
216	if (result != 2) {
217		puts("Test Failed: \%p doesn't equal at least 2 bytes");
218		return PTS_FAIL;
219	} else {
220		puts("PASS");
221	}
222
223	result = strftime(text, sizeof(text), "%r", local_t);
224	printf("r   Bytes %i           %s	", result, text);
225	if (result != 11) {
226		puts("Test Failed: \%r doesn't equal at least 11 bytes");
227		return PTS_FAIL;
228	} else {
229		puts("PASS");
230	}
231
232	result = strftime(text, sizeof(text), "%R", local_t);
233	printf("R   Bytes %i           %s	", result, text);
234	if (result != 5) {
235		puts("Test Failed: \%R doesn't equal at least 5 bytes");
236		return PTS_FAIL;
237	} else {
238		puts("PASS");
239	}
240
241	result = strftime(text, sizeof(text), "%S", local_t);
242	printf("S   Bytes %i           %s	", result, text);
243	if (result != 2) {
244		puts("Test Failed: \%S doesn't equal at least 2 bytes");
245		return PTS_FAIL;
246	} else {
247		puts("PASS");
248	}
249
250	result = strftime(text, sizeof(text), "%t", local_t);
251	printf("t   Bytes %i           %s	", result, text);
252	if (result != 1) {
253		puts("Test Failed: \%t doesn't equal at least 1 bytes");
254		return PTS_FAIL;
255	} else {
256		puts("PASS");
257	}
258
259	result = strftime(text, sizeof(text), "%T", local_t);
260	printf("T   Bytes %i           %s	", result, text);
261	if (result != 8) {
262		puts("Test Failed: \%T doesn't equal at least 8 bytes");
263		return PTS_FAIL;
264	} else {
265		puts("PASS");
266	}
267
268	result = strftime(text, sizeof(text), "%u", local_t);
269	printf("u   Bytes %i           %s	", result, text);
270	if (result != 1) {
271		puts("Test Failed: \%u doesn't equal at least 1 bytes");
272		return PTS_FAIL;
273	} else {
274		puts("PASS");
275	}
276
277	result = strftime(text, sizeof(text), "%U", local_t);
278	printf("U   Bytes %i           %s	", result, text);
279	if (result != 2) {
280		puts("Test Failed: \%U doesn't equal at least 2 bytes");
281		return PTS_FAIL;
282	} else {
283		puts("PASS");
284	}
285
286	result = strftime(text, sizeof(text), "%V", local_t);
287	printf("V   Bytes %i           %s	", result, text);
288	if (result != 2) {
289		puts("Test Failed: \%V doesn't equal at least 2 bytes");
290		return PTS_FAIL;
291	} else {
292		puts("PASS");
293	}
294
295	result = strftime(text, sizeof(text), "%w", local_t);
296	printf("w   Bytes %i           %s	", result, text);
297	if (result != 1) {
298		puts("Test Failed: \%w doesn't equal at least 1 bytes");
299		return PTS_FAIL;
300	} else {
301		puts("PASS");
302	}
303
304	result = strftime(text, sizeof(text), "%W", local_t);
305	printf("W   Bytes %i           %s	", result, text);
306	if (result != 2) {
307		puts("Test Failed: \%W doesn't equal at least 2 bytes");
308		return PTS_FAIL;
309	} else {
310		puts("PASS");
311	}
312
313/*  This section has been commented for known bug in gcc:
314 *
315 *  result = strftime(text, sizeof(text), "%x", local_t);
316 *  printf("x   Bytes %i           %s	", result, text);
317 *  if (result != 10) {
318 *    puts("Test Failed: \%x doesn't equal at least 10 bytes");
319 *    return PTS_FAIL;
320 *   } else {
321 *    puts ("PASS");
322 *   }
323 */
324
325	result = strftime(text, sizeof(text), "%X", local_t);
326	printf("X   Bytes %i           %s	", result, text);
327	if (result < 8) {
328		puts("Test Failed: \%X doesn't equal at least 8 bytes");
329		return PTS_FAIL;
330	} else {
331		puts("PASS");
332	}
333
334/*  This section has been commented for known bug in gcc:
335 *
336 *  result = strftime(text, sizeof(text), "%y", local_t);
337 *  printf("y   Bytes %i           %s	", result, text);
338 *  if (result != 2) {
339 *    puts("Test Failed: \%y doesn't equal at least 2 bytes");
340 *    return PTS_FAIL;
341 *   } else {
342 *    puts ("PASS");
343 *   }
344 */
345
346	result = strftime(text, sizeof(text), "%Y", local_t);
347	printf("Y   Bytes %i           %s	", result, text);
348	if (result != 4) {
349		puts("Test Failed: \%Y doesn't equal at least 4 bytes");
350		return PTS_FAIL;
351	} else {
352		puts("PASS");
353	}
354
355	result = strftime(text, sizeof(text), "%z", local_t);
356	printf("z   Bytes %i           %s	", result, text);
357	if (result != 5) {
358		puts("Test Failed: \%z doesn't equal at least 5 bytes");
359		return PTS_FAIL;
360	} else {
361		puts("PASS");
362	}
363
364	//result = strftime(text, sizeof(text), "%Z", local_t);
365	//printf("Z   Bytes %i           %s   ", result, text);
366	//if (result != 3) {
367//          puts("Test Failed: \%Z doesn't equal at least 3 bytes");
368	//             return PTS_FAIL;
369	//   } else {
370//                  puts ("PASS");
371	//    }
372	printf("\n");
373
374	return PTS_PASS;
375}
376