48 std::tm
val,
const char *pat,
int consumed,
49 const char *fmt,
int flags,
int err_expect = -1)
51 std::basic_ostringstream<charT>
ostrm;
53 typedef std::istreambuf_iterator<charT> InIter;
54 typedef std::ostreambuf_iterator<charT> OutIter;
56 const std::time_get<charT, InIter> &tg =
57 std::use_facet<std::time_get<charT, InIter> >(
ostrm.getloc ());
59 const std::time_put<charT, OutIter> &tp =
60 std::use_facet<std::time_put<charT, OutIter> >(
ostrm.getloc ());
65 for (std::size_t
j = 0; !!(wpatbuf [
j] = pat [
j]); ++
j);
67 const charT *wpat = wpatbuf;
68 const charT *wpatend = wpat + std::char_traits<charT>::length (wpat);
76 static std::tm zero_tm;
79 std::basic_istringstream<charT>
istrm (
ostrm.str ());
83 std::ios_base::iostate err = std::ios_base::goodbit;
85 const char *fname = 0;
87 InIter ibeg = InIter (
istrm);
92 || (
'E' == fmt [0] || (
'O' == fmt [0] &&
'\0' == fmt [2]))) {
104 fname =
"get_weekday";
105 iend = tg.get_weekday (ibeg, iend,
istrm, err, &
x);
109 fname =
"get_monthname";
110 iend = tg.get_monthname (ibeg, iend,
istrm, err, &
x);
115 iend = tg.get_date (ibeg, iend,
istrm, err, &
x);
120 iend = tg.get_time (ibeg, iend,
istrm, err, &
x);
125 iend = tg.get_year (ibeg, iend,
istrm, err, &
x);
130 if (
'E' == fmt [0] ||
'O' == fmt [0])
131 iend = tg.get (ibeg, iend,
istrm, err, &
x,
134 iend = tg.get (ibeg, iend,
istrm, err, &
x, *fmt);
145 const char *pfmt = fmt;
146 for (
end = fmtstr; *pfmt; *
end++ = *pfmt++);
149 iend = tg.get (ibeg, iend,
istrm, err, &
x, fmtstr,
end);
154 "line %d. time_get<%s>::%s (%{*Ac}, ..., \"%s\") "
155 "unexpectedly threw an exception",
156 __LINE__, cname, fname,
157 int (
sizeof (
charT)),
ostrm.str ().data (), fmt);
162 int extracted = -1 == consumed ? -1
163 : int (
istrm.rdbuf ()->pubseekoff (0, std::ios::cur, std::ios::in));
169 extracted == consumed && (-1 == err_expect || err == err_expect);
172 "line %d. time_get<%s>::%s (%{*Ac}, ..., \"%s\") "
173 "ate %d, expected %d, rdstate() == %{Is}, got %{Is}",
174 __LINE__, cname, fname,
175 int (
sizeof (
charT)),
ostrm.str ().data (), fmt,
176 extracted, consumed, err_expect, err);
178 success = 0 == std::memcmp (&
x, &
val,
sizeof x);
181 "line %d. time_get<%s>::%s (%{*Ac}, ..., \"%s\") got %{t}, "
182 "expected %{t}, flags = %{If}, locale (%s)",
183 __LINE__, cname, fname,
184 int (
sizeof (
charT)),
ostrm.str ().data (), fmt, &
x,
185 &
val,
flags, std::locale ().name ().data ());
192 int mday = 0,
int mon = 0,
int year = 0,
193 int wday = 0,
int yday = 0,
int isdst = 0)
195 std::tm
tmp = std::tm ();
199 std::time_t
t = std::time (0);
200 std::tm *ptm = std::localtime (&
t);
201 return ptm ? *ptm :
tmp;
213 tmp.tm_isdst = isdst;
220#define Boolalpha std::ios_base::boolalpha
221#define Dec std::ios_base::dec
222#define Fixed std::ios_base::fixed
223#define Hex std::ios_base::hex
224#define Internal std::ios_base::internal
225#define Left std::ios_base::left
226#define Oct std::ios_base::oct
227#define Right std::ios_base::right
228#define Scientific std::ios_base::scientific
229#define Showbase std::ios_base::showbase
230#define Showpoint std::ios_base::showpoint
231#define Showpos std::ios_base::showpos
232#define Skipws std::ios_base::skipws
233#define Unitbuf std::ios_base::unitbuf
234#define Uppercase std::ios_base::uppercase
235#define Bin std::ios_base::bin
236#define Adjustfield std::ios_base::adjustfield
237#define Basefield std::ios_base::basefield
238#define Floatfield std::ios_base::floatfield
239#define Nolock std::ios_base::nolock
240#define Nolockbuf std::ios_base::nolockbuf
245#define Bad std::ios_base::badbit
246#define Eof std::ios_base::eofbit
247#define Fail std::ios_base::failbit
248#define Good std::ios_base::goodbit
251#define T __LINE__, charT (), cname, mktm
254#define FUNCTION(fun) \
255 rw_info (0, 0, __LINE__, \
256 "std::time_get<%s>::%s() in locale (\"%s\")", \
257 cname, fun, std::locale ().name ().c_str ())
259#define STEP(desc) rw_info (0, 0, __LINE__, "%s", desc)
262template <
class charT>
266 std::locale::global (std::locale (
"C"));
271 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"%a", -1,
"a", 0,
Eof);
272 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"%a", -1,
"a", 0,
Eof);
273 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"%a", -1,
"a", 0,
Eof);
274 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"%a", -1,
"a", 0,
Eof);
275 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"%a", -1,
"a", 0,
Eof);
276 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"%a", -1,
"a", 0,
Eof);
277 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"%a", -1,
"a", 0,
Eof);
280 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sun", 3,
"a", 0,
Eof);
281 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"SUN", 3,
"a", 0,
Eof);
282 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"sun", 3,
"a", 0,
Eof);
283 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Mon", 3,
"a", 0,
Eof);
284 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tue", 3,
"a", 0,
Eof);
285 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wed", 3,
"a", 0,
Eof);
286 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thu", 3,
"a", 0,
Eof);
287 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Fri", 3,
"a", 0,
Eof);
288 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Sat", 3,
"a", 0,
Eof);
292 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"suna", 3,
"a", 0,
Good);
293 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"monb", 3,
"a", 0,
Good);
294 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"tuec", 3,
"a", 0,
Good);
295 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"wedd", 3,
"a", 0,
Good);
296 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"thue", 3,
"a", 0,
Good);
297 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"frif", 3,
"a", 0,
Good);
298 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"satg", 3,
"a", 0,
Good);
302 TEST (
T (0, 0, 0, 0, 0, 0, 0),
" Sun", 0,
"a", 0,
Fail);
303 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Mond", 4,
"a", 0,
Eof |
Fail);
304 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Tuesd", 5,
"a", 0,
Eof |
Fail);
305 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Wednesd", 7,
"a", 0,
Eof |
Fail);
306 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Thursda.", 7,
"a", 0,
Fail);
307 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Fridax", 5,
"a", 0,
Fail);
308 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"6Saturday", 0,
"a", 0,
Fail);
311 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"%A", -1,
"a", 0, -1);
312 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"%A", -1,
"a", 0, -1);
313 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"%A", -1,
"a", 0, -1);
314 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"%A", -1,
"a", 0, -1);
315 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"%A", -1,
"a", 0, -1);
316 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"%A", -1,
"a", 0, -1);
317 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"%A", -1,
"a", 0, -1);
320 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sunday", 6,
"a", 0,
Good);
321 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"SUNDAY", 6,
"a", 0,
Good);
322 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"sunday", 6,
"a", 0,
Good);
323 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Monday", 6,
"a", 0,
Good);
324 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tuesday", 7,
"a", 0,
Good);
325 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wednesday", 9,
"a", 0,
Good);
326 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thursday", 8,
"a", 0,
Good);
327 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Friday", 6,
"a", 0,
Good);
328 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Saturday", 8,
"a", 0,
Good);
330 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sunday ", 6,
"a", 0,
Good);
331 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Monday 0", 6,
"a", 0,
Good);
332 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tuesdayy", 7,
"a", 0,
Good);
333 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wednesday.", 9,
"a", 0,
Good);
334 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thursday,", 8,
"a", 0,
Good);
335 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Friday/", 6,
"a", 0,
Good);
336 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Saturday:", 8,
"a", 0,
Good);
340 TEST (
T (0, 0, 0, 0, 0),
"%b", -1,
"b", 0, -1);
341 TEST (
T (0, 0, 0, 0, 1),
"%b", -1,
"b", 0, -1);
342 TEST (
T (0, 0, 0, 0, 2),
"%b", -1,
"b", 0, -1);
343 TEST (
T (0, 0, 0, 0, 3),
"%b", -1,
"b", 0, -1);
344 TEST (
T (0, 0, 0, 0, 4),
"%b", -1,
"b", 0, -1);
345 TEST (
T (0, 0, 0, 0, 5),
"%b", -1,
"b", 0, -1);
346 TEST (
T (0, 0, 0, 0, 6),
"%b", -1,
"b", 0, -1);
347 TEST (
T (0, 0, 0, 0, 7),
"%b", -1,
"b", 0, -1);
348 TEST (
T (0, 0, 0, 0, 8),
"%b", -1,
"b", 0, -1);
349 TEST (
T (0, 0, 0, 0, 9),
"%b", -1,
"b", 0, -1);
350 TEST (
T (0, 0, 0, 0, 10),
"%b", -1,
"b", 0, -1);
351 TEST (
T (0, 0, 0, 0, 11),
"%b", -1,
"b", 0, -1);
353 TEST (
T (0, 0, 0, 0, 0),
"Jan", 3,
"b", 0,
Eof);
354 TEST (
T (0, 0, 0, 0, 1),
"Feb", 3,
"b", 0,
Eof);
355 TEST (
T (0, 0, 0, 0, 2),
"Mar", 3,
"b", 0,
Eof);
356 TEST (
T (0, 0, 0, 0, 3),
"Apr", 3,
"b", 0,
Eof);
357 TEST (
T (0, 0, 0, 0, 4),
"May", 3,
"b", 0,
Good);
358 TEST (
T (0, 0, 0, 0, 5),
"Jun", 3,
"b", 0,
Eof);
359 TEST (
T (0, 0, 0, 0, 6),
"Jul", 3,
"b", 0,
Eof);
360 TEST (
T (0, 0, 0, 0, 7),
"Aug", 3,
"b", 0,
Eof);
361 TEST (
T (0, 0, 0, 0, 8),
"Sep", 3,
"b", 0,
Eof);
362 TEST (
T (0, 0, 0, 0, 9),
"Oct", 3,
"b", 0,
Eof);
363 TEST (
T (0, 0, 0, 0, 10),
"Nov", 3,
"b", 0,
Eof);
364 TEST (
T (0, 0, 0, 0, 11),
"Dec", 3,
"b", 0,
Eof);
368 TEST (
T (0, 0, 0, 0, 0),
"J ", 1,
"b", 0,
Fail);
373 TEST (
T (0, 0, 0, 0, 0),
"%B", -1,
"b", 0, -1);
374 TEST (
T (0, 0, 0, 0, 1),
"%B", -1,
"b", 0, -1);
375 TEST (
T (0, 0, 0, 0, 2),
"%B", -1,
"b", 0, -1);
376 TEST (
T (0, 0, 0, 0, 3),
"%B", -1,
"b", 0, -1);
377 TEST (
T (0, 0, 0, 0, 4),
"%B", -1,
"b", 0, -1);
378 TEST (
T (0, 0, 0, 0, 5),
"%B", -1,
"b", 0, -1);
379 TEST (
T (0, 0, 0, 0, 6),
"%B", -1,
"b", 0, -1);
380 TEST (
T (0, 0, 0, 0, 7),
"%B", -1,
"b", 0, -1);
381 TEST (
T (0, 0, 0, 0, 8),
"%B", -1,
"b", 0, -1);
382 TEST (
T (0, 0, 0, 0, 9),
"%B", -1,
"b", 0, -1);
383 TEST (
T (0, 0, 0, 0, 10),
"%B", -1,
"b", 0, -1);
384 TEST (
T (0, 0, 0, 0, 11),
"%B", -1,
"b", 0, -1);
386 TEST (
T (0, 0, 0, 0, 0),
"January", 7,
"b", 0,
Good);
387 TEST (
T (0, 0, 0, 0, 0),
"January ", 7,
"b", 0,
Good);
388 TEST (
T (0, 0, 0, 0, 1),
"February", 8,
"b", 0,
Good);
389 TEST (
T (0, 0, 0, 0, 2),
"March", 5,
"b", 0,
Good);
390 TEST (
T (0, 0, 0, 0, 2),
"Marchh", 5,
"b", 0,
Good);
391 TEST (
T (0, 0, 0, 0, 3),
"April", 5,
"b", 0,
Good);
392 TEST (
T (0, 0, 0, 0, 4),
"May", 3,
"b", 0,
Good);
393 TEST (
T (0, 0, 0, 0, 5),
"June", 4,
"b", 0,
Good);
394 TEST (
T (0, 0, 0, 0, 6),
"July", 4,
"b", 0,
Good);
395 TEST (
T (0, 0, 0, 0, 6),
"Jull", 3,
"b", 0,
Good);
396 TEST (
T (0, 0, 0, 0, 7),
"August", 6,
"b", 0,
Good);
397 TEST (
T (0, 0, 0, 0, 8),
"September", 9,
"b", 0,
Good);
398 TEST (
T (0, 0, 0, 0, 9),
"October", 7,
"b", 0,
Good);
399 TEST (
T (0, 0, 0, 0, 10),
"November", 8,
"b", 0,
Good);
400 TEST (
T (0, 0, 0, 0, 11),
"December", 8,
"b", 0,
Good);
403 TEST (
T (0, 0, 0, 0, 0),
"Januar", 6,
"b", 0,
Eof |
Fail);
404 TEST (
T (0, 0, 0, 0, 0),
"Februar", 7,
"b", 0,
Eof |
Fail);
405 TEST (
T (0, 0, 0, 0, 0),
" March", 0,
"b", 0,
Fail);
406 TEST (
T (0, 0, 0, 0, 0),
"apri/", 4,
"b", 0,
Fail);
407 TEST (
T (0, 0, 0, 0, 0),
"/MAY", 0,
"b", 0,
Fail);
408 TEST (
T (0, 0, 0, 0, 0),
":Jun", 0,
"b", 0,
Fail);
409 TEST (
T (0, 0, 0, 0, 0),
"Ju ", 2,
"b", 0,
Fail);
413 TEST (
T (0, 0, 0, 1, 0, 100),
"%x", 8,
"x", 0,
Eof);
414 TEST (
T (0, 0, 0, 2, 1, 111),
"%x", 8,
"x", 0,
Eof);
415 TEST (
T (0, 0, 0, 3, 2, 122),
"%x", 8,
"x", 0,
Eof);
416 TEST (
T (0, 0, 0, 4, 3, 133),
"%x", 8,
"x", 0,
Eof);
417 TEST (
T (0, 0, 0, 5, 4, 144),
"%x", 8,
"x", 0,
Eof);
418 TEST (
T (0, 0, 0, 6, 5, 155),
"%x", 8,
"x", 0,
Eof);
419 TEST (
T (0, 0, 0, 7, 6, 166),
"%x", 8,
"x", 0,
Eof);
420 TEST (
T (0, 0, 0, 8, 7, 168),
"%x", 8,
"x", 0,
Eof);
421 TEST (
T (0, 0, 0, 9, 8, 69),
"%x", 8,
"x", 0,
Eof);
422 TEST (
T (0, 0, 0, 10, 9, 99),
"%x", 8,
"x", 0,
Eof);
424 TEST (
T (0, 0, 0, 11, 5, 155),
"06/11/55", 8,
"x", 0,
Eof);
425 TEST (
T (0, 0, 0, 12, 6, 167),
"07/12/67", 8,
"x", 0,
Eof);
426 TEST (
T (0, 0, 0, 23, 7, 78),
"08/23/78", 8,
"x", 0,
Eof);
427 TEST (
T (0, 0, 0, 31, 11, 89),
"12/31/89", 8,
"x", 0,
Eof);
431 TEST (
T ( 0, 0, 0),
"%X", 8,
"X", 0,
Eof);
432 TEST (
T ( 1, 59, 11),
"%X", 8,
"X", 0,
Eof);
433 TEST (
T (12, 48, 10),
"%X", 8,
"X", 0,
Eof);
434 TEST (
T (23, 37, 9),
"%X", 8,
"X", 0,
Eof);
435 TEST (
T (34, 26, 8),
"%X", 8,
"X", 0,
Eof);
436 TEST (
T (45, 15, 7),
"%X", 8,
"X", 0,
Eof);
437 TEST (
T (56, 4, 6),
"%X", 8,
"X", 0,
Eof);
439 TEST (
T ( 0, 0, 0),
"00:00:00", 8,
"X", 0,
Eof);
440 TEST (
T (60, 9, 23),
"23:09:60", 8,
"X", 0,
Eof);
441 TEST (
T (59, 18, 22),
"22:18:59", 8,
"X", 0,
Eof);
442 TEST (
T (58, 27, 21),
"21:27:58", 8,
"X", 0,
Eof);
443 TEST (
T (57, 36, 20),
"20:36:57", 8,
"X", 0,
Eof);
444 TEST (
T (56, 45, 19),
"19:45:56", 8,
"X", 0,
Eof);
445 TEST (
T (55, 54, 18),
"18:54:55", 8,
"X", 0,
Eof);
449 TEST (
T (0, 0, 0, 0, 0, -1900),
"0", 1,
"Y", 0,
Eof);
450 TEST (
T (0, 0, 0, 0, 0, -1900),
"00", 2,
"Y", 0,
Eof);
451 TEST (
T (0, 0, 0, 0, 0, -1899),
"001", 3,
"Y", 0,
Eof);
452 TEST (
T (0, 0, 0, 0, 0, -124),
"1776", 4,
"Y", 0,
Eof);
453 TEST (
T (0, 0, 0, 0, 0, 0),
"1900", 4,
"Y", 0,
Eof);
454 TEST (
T (0, 0, 0, 0, 0, 1),
"1901", 4,
"Y", 0,
Eof);
455 TEST (
T (0, 0, 0, 0, 0, 99),
"1999", 4,
"Y", 0,
Eof);
456 TEST (
T (0, 0, 0, 0, 0, 102),
"2002", 4,
"Y", 0,
Eof);
457 TEST (
T (0, 0, 0, 0, 0, 98099),
"99999", 5,
"Y", 0,
Eof);
470 STEP (
"%a, %A: the day of the week");
471 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sun", 3,
"A", 0,
Eof);
472 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Mon", 3,
"A", 0,
Eof);
473 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tue", 3,
"A", 0,
Eof);
474 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wed", 3,
"A", 0,
Eof);
475 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thu", 3,
"A", 0,
Eof);
476 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Fri", 3,
"A", 0,
Eof);
477 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Sat", 3,
"A", 0,
Eof);
479 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sunday", 6,
"A", 0,
Good);
480 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Monday", 6,
"A", 0,
Good);
481 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tuesday", 7,
"A", 0,
Good);
482 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wednesday", 9,
"A", 0,
Good);
483 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thursday", 8,
"A", 0,
Good);
484 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Friday", 6,
"A", 0,
Good);
485 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Saturday", 8,
"A", 0,
Good);
490 STEP (
"%b, %B: the month");
491 TEST (
T (0, 0, 0, 0, 0),
"January", 7,
"B", 0,
Good);
492 TEST (
T (0, 0, 0, 0, 1),
"February", 8,
"B", 0,
Good);
493 TEST (
T (0, 0, 0, 0, 2),
"March", 5,
"B", 0,
Good);
494 TEST (
T (0, 0, 0, 0, 3),
"April", 5,
"B", 0,
Good);
495 TEST (
T (0, 0, 0, 0, 4),
"May", 3,
"B", 0,
Good);
496 TEST (
T (0, 0, 0, 0, 5),
"June", 4,
"B", 0,
Good);
497 TEST (
T (0, 0, 0, 0, 6),
"July", 4,
"B", 0,
Good);
498 TEST (
T (0, 0, 0, 0, 7),
"August", 6,
"B", 0,
Good);
499 TEST (
T (0, 0, 0, 0, 8),
"September", 9,
"B", 0,
Good);
500 TEST (
T (0, 0, 0, 0, 9),
"October", 7,
"B", 0,
Good);
501 TEST (
T (0, 0, 0, 0, 10),
"November", 8,
"B", 0,
Good);
502 TEST (
T (0, 0, 0, 0, 11),
"December", 8,
"B", 0,
Good);
505 STEP (
"%c: date and time representation");
506 rw_warn (0, 0, __LINE__,
"%%c not being exercised");
511 STEP (
"%C: the century number");
512 TEST (
T (0, 0, 0, 0, 0, -1900),
"0", 1,
"C", 0,
Eof);
513 TEST (
T (0, 0, 0, 0, 0, -1800),
"1", 1,
"C", 0,
Eof);
514 TEST (
T (0, 0, 0, 0, 0, -1700),
"2", 1,
"C", 0,
Eof);
515 TEST (
T (0, 0, 0, 0, 0, -1600),
"3", 1,
"C", 0,
Eof);
516 TEST (
T (0, 0, 0, 0, 0, -1500),
"04", 2,
"C", 0,
Eof);
517 TEST (
T (0, 0, 0, 0, 0, 0),
"19", 2,
"C", 0,
Eof);
518 TEST (
T (0, 0, 0, 0, 0, 100),
"20", 2,
"C", 0,
Eof);
519 TEST (
T (0, 0, 0, 0, 0, 200),
"21", 2,
"C", 0,
Eof);
520 TEST (
T (0, 0, 0, 0, 0, 1300),
"32", 2,
"C", 0,
Eof);
521 TEST (
T (0, 0, 0, 0, 0, 8000),
"99", 2,
"C", 0,
Eof);
522 TEST (
T (0, 0, 0, 0, 0, 0),
"100", 3,
"C", 0,
Eof |
Fail);
526 STEP (
"%d: day of the month");
527 TEST (
T (0, 0, 0, 1),
"1", 1,
"d", 0,
Eof);
528 TEST (
T (0, 0, 0, 2),
"02", 2,
"d", 0,
Eof);
529 TEST (
T (0, 0, 0, 28),
"28", 2,
"d", 0,
Eof);
530 TEST (
T (0, 0, 0, 29),
"29", 2,
"d", 0,
Eof);
531 TEST (
T (0, 0, 0, 30),
"030", 3,
"d", 0,
Eof);
532 TEST (
T (0, 0, 0, 31),
"0031", 4,
"d", 0,
Eof);
535 TEST (
T (0, 0, 0, 0),
" 3", 0,
"d", 0,
Fail);
539 STEP (
"%D: the date as %m/%d/%y");
540 TEST (
T (0, 0, 0, 14, 3, 102),
"4/14/2", 6,
"D", 0,
Eof);
541 TEST (
T (0, 0, 0, 14, 3, 102),
"04/14/02", 8,
"D", 0,
Eof);
542 TEST (
T (0, 0, 0, 14, 3, 102),
"04/14/002", 9,
"D", 0,
Eof);
543 TEST (
T (0, 0, 0, 0, 0, 0),
"0/1/2002", 1,
"D", 0,
Fail);
544 TEST (
T (0, 0, 0, 0, 0, 0),
"4/0/2002", 3,
"D", 0,
Fail);
545 TEST (
T (0, 0, 0, 0, 0, 0),
"4/32/2002", 4,
"D", 0,
Fail);
548 STEP (
"%e: equivalent to %d");
549 TEST (
T (0, 0, 0, 1),
"01", 2,
"e", 0,
Eof);
550 TEST (
T (0, 0, 0, 9),
"9", 1,
"e", 0,
Eof);
551 TEST (
T (0, 0, 0, 31),
"31", 2,
"e", 0,
Eof);
554 TEST (
T (0, 0, 0, 0),
" 2", 0,
"e", 0,
Fail);
558 STEP (
"%h: equivalent to %b");
559 TEST (
T (0, 0, 0, 0, 0),
"Jan", 3,
"h", 0,
Eof);
560 TEST (
T (0, 0, 0, 0, 1),
"February", 8,
"h", 0,
Good);
561 TEST (
T (0, 0, 0, 0, 2),
"Mar", 3,
"h", 0,
Eof);
562 TEST (
T (0, 0, 0, 0, 3),
"April", 5,
"h", 0,
Good);
563 TEST (
T (0, 0, 0, 0, 4),
"May", 3,
"h", 0,
Good);
564 TEST (
T (0, 0, 0, 0, 5),
"June", 4,
"h", 0,
Good);
565 TEST (
T (0, 0, 0, 0, 6),
"Jul", 3,
"h", 0,
Eof);
566 TEST (
T (0, 0, 0, 0, 7),
"August", 6,
"h", 0,
Good);
567 TEST (
T (0, 0, 0, 0, 8),
"Sep", 3,
"h", 0,
Eof);
568 TEST (
T (0, 0, 0, 0, 9),
"October", 7,
"h", 0,
Good);
569 TEST (
T (0, 0, 0, 0, 10),
"Nov", 3,
"h", 0,
Eof);
570 TEST (
T (0, 0, 0, 0, 11),
"December", 8,
"h", 0,
Good);
574 STEP (
"%H: the hour (24-hour clock)");
575 TEST (
T (0, 0, 0),
"0", 1,
"H", 0,
Eof);
576 TEST (
T (0, 0, 0),
"00", 2,
"H", 0,
Eof);
577 TEST (
T (0, 0, 0),
"000", 3,
"H", 0,
Eof);
578 TEST (
T (0, 0, 1),
"1", 1,
"H", 0,
Eof);
579 TEST (
T (0, 0, 2),
"2", 1,
"H", 0,
Eof);
580 TEST (
T (0, 0, 3),
"3", 1,
"H", 0,
Eof);
581 TEST (
T (0, 0, 11),
"11", 2,
"H", 0,
Eof);
582 TEST (
T (0, 0, 12),
"12", 2,
"H", 0,
Eof);
583 TEST (
T (0, 0, 13),
"13", 2,
"H", 0,
Eof);
584 TEST (
T (0, 0, 23),
"23", 2,
"H", 0,
Eof);
585 TEST (
T (0, 0, 23),
"023", 3,
"H", 0,
Eof);
591 STEP (
"%I: the hour (12-hour clock)");
592 TEST (
T (0, 0, 0),
"1", 1,
"I", 0,
Eof);
593 TEST (
T (0, 0, 1),
"2", 1,
"I", 0,
Eof);
594 TEST (
T (0, 0, 2),
"3", 1,
"I", 0,
Eof);
595 TEST (
T (0, 0, 3),
"4", 1,
"I", 0,
Eof);
596 TEST (
T (0, 0, 4),
"5", 1,
"I", 0,
Eof);
597 TEST (
T (0, 0, 5),
"6", 1,
"I", 0,
Eof);
598 TEST (
T (0, 0, 6),
"7", 1,
"I", 0,
Eof);
599 TEST (
T (0, 0, 7),
"8", 1,
"I", 0,
Eof);
600 TEST (
T (0, 0, 8),
"9", 1,
"I", 0,
Eof);
601 TEST (
T (0, 0, 9),
"10", 2,
"I", 0,
Eof);
602 TEST (
T (0, 0, 10),
"11", 2,
"I", 0,
Eof);
603 TEST (
T (0, 0, 11),
"12", 2,
"I", 0,
Eof);
611 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"1", 1,
"j", 0,
Eof);
612 TEST (
T (0, 0, 0, 0, 0, 0, 0, 1),
"2", 1,
"j", 0,
Eof);
613 TEST (
T (0, 0, 0, 0, 0, 0, 0, 2),
"03", 2,
"j", 0,
Eof);
614 TEST (
T (0, 0, 0, 0, 0, 0, 0, 9),
"10", 2,
"j", 0,
Eof);
615 TEST (
T (0, 0, 0, 0, 0, 0, 0, 364),
"365", 3,
"j", 0,
Eof);
616 TEST (
T (0, 0, 0, 0, 0, 0, 0, 365),
"366", 3,
"j", 0,
Eof);
617 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"0", 1,
"j", 0,
Eof |
Fail);
618 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"367", 3,
"j", 0,
Eof |
Fail);
622 STEP (
"%k: equivalent to %H (GNU glibc extension)");
624 TEST (
T (0, 0, 0),
"0", 1,
"k", 0,
Eof);
625 TEST (
T (0, 0, 1),
"1", 1,
"k", 0,
Eof);
626 TEST (
T (0, 0, 9),
"9", 1,
"k", 0,
Eof);
627 TEST (
T (0, 0, 10),
"10", 2,
"k", 0,
Eof);
628 TEST (
T (0, 0, 11),
"11", 2,
"k", 0,
Eof);
629 TEST (
T (0, 0, 12),
"12", 2,
"k", 0,
Eof);
630 TEST (
T (0, 0, 13),
"13", 2,
"k", 0,
Eof);
631 TEST (
T (0, 0, 23),
"23", 2,
"k", 0,
Eof);
632 TEST (
T (0, 0, 23),
"023", 3,
"k", 0,
Eof);
640 STEP (
"%m: the month number");
641 TEST (
T (0, 0, 0, 0, 0, 0),
"1", 1,
"m", 0,
Eof);
642 TEST (
T (0, 0, 0, 0, 1, 0),
"2", 1,
"m", 0,
Eof);
643 TEST (
T (0, 0, 0, 0, 2, 0),
"3", 1,
"m", 0,
Eof);
644 TEST (
T (0, 0, 0, 0, 3, 0),
"4", 1,
"m", 0,
Eof);
645 TEST (
T (0, 0, 0, 0, 4, 0),
"5", 1,
"m", 0,
Eof);
646 TEST (
T (0, 0, 0, 0, 5, 0),
"6", 1,
"m", 0,
Eof);
647 TEST (
T (0, 0, 0, 0, 6, 0),
"7", 1,
"m", 0,
Eof);
648 TEST (
T (0, 0, 0, 0, 7, 0),
"8", 1,
"m", 0,
Eof);
649 TEST (
T (0, 0, 0, 0, 8, 0),
"9", 1,
"m", 0,
Eof);
650 TEST (
T (0, 0, 0, 0, 9, 0),
"10", 2,
"m", 0,
Eof);
651 TEST (
T (0, 0, 0, 0, 10, 0),
"11", 2,
"m", 0,
Eof);
652 TEST (
T (0, 0, 0, 0, 11, 0),
"12", 2,
"m", 0,
Eof);
653 TEST (
T (0, 0, 0, 0, 0, 0),
"01", 2,
"m", 0,
Eof);
654 TEST (
T (0, 0, 0, 0, 1, 0),
"02", 2,
"m", 0,
Eof);
655 TEST (
T (0, 0, 0, 0, 0, 0),
"0", 1,
"m", 0,
Eof |
Fail);
656 TEST (
T (0, 0, 0, 0, 0, 0),
"13", 2,
"m", 0,
Eof |
Fail);
659 STEP (
"%M: the minute");
660 TEST (
T (0, 0),
"0", 1,
"M", 0,
Eof);
661 TEST (
T (0, 0),
"00", 2,
"M", 0,
Eof);
662 TEST (
T (0, 0),
"000", 3,
"M", 0,
Eof);
663 TEST (
T (0, 1),
"1", 1,
"M", 0,
Eof);
664 TEST (
T (0, 2),
"2", 1,
"M", 0,
Eof);
665 TEST (
T (0, 19),
"19", 2,
"M", 0,
Eof);
666 TEST (
T (0, 29),
"29", 2,
"M", 0,
Eof);
667 TEST (
T (0, 59),
"59", 2,
"M", 0,
Eof);
671 STEP (
"%n: any whitespace");
678 TEST (
T (),
"\n\t", 2,
"n", 0,
Eof);
684 STEP (
"%p: the equivalent of AM/PM");
685 TEST (
T (0, 0, 1),
"AM", 2,
"p", 0,
Good);
686 TEST (
T (0, 0, 13),
"PM", 2,
"p", 0,
Good);
690 TEST (
T (0, 0, 0),
"M", 0,
"p", 0,
Fail);
691 TEST (
T (0, 0, 0),
"A ", 1,
"p", 0,
Fail);
692 TEST (
T (0, 0, 0),
"P ", 1,
"p", 0,
Fail);
697 STEP (
"%r: 12-hour clock time using the AM/PM notation");
698 rw_warn (0, 0, __LINE__,
"%%r not being exercised");
702 STEP (
"%R: the time as %H:%M");
703 TEST (
T (0, 0, 0),
"0:0", 3,
"R", 0,
Eof);
704 TEST (
T (0, 1, 0),
"0:1", 3,
"R", 0,
Eof);
705 TEST (
T (0, 2, 0),
"0:02", 4,
"R", 0,
Eof);
706 TEST (
T (0, 59, 0),
"0:59", 4,
"R", 0,
Eof);
707 TEST (
T (0, 48, 1),
"1:48", 4,
"R", 0,
Eof);
708 TEST (
T (0, 37, 11),
"11:37", 5,
"R", 0,
Eof);
709 TEST (
T (0, 26, 19),
"19:26", 5,
"R", 0,
Eof);
710 TEST (
T (0, 15, 22),
"22:15", 5,
"R", 0,
Eof);
711 TEST (
T (0, 4, 23),
"23:04", 5,
"R", 0,
Eof);
712 TEST (
T (0, 3, 23),
"23:03:00", 5,
"R", 0,
Good);
713 TEST (
T (0, 2, 23),
"23:2:01", 4,
"R", 0,
Good);
715 TEST (
T (0, 0, 0),
"24:00", 2,
"R", 0,
Fail);
718 STEP (
"%S: the seconds");
720 TEST (
T ( 1),
"01", 2,
"S", 0,
Eof);
721 TEST (
T ( 2),
"002", 3,
"S", 0,
Eof);
722 TEST (
T (13),
"13", 2,
"S", 0,
Eof);
723 TEST (
T (24),
"24", 2,
"S", 0,
Eof);
724 TEST (
T (34),
"34", 2,
"S", 0,
Eof);
725 TEST (
T (45),
"45", 2,
"S", 0,
Eof);
726 TEST (
T (56),
"56", 2,
"S", 0,
Eof);
727 TEST (
T (60),
"60", 2,
"S", 0,
Eof);
731 STEP (
"%t: any whitespace");
738 STEP (
"%T: the time as %H:%M:%S");
739 TEST (
T ( 0, 0, 0),
"0:0:00", 6,
"T", 0,
Eof);
740 TEST (
T ( 1, 1, 0),
"0:1:1", 5,
"T", 0,
Eof);
741 TEST (
T ( 2, 2, 0),
"0:02:2", 6,
"T", 0,
Eof);
742 TEST (
T ( 3, 59, 0),
"0:59:3", 6,
"T", 0,
Eof);
743 TEST (
T ( 4, 48, 1),
"1:48:04", 7,
"T", 0,
Eof);
744 TEST (
T ( 5, 37, 11),
"11:37:5", 7,
"T", 0,
Eof);
745 TEST (
T ( 6, 26, 19),
"19:26:006", 9,
"T", 0,
Eof);
746 TEST (
T ( 7, 15, 22),
"22:015:7", 8,
"T", 0,
Eof);
747 TEST (
T ( 8, 4, 23),
"023:004:8", 9,
"T", 0,
Eof);
748 TEST (
T (60, 59, 23),
"023:59:60", 9,
"T", 0,
Eof);
757 STEP (
"%U: the Sunday-based week of the year");
758 rw_warn (0, 0, __LINE__,
"%%U not being exercised");
762 STEP (
"%w: the Sunday-based weekday as a decimal number");
763 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"0", 1,
"w", 0,
Eof);
764 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"00", 2,
"w", 0,
Eof);
765 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"1", 1,
"w", 0,
Eof);
766 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"01", 2,
"w", 0,
Eof);
767 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"2", 1,
"w", 0,
Eof);
768 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"3", 1,
"w", 0,
Eof);
769 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"4", 1,
"w", 0,
Eof);
770 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"5", 1,
"w", 0,
Eof);
771 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"6", 1,
"w", 0,
Eof);
772 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"7", 1,
"w", 0,
Eof |
Fail);
777 STEP (
"%W: the Monday-based week of the year");
778 rw_warn (0, 0, __LINE__,
"%%W not being exercised");
781 STEP (
"%x: the date");
782 TEST (
T (0, 0, 0, 25, 6, 67),
"7/25/1967", 9,
"%x", 0,
Eof);
785 STEP (
"%X: the time");
786 TEST (
T (12, 34, 5),
"5:34:12", 7,
"%X", 0,
Eof);
787 TEST (
T (23, 45, 6),
" 6:45:23", 8,
" %X", 0,
Eof);
798 STEP (
"%y: the year within century");
799 TEST (
T (0, 0, 0, 0, 0, 100),
"0", 1,
"%y", 0,
Eof);
800 TEST (
T (0, 0, 0, 0, 0, 100),
"00", 2,
"%y", 0,
Eof);
801 TEST (
T (0, 0, 0, 0, 0, 101),
"1", 1,
"%y", 0,
Eof);
802 TEST (
T (0, 0, 0, 0, 0, 102),
"2", 1,
"%y", 0,
Eof);
803 TEST (
T (0, 0, 0, 0, 0, 103),
"03", 2,
"%y", 0,
Eof);
804 TEST (
T (0, 0, 0, 0, 0, 168),
"68", 2,
"%y", 0,
Eof);
805 TEST (
T (0, 0, 0, 0, 0, 69),
"69", 2,
"%y", 0,
Eof);
806 TEST (
T (0, 0, 0, 0, 0, 99),
"99", 2,
"%y", 0,
Eof);
807 TEST (
T (0, 0, 0, 0, 0, -1800),
"100", 3,
"%y", 0,
Eof);
808 TEST (
T (0, 0, 0, 0, 0, 102),
"2002", 4,
"%y", 0,
Eof);
811 STEP (
"%Y: the year, including the century");
812 TEST (
T (0, 0, 0, 0, 0, -1900),
"0", 1,
"%Y", 0,
Eof);
813 TEST (
T (0, 0, 0, 0, 0, -1900),
" 0", 2,
" %Y", 0,
Eof);
814 TEST (
T (0, 0, 0, 0, 0, 99),
"\t1999", 5,
" %Y", 0,
Eof);
816 STEP (
"invalid pattern");
854 rw_warn (0, 0, __LINE__,
"E modifier not being exercised");
855 rw_warn (0, 0, __LINE__,
"O modifier not being exercised");
858 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sun Jan", 7,
"%a %b", 0,
Eof);
859 TEST (
T (0, 0, 0, 0, 1, 0, 1),
"Mon Feb", 8,
"%a %b", 0,
Eof);
860 TEST (
T (0, 0, 0, 0, 2, 0, 2),
"Tue%nMar", 7,
"%a %b", 0,
Eof);
861 TEST (
T (0, 0, 0, 0, 3, 0, 3),
"Wed%t Apr", 8,
"%a %b", 0,
Eof);
862 TEST (
T (0, 0, 0, 0, 2, 0, 5),
"Friday March", 12,
"%a %b", 0,
Good);
868template <
class charT>
873 std::locale::global (std::locale (locname));
877 "locale(%#s) unexpectedly threw an exception", locname);
884 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sun", 3,
"a", 0,
Eof);
885 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Mon", 3,
"a", 0,
Eof);
886 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tue", 3,
"a", 0,
Eof);
887 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wed", 3,
"a", 0,
Eof);
888 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thu", 3,
"a", 0,
Eof);
889 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Fri", 3,
"a", 0,
Eof);
890 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Sat", 3,
"a", 0,
Eof);
893 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sunday", 6,
"a", 0,
Good);
894 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Monday", 6,
"a", 0,
Good);
895 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Tuesday", 7,
"a", 0,
Good);
896 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Wednesday", 9,
"a", 0,
Good);
897 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Thursday", 8,
"a", 0,
Good);
898 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Friday", 6,
"a", 0,
Good);
899 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Saturday", 8,
"a", 0,
Good);
903 TEST (
T (0, 0, 0, 0, 0),
"%B", -1,
"b", 0, -1);
904 TEST (
T (0, 0, 0, 0, 1),
"%B", -1,
"b", 0, -1);
905 TEST (
T (0, 0, 0, 0, 2),
"%B", -1,
"b", 0, -1);
906 TEST (
T (0, 0, 0, 0, 3),
"%B", -1,
"b", 0, -1);
907 TEST (
T (0, 0, 0, 0, 4),
"%B", -1,
"b", 0, -1);
908 TEST (
T (0, 0, 0, 0, 5),
"%B", -1,
"b", 0, -1);
909 TEST (
T (0, 0, 0, 0, 6),
"%B", -1,
"b", 0, -1);
910 TEST (
T (0, 0, 0, 0, 7),
"%B", -1,
"b", 0, -1);
911 TEST (
T (0, 0, 0, 0, 8),
"%B", -1,
"b", 0, -1);
912 TEST (
T (0, 0, 0, 0, 9),
"%B", -1,
"b", 0, -1);
913 TEST (
T (0, 0, 0, 0, 10),
"%B", -1,
"b", 0, -1);
914 TEST (
T (0, 0, 0, 0, 11),
"%B", -1,
"b", 0, -1);
918 TEST (
T (0, 0, 0, 1, 0, 100),
"%x", 8,
"x", 0,
Eof);
930 const std::tm tmb =
mktm (0, 0, 1);
931 len = int (std::strftime (
buf,
sizeof buf,
"%X", &tmb));
934 const int hour = 11 ==
len ? 12 : 0;
943 TEST (
T ( 0, 0, 12 - hour),
"12:00:00 AM",
len,
"X", 0,
Good);
957 TEST (
T ( 0, 0, hour + 1),
"01:00:00 PM",
len,
"X", 0,
Good);
958 TEST (
T ( 0, 0, hour + 2),
"02:00:00 PM",
len,
"X", 0,
Good);
959 TEST (
T ( 0, 0, hour + 3),
"03:00:00 PM",
len,
"X", 0,
Good);
960 TEST (
T ( 0, 0, hour + 4),
"04:00:00 PM",
len,
"X", 0,
Good);
961 TEST (
T ( 0, 0, hour + 5),
"05:00:00 PM",
len,
"X", 0,
Good);
962 TEST (
T ( 0, 0, hour + 6),
"06:00:00 PM",
len,
"X", 0,
Good);
963 TEST (
T ( 0, 0, hour + 7),
"07:00:00 PM",
len,
"X", 0,
Good);
964 TEST (
T ( 0, 0, hour + 8),
"08:00:00 PM",
len,
"X", 0,
Good);
965 TEST (
T ( 0, 0, hour + 9),
"09:00:00 PM",
len,
"X", 0,
Good);
966 TEST (
T ( 0, 0, hour + 10),
"10:00:00 PM",
len,
"X", 0,
Good);
967 TEST (
T ( 0, 0, hour + 11),
"11:00:00 PM",
len,
"X", 0,
Good);
969 TEST (
T (60, 9, hour + 11),
"11:09:60 PM",
len,
"X", 0,
Good);
975template <
class charT>
980 std::locale::global (std::locale (locname));
984 "locale(%#s) unexpectedly threw an exception", locname);
993 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"%a", -1,
"a", 0,
Eof);
994 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"%a", -1,
"a", 0,
Eof);
995 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"%a", -1,
"a", 0,
Eof);
996 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"%a", -1,
"a", 0,
Eof);
997 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"%a", -1,
"a", 0,
Eof);
998 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"%a", -1,
"a", 0,
Eof);
999 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"%a", -1,
"a", 0,
Eof);
1002 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"Sonntag", 7,
"a", 0,
Good);
1003 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"Montag", 6,
"a", 0,
Good);
1004 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"Dienstag", 8,
"a", 0,
Good);
1005 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"Mittwoch", 8,
"a", 0,
Good);
1006 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"Donnerstag", 10,
"a", 0,
Good);
1007 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"Freitag", 7,
"a", 0,
Good);
1008 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"Samstag", 7,
"a", 0,
Good);
1012 TEST (
T (0, 0, 0, 0, 0),
"%B", -1,
"b", 0, -1);
1013 TEST (
T (0, 0, 0, 0, 1),
"%B", -1,
"b", 0, -1);
1014 TEST (
T (0, 0, 0, 0, 2),
"%B", -1,
"b", 0, -1);
1015 TEST (
T (0, 0, 0, 0, 3),
"%B", -1,
"b", 0, -1);
1016 TEST (
T (0, 0, 0, 0, 4),
"%B", -1,
"b", 0, -1);
1017 TEST (
T (0, 0, 0, 0, 5),
"%B", -1,
"b", 0, -1);
1018 TEST (
T (0, 0, 0, 0, 6),
"%B", -1,
"b", 0, -1);
1019 TEST (
T (0, 0, 0, 0, 7),
"%B", -1,
"b", 0, -1);
1020 TEST (
T (0, 0, 0, 0, 8),
"%B", -1,
"b", 0, -1);
1021 TEST (
T (0, 0, 0, 0, 9),
"%B", -1,
"b", 0, -1);
1022 TEST (
T (0, 0, 0, 0, 10),
"%B", -1,
"b", 0, -1);
1023 TEST (
T (0, 0, 0, 0, 11),
"%B", -1,
"b", 0, -1);
1029template <
class charT>
1034 std::locale::global (std::locale (locname));
1038 "locale(%#s) unexpectedly threw an exception", locname);
1045 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"%a", 3,
"a", 0,
Eof);
1046 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"%a", 3,
"a", 0,
Eof);
1047 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"%a", 3,
"a", 0,
Eof);
1048 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"%a", 3,
"a", 0,
Eof);
1049 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"%a", 3,
"a", 0,
Eof);
1050 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"%a", 3,
"a", 0,
Eof);
1051 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"%a", 3,
"a", 0,
Eof);
1055 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"man", 3,
"a", 0,
Eof);
1056 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"tir", 3,
"a", 0,
Eof);
1057 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"ons", 3,
"a", 0,
Eof);
1058 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"tor", 3,
"a", 0,
Eof);
1059 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"fre", 3,
"a", 0,
Eof);
1061 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"mandag", 6,
"a", 0,
Good);
1062 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"tirsdag", 7,
"a", 0,
Good);
1063 TEST (
T (0, 0, 0, 0, 0, 0, 3),
"onsdag", 6,
"a", 0,
Good);
1064 TEST (
T (0, 0, 0, 0, 0, 0, 4),
"torsdag", 7,
"a", 0,
Good);
1065 TEST (
T (0, 0, 0, 0, 0, 0, 5),
"fredag", 6,
"a", 0,
Good);
1069 TEST (
T (0, 0, 0, 0, 0),
"%B", -1,
"b", 0, -1);
1070 TEST (
T (0, 0, 0, 0, 1),
"%B", -1,
"b", 0, -1);
1071 TEST (
T (0, 0, 0, 0, 2),
"%B", -1,
"b", 0, -1);
1072 TEST (
T (0, 0, 0, 0, 3),
"%B", -1,
"b", 0, -1);
1073 TEST (
T (0, 0, 0, 0, 4),
"%B", -1,
"b", 0, -1);
1074 TEST (
T (0, 0, 0, 0, 5),
"%B", -1,
"b", 0, -1);
1075 TEST (
T (0, 0, 0, 0, 6),
"%B", -1,
"b", 0, -1);
1076 TEST (
T (0, 0, 0, 0, 7),
"%B", -1,
"b", 0, -1);
1077 TEST (
T (0, 0, 0, 0, 8),
"%B", -1,
"b", 0, -1);
1078 TEST (
T (0, 0, 0, 0, 9),
"%B", -1,
"b", 0, -1);
1079 TEST (
T (0, 0, 0, 0, 10),
"%B", -1,
"b", 0, -1);
1080 TEST (
T (0, 0, 0, 0, 11),
"%B", -1,
"b", 0, -1);
1127 static char locnamebuf [1024];
1133 char srcfname [1024];
1134 if (
rw_snprintf (srcfname,
sizeof srcfname,
"%s%c%s",
1138 std::FILE *fout = std::fopen (srcfname,
"w");
1140 "fopen(%#s, \"w\") failed: %{#m} - %m", srcfname);
1145 std::fprintf (fout,
"LC_TIME\n");
1149 std::fprintf (fout,
"abday ");
1151 for (
i = 0;
i !=
sizeof td->
abday /
sizeof *td->
abday; ++
i) {
1152 std::fprintf (fout,
"\"");
1154 std::fprintf (fout,
"\"%c",
i < 6 ?
';' :
'\n');
1157 std::fprintf (fout,
"day ");
1159 for (
i = 0;
i !=
sizeof td->
day /
sizeof *td->
day; ++
i) {
1160 std::fprintf (fout,
"\"");
1162 std::fprintf (fout,
"\"%c",
i < 6 ?
';' :
'\n');
1165 std::fprintf (fout,
"abmon ");
1167 for (
i = 0;
i !=
sizeof td->
abmon /
sizeof *td->
abmon; ++
i) {
1168 std::fprintf (fout,
"\"");
1170 std::fprintf (fout,
"\"%c",
i < 11 ?
';' :
'\n');
1173 std::fprintf (fout,
"mon ");
1175 for (
i = 0;
i !=
sizeof td->
mon /
sizeof *td->
mon; ++
i) {
1176 std::fprintf (fout,
"\"");
1178 std::fprintf (fout,
"\"%c",
i < 11 ?
';' :
'\n');
1181 std::fprintf (fout,
"am_pm ");
1183 for (
i = 0;
i !=
sizeof td->
am_pm /
sizeof *td->
am_pm; ++
i) {
1184 std::fprintf (fout,
"\"");
1186 std::fprintf (fout,
"\"%c",
i < 1 ?
';' :
'\n');
1192 std::fprintf (fout,
"\n# d_t_fmt \"%s\"\nd_t_fmt \"",
1196 std::fprintf (fout,
"\"\n\n# d_fmt \"%s\"\nd_fmt \"",
1200 std::fprintf (fout,
"\"\n\n# t_fmt \"%s\"\nt_fmt \"",
1204 std::fprintf (fout,
"\"\n\n# t_fmt_ampm \"%s\"\nt_fmt_ampm \"",
1208 std::fprintf (fout,
"\"\n\n# era_d_t_fmt \"%s\"\nera_d_t_fmt \"",
1212 std::fprintf (fout,
"\"\n\n# era_d_fmt \"%s\"\nera_d_fmt \"",
1216 std::fprintf (fout,
"\"\n\n# era_t_fmt \"%s\"\nera_t_fmt \"",
1220 std::fprintf (fout,
"\"\nalt_digits ");
1223 std::fprintf (fout,
"\"");
1225 std::fprintf (fout,
"\"%c", td->
alt_digits [
i + 1] ?
';' :
'\n');
1228 std::fprintf (fout,
"\n\nera ");
1234 std::sprintf (segment,
"%c:%d:%04d/%02d/%02d:",
1238 td->era [
i].start_year + 1900,
1239 td->era [
i].start_mon + 1,
1240 td->era [
i].start_day);
1242 const char *end_date = 0;
1250 std::sprintf (segment + std::strlen (segment),
"%s:%s:%s",
1254 std::sprintf (segment + std::strlen (segment),
1255 "%04d/%02d/%02d:%s:%s",
1263 std::fprintf (fout,
"\"");
1265 std::fprintf (fout,
"\"%c",
1269 std::fprintf (fout,
"\nEND LC_TIME\n");
1274 char cmfname [1024];
1275 if (
rw_snprintf (cmfname,
sizeof cmfname,
"%s%c%s",
1279 fout = std::fopen (cmfname,
"w");
1281 "fopen(%#s, \"w\") failed: %{#m} - %m", cmfname);
1291 const char*
const locname =
1292 rw_localedef (
"-w ", srcfname, cmfname,
"test-locale");
1294 if (locname && (std::strlen(locname) <
sizeof locnamebuf))
1295 std::strcpy (locnamebuf, locname);
1304 const char*
const alt_digits[] = {
1305 "",
"1st",
"2nd",
"3rd",
"4th",
1306 "5th",
"6th",
"7th",
"8th",
"9th",
1307 "10th",
"11th",
"12th",
"13th",
"14th",
1308 "15th",
"16th",
"17th",
"18th",
"19th",
1309 "20th",
"21st",
"22nd",
"23rd",
"24th",
1310 "25th",
"26th",
"27th",
"28th",
"29th",
1337 { 2, 2, 0, 90, 0, 0,
INT_MAX,
"Heisei",
"%EC %Ey Nen" },
1338 { 1, 8, 0, 89, 31, 11, 89,
"Heisei",
"%EC Gannen" },
1339 { 2, 1, 0, 27, 7, 0, 89,
"Showa",
"%EC %Ey Nen" },
1340 { -7, 31, 11, 26, 0, 0,
INT_MIN,
"bar",
"foo%EC %Ey" },
1341 {
INT_MIN , 0, 0, 0, 0, 0, 0, 0, 0 }
1346 {
"[Sun]",
"[Mon]",
"[Tue]",
"[Wed]",
"[Thu]",
"[Fri]",
"[Sat]" },
1350 "[Sunday]",
"[Monday]",
"[Tuesday]",
"[Wednesday]",
"[Thursday]",
1351 "[Friday]",
"[Saturday]"
1356 "[Jan]",
"[Feb]",
"[Mar]",
"[Apr]",
"[May]",
"[Jun]",
1357 "[Jul]",
"[Aug]",
"[Sep]",
"[Oct]",
"[Nov]",
"[Dec]",
1362 "[January]",
"[February]",
"[March]",
"[April]",
"[May]",
"[June]",
1363 "[July]",
"[August]",
"[September]",
"[October]",
"[November]",
1367 {
"[A.M.]",
"[P.M.]" },
1369 "[[%a][%b][%d][%H][%M][%S][%y]]",
1370 "[[%3m][%.4d][%4.3y]]",
1371 "[[%3H][%.4M][%4.3S]]",
1372 "[[%I][%M][%S][%p]]",
1373 "[[%A][%B][%Od][%H][%M][%S][%Y]]",
1374 "%Ow weekday, %OU week, %Oy year",
1375 "%OH hour, %OM minute, %OS second",
1380 const char*
const locname = make_LC_TIME (&td);
1388template <
class charT>
1394 "std::time_get<%s>, in locale(\"%s\") "
1395 "created from a generated LC_TIME file; "
1397 cname, locname, envar);
1403 loc = std::locale (
loc, locname, std::locale::time);
1407 "locale (locale (), \"%s\", locale::time) "
1408 "unexpectedly threw an exception", locname);
1413 std::locale::global (
loc);
1417 STEP (
"%Ec: alternative date and time representation");
1418 TEST (
T (0, 0, 0, 1, 0, 0, 0),
1420 "[[[Sunday]][[January]][1st][00][00][00][1900]]", 46,
1423 TEST (
T (5, 4, 3, 2, 1, 1, 1),
1424 "[[[monday]][[february]][2nd][03][04][05][1901]]", 47,
1427 TEST (
T (60, 59, 23, 31, 2, -1898, 2),
1429 "[[[TUE]][[MAR]][31st][23][59][60][02]]", 38,
1436 STEP (
"%Ex: alternative date representation");
1437 rw_warn (0, 0, __LINE__,
"%%Ex not being exercised");
1448 STEP (
"%EX: alternative time representation");
1453 "2nd hour, 1st minute, 0 second", 30,
1456 TEST (
T (21, 22, 23),
1458 "23rd hour, 22nd minute, 21st second", 35,
1463 STEP (
"%Ey: offset from %EC in alternative representation.");
1464 rw_warn (0, 0, __LINE__,
"%%Ey not being exercised");
1467 STEP (
"%EY: the full alternative year representation");
1468 rw_warn (0, 0, __LINE__,
"%%EY not being exercised");
1472 STEP (
"%Od: the day of the month using alternative numeric symbols");
1473 TEST (
T (0, 0, 0, 1),
"1st", 3,
"%Od", 0,
Good);
1474 TEST (
T (0, 0, 0, 2),
"2nd", 3,
"%Od", 0,
Good);
1475 TEST (
T (0, 0, 0, 11),
"11th", 4,
"%Od", 0,
Good);
1476 TEST (
T (0, 0, 0, 21),
"21st", 4,
"%Od", 0,
Good);
1477 TEST (
T (0, 0, 0, 30),
"30th", 4,
"%Od", 0,
Good);
1478 TEST (
T (0, 0, 0, 31),
"31st", 4,
"%Od", 0,
Good);
1482 STEP (
"%Oe: equivalent to %Od");
1483 TEST (
T (0, 0, 0, 3),
"3rd", 3,
"%Oe", 0,
Good);
1484 TEST (
T (0, 0, 0, 4),
"4th", 3,
"%Oe", 0,
Good);
1485 TEST (
T (0, 0, 0, 9),
"9th", 3,
"%Oe", 0,
Good);
1486 TEST (
T (0, 0, 0, 10),
"10th", 4,
"%Oe", 0,
Good);
1487 TEST (
T (0, 0, 0, 0),
"32nd", 2,
"%Oe", 0,
Fail);
1492 STEP (
"%OH: the hour (24-hour clock) using alternative numeric symbols");
1493 TEST (
T (0, 0, 0),
"0", 1,
"%OH", 0,
Eof);
1494 TEST (
T (0, 0, 0),
"00", 2,
"%OH", 0,
Eof);
1495 TEST (
T (0, 0, 1),
"1st", 3,
"%OH", 0,
Good);
1496 TEST (
T (0, 0, 2),
"2nd", 3,
"%OH", 0,
Good);
1497 TEST (
T (0, 0, 11),
"11th", 4,
"%OH", 0,
Good);
1498 TEST (
T (0, 0, 12),
"12th", 4,
"%OH", 0,
Good);
1499 TEST (
T (0, 0, 13),
"13th", 4,
"%OH", 0,
Good);
1500 TEST (
T (0, 0, 23),
"23rd", 4,
"%OH", 0,
Good);
1504 STEP (
"%OI: the hour (12-hour clock) using alternative numeric symbols");
1505 TEST (
T (0, 0, 0),
"0", 1,
"%OI", 0,
Eof);
1506 TEST (
T (0, 0, 0),
"000", 3,
"%OI", 0,
Eof);
1507 TEST (
T (0, 0, 3),
"3rd", 3,
"%OI", 0,
Good);
1508 TEST (
T (0, 0, 11),
"11th", 4,
"%OI", 0,
Good);
1509 TEST (
T (0, 0, 12),
"12th", 4,
"%OI", 0,
Good);
1510 TEST (
T (0, 0, 0),
"13th", 4,
"%OI", 0,
Fail);
1514 STEP (
"%Om: the month using alternative numeric symbols");
1515 TEST (
T (0, 0, 0, 0, 0),
"1st", 3,
"%Om", 0,
Good);
1516 TEST (
T (0, 0, 0, 0, 1),
"2nd", 3,
"%Om", 0,
Good);
1517 TEST (
T (0, 0, 0, 0, 2),
"3rd", 3,
"%Om", 0,
Good);
1518 TEST (
T (0, 0, 0, 0, 3),
"4th", 3,
"%Om", 0,
Good);
1519 TEST (
T (0, 0, 0, 0, 4),
"5th", 3,
"%Om", 0,
Good);
1520 TEST (
T (0, 0, 0, 0, 5),
"6th", 3,
"%Om", 0,
Good);
1521 TEST (
T (0, 0, 0, 0, 6),
"7th", 3,
"%Om", 0,
Good);
1522 TEST (
T (0, 0, 0, 0, 7),
"8th", 3,
"%Om", 0,
Good);
1523 TEST (
T (0, 0, 0, 0, 8),
"9th", 3,
"%Om", 0,
Good);
1524 TEST (
T (0, 0, 0, 0, 9),
"10th", 4,
"%Om", 0,
Good);
1525 TEST (
T (0, 0, 0, 0, 10),
"11th", 4,
"%Om", 0,
Good);
1526 TEST (
T (0, 0, 0, 0, 11),
"12th", 4,
"%Om", 0,
Good);
1527 TEST (
T (0, 0, 0, 0, 0),
"13th", 4,
"%Om", 0,
Fail);
1528 TEST (
T (0, 0, 0, 0, 0),
"0", 1,
"%Om", 0,
Eof |
Fail);
1529 TEST (
T (0, 0, 0, 0, 0),
"00", 2,
"%Om", 0,
Eof |
Fail);
1530 TEST (
T (0, 0, 0, 0, 0),
"01", 2,
"%Om", 0,
Eof |
Fail);
1533 STEP (
"%OM: the minutes using alternative numeric symbols");
1534 TEST (
T (0, 0),
"0", 1,
"%OM", 0,
Eof);
1535 TEST (
T (0, 1),
"1st", 3,
"%OM", 0,
Good);
1536 TEST (
T (0, 2),
"2nd", 3,
"%OM", 0,
Good);
1537 TEST (
T (0, 3),
"3rd", 3,
"%OM", 0,
Good);
1538 TEST (
T (0, 4),
"4th", 3,
"%OM", 0,
Good);
1539 TEST (
T (0, 29),
"29th", 4,
"%OM", 0,
Good);
1540 TEST (
T (0, 30),
"30th", 4,
"%OM", 0,
Good);
1541 TEST (
T (0, 31),
"31st", 4,
"%OM", 0,
Good);
1542 TEST (
T (0, 32),
"32", 2,
"%OM", 0,
Eof);
1547 STEP (
"%OS: the seconds using alternative numeric symbols");
1548 TEST (
T ( 0),
"0", 1,
"%OS", 0,
Eof);
1549 TEST (
T ( 1),
"1st", 3,
"%OS", 0,
Good);
1550 TEST (
T ( 2),
"2nd", 3,
"%OS", 0,
Good);
1551 TEST (
T ( 3),
"3rd", 3,
"%OS", 0,
Good);
1552 TEST (
T ( 4),
"4th", 3,
"%OS", 0,
Good);
1553 TEST (
T (29),
"29th", 4,
"%OS", 0,
Good);
1554 TEST (
T (30),
"30th", 4,
"%OS", 0,
Good);
1555 TEST (
T (31),
"31st", 4,
"%OS", 0,
Good);
1556 TEST (
T (32),
"32", 2,
"%OS", 0,
Eof);
1557 TEST (
T (59),
"059", 3,
"%OS", 0,
Eof);
1558 TEST (
T (60),
"0060", 4,
"%OS", 0,
Eof);
1564 STEP (
"%OU: the Sunday-based week using alternative numeric symbols");
1565 rw_warn (0, 0, __LINE__,
"%%OU not being exercised");
1569 STEP (
"%Ow: Sunday-based weekday using alternative numeric symbols");
1570 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"0", 1,
"%Ow", 0,
Eof);
1571 TEST (
T (0, 0, 0, 0, 0, 0, 1),
"1st", 3,
"%Ow", 0,
Good);
1572 TEST (
T (0, 0, 0, 0, 0, 0, 2),
"2nd", 3,
"%Ow", 0,
Good);
1573 TEST (
T (0, 0, 0, 0, 0, 0, 6),
"6th", 3,
"%Ow", 0,
Good);
1574 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"7th", 3,
"%Ow", 0,
Fail);
1575 TEST (
T (0, 0, 0, 0, 0, 0, 0),
"8", 1,
"%Ow", 0,
Eof |
Fail);
1579 STEP (
"%OW: the Monday-based week using alternative numeric symbols");
1580 rw_warn (0, 0, __LINE__,
"%%OW not being exercised");
1584 STEP (
"%Oy: year offset from %C using alternative numeric symbols");
1585 rw_warn (0, 0, __LINE__,
"%%Oy not being exercised");
1604 const char *locname;
1606 const char en[] =
"en-*-*-*";
1607 const char de[] =
"de-*-*-*";
1608 const char da[] =
"da-*-*-*";
1632 std::locale::global (std::locale (
"C"));
1635 locname = make_LC_TIME ();
1638 rw_error (0, 0, __LINE__,
"failed to generate LC_TIME locale data");
1644#ifndef _RWSTD_NO_WCHAR_T
1648 test_user (
wchar_t (),
"wchar_t", locname);
1654 std::locale::global (std::locale (
"C"));
1659 "%d file descriptor leaks detected", fd1 - fd0);
1662 "time_get not exercised in named locales");
1671 return rw_test (argc, argv, __FILE__,
1672 "lib.locale.time.get",
std::tm mktm(int sec=0, int min=0, int hour=0, int mday=0, int mon=0, int year=0, int wday=0, int yday=0, int isdst=0)
void test_german(charT, const char *cname, const char *locname)
void test_posix(charT, const char *cname)
void test_english(charT, const char *cname, const char *locname)
void test_danish(charT, const char *cname, const char *locname)
void test_user(charT, const char *cname, const char *locname)
void do_test(int line, const char *src, std::size_t resoff, ForwardIterator dummy_iter, const T *, const char *predname)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_fatal(int expr, const char *filename, int line, const char *fmtspec,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_error(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)
_TEST_EXPORT void pcs_write(void *, const char *)
_TEST_EXPORT int rw_nextfd(int *)
#define LOCALE_ROOT_ENVAR
_TEST_EXPORT const char * rw_set_locale_root()
_TEST_EXPORT const char * rw_localedef(const char *, const char *, const char *, const char *)
_TEST_EXPORT char * rw_locale_query(int=_UNUSED_CAT, const char *=0, _RWSTD_SIZE_T=0)
_TEST_EXPORT int rw_snprintf(char *, _RWSTD_SIZE_T, const char *,...)
const char *const * alt_digits