48#if _RWSTD_PATH_SEP == '/'
59#if defined (_RWSTD_NO_TZSET) && !defined (_RWSTD_NO_TZSET_IN_LIBC)
60# undef _RWSTD_NO_TZSET
68#ifndef _RWSTD_NO_TZSET
75const char*
narrow (
char *dst,
const char *src)
77 if (src == dst || !src || !dst)
80 std::memcpy (dst, src, std::strlen (src) + 1);
85const char*
widen (
char *dst,
const char *src)
87 if (src == dst || !src || !dst)
90 std::memcpy (dst, src, std::strlen (src) + 1);
95const char*
narrow (
char *dst,
const wchar_t *src)
97 static char buf [4096];
107 const std::size_t
len = std::wcstombs (dst, src,
sizeof buf /
sizeof *
buf);
109 if (std::size_t (-1) ==
len)
116const wchar_t*
widen (
wchar_t *dst,
const char *src)
118 static wchar_t buf [4096];
128 const std::size_t
len = std::mbstowcs (dst, src,
sizeof buf /
sizeof *
buf);
130 if (std::size_t (-1) ==
len)
138 const char *pat,
const std::tm *tmb)
140 static const std::tm
tmp = std::tm ();
145#if defined (_MSC_VER) || defined (__MINGW32__)
148 if (tmb->tm_hour < 0 || 24 <= tmb->tm_hour)
151 if (tmb->tm_min < 0 || 60 <= tmb->tm_min)
154 if (tmb->tm_sec < 0 || 60 <= tmb->tm_sec)
162 const int year = (tmb->tm_year + 1900);
163 const int century = (tmb->tm_year + 1900) / 100;
171 assert ((fpat + 16) < (patbuf + 512));
178 *fpat++ =
'%'; *fpat++ =
'%';
183 *fpat++ =
'0' + (century / 10) % 10;
184 *fpat++ =
'0' + (century % 10);
189 *fpat++ =
'%'; *fpat++ =
'm'; *fpat++ =
'/';
190 *fpat++ =
'%'; *fpat++ =
'd'; *fpat++ =
'/';
191 *fpat++ =
'%'; *fpat++ =
'y'; pat += 1;
196 if (tmb->tm_mday < 10)
199 *fpat++ =
'0' + (tmb->tm_mday / 10) % 10;
200 *fpat++ =
'0' + (tmb->tm_mday % 10);
206 *fpat++ =
'%'; *fpat++ =
'Y';
207 *fpat++ =
' '; *fpat++ =
'-'; *fpat++ =
' ';
208 *fpat++ =
'%'; *fpat++ =
'm';
209 *fpat++ =
' '; *fpat++ =
'-'; *fpat++ =
' ';
210 *fpat++ =
'%'; *fpat++ =
'd'; pat += 1;
222 *fpat++ =
'%'; *fpat++ =
'b'; pat += 1;
226 *fpat++ =
'\n'; pat += 1;
231 *fpat++ =
'%'; *fpat++ =
'I'; *fpat++ =
':';
232 *fpat++ =
'%'; *fpat++ =
'M'; *fpat++ =
':';
233 *fpat++ =
'%'; *fpat++ =
'S'; *fpat++ =
' ';
234 *fpat++ =
'%'; *fpat++ =
'p'; pat += 1;
238 *fpat++ =
'%'; *fpat++ =
'H'; *fpat++ =
':';
239 *fpat++ =
'%'; *fpat++ =
'M'; pat += 1;
243 *fpat++ =
'\t'; pat += 1;
247 *fpat++ =
'%'; *fpat++ =
'H'; *fpat++ =
':';
248 *fpat++ =
'%'; *fpat++ =
'M'; *fpat++ =
':';
249 *fpat++ =
'%'; *fpat++ =
'S'; pat += 1;
254 *fpat++ =
'0' + (tmb->tm_wday + 1);
282 const std::size_t
n = std::strftime (
buf, bufsize, patbuf, tmb);
286 const std::size_t
n = std::strftime (
buf, bufsize, pat, tmb);
297 const wchar_t *wpat,
const std::tm *tmb)
299 static const std::tm
tmp = std::tm ();
301#if !defined (_RWSTD_NO_WCSFTIME_WCHAR_T_FMAT) \
302 && !defined (_MSC_VER) && !defined (__MINGW32__)
304 std::size_t
n = std::wcsftime (wbuf, bufsize, wpat, tmb ? tmb : &
tmp);
325template <
class charT>
326struct Ios: std::basic_ios<charT>
334template <
class charT>
335struct Buffer: std::basic_streambuf<charT>
338 this->setp (beg,
end);
341 this->setp (beg,
end);
347template <
class charT>
360 const std::time_put<charT> &tp =
361 std::use_facet<std::time_put<charT> >(ios.getloc ());
363 ios.flags (std::ios_base::fmtflags (
flags));
364 ios.width (std::streamsize (width));
372 const charT*
const wpat =
widen (wpatbuf, pat);
377 if (
str &&
'%' ==
str [0] && tmb) {
393 rw_warn (0, 0, __LINE__,
"strftime failed");
401 const char*
const patend =
402 pat + std::char_traits<char>::length (pat);
407 std::ostreambuf_iterator<charT> it (&
sb);
411 typedef unsigned char UChar;
414 if (patend - pat == 2 &&
'%' == pat [0]) {
417 *tp.put (it, ios, wfill, tmb,
char (wpat [1])) =
charT ();
422 "line %d. time_put<%s>::do_put (%{t}, ..., %#c) "
423 "%{?}with TZ=\"%{$TZ}\" %{;}==>"
424 " %{*Ac}, expected %{*Ac}%{?} (strftime format %#s)%{;}, "
426 __LINE__, tname, tmb, pat [1],
427 'Z' == pat [1] ||
'z' == pat [1],
431 else if (patend - pat == 3 &&
'%' == pat [0]) {
434 *tp.put (it, ios, wfill, tmb,
char (wpat [2]),
char (wpat [1])) =
440 "line %d. time_put<%s>::do_put (%{t}, ..., %#c, %#c) ==>"
441 " %{*Ac}, expected %{*Ac}%{?} (strftime format %#s)%{;}, "
443 __LINE__, tname, tmb, pat [1], pat [2],
451 *tp.put (it, ios, wfill, tmb, wpat, wpat + (patend - pat)) =
charT ();
456 "line %d. time_put<%s>::do_put (%{t}, ..., %#s) "
457 "%{?}with TZ=\"%{$TZ}\" %{;}==>"
458 " %{*Ac}, expected %{*Ac}%{?} (strftime format %#s)%{;}, "
460 __LINE__, tname, tmb, pat,
461 std::strstr (pat,
"%Z") || std::strstr (pat,
"%z"),
470 const char*
abday [7];
472 const char*
abmon [12];
473 const char*
mon [12];
474 const char*
am_pm [2];
502 static char locnamebuf [1024];
510 char srcfname [1024];
511 if (
rw_snprintf (srcfname,
sizeof srcfname,
"%s%c%s",
515 std::FILE *fout = std::fopen (srcfname,
"w");
519 std::fprintf (fout,
"LC_TIME\n");
523 std::fprintf (fout,
"abday ");
525 for (
i = 0;
i !=
sizeof td->
abday /
sizeof *td->
abday; ++
i) {
526 std::fprintf (fout,
"\"");
528 std::fprintf (fout,
"\"%c",
i < 6 ?
';' :
'\n');
531 std::fprintf (fout,
"day ");
533 for (
i = 0;
i !=
sizeof td->
day /
sizeof *td->
day; ++
i) {
534 std::fprintf (fout,
"\"");
536 std::fprintf (fout,
"\"%c",
i < 6 ?
';' :
'\n');
539 std::fprintf (fout,
"abmon ");
541 for (
i = 0;
i !=
sizeof td->
abmon /
sizeof *td->
abmon; ++
i) {
542 std::fprintf (fout,
"\"");
544 std::fprintf (fout,
"\"%c",
i < 11 ?
';' :
'\n');
547 std::fprintf (fout,
"mon ");
549 for (
i = 0;
i !=
sizeof td->
mon /
sizeof *td->
mon; ++
i) {
550 std::fprintf (fout,
"\"");
552 std::fprintf (fout,
"\"%c",
i < 11 ?
';' :
'\n');
555 std::fprintf (fout,
"am_pm ");
557 for (
i = 0;
i !=
sizeof td->
am_pm /
sizeof *td->
am_pm; ++
i) {
558 std::fprintf (fout,
"\"");
560 std::fprintf (fout,
"\"%c",
i < 1 ?
';' :
'\n');
566 std::fprintf (fout,
"\n# d_t_fmt \"%s\"\nd_t_fmt \"",
570 std::fprintf (fout,
"\"\n\n# d_fmt \"%s\"\nd_fmt \"",
574 std::fprintf (fout,
"\"\n\n# t_fmt \"%s\"\nt_fmt \"",
578 std::fprintf (fout,
"\"\n\n# t_fmt_ampm \"%s\"\nt_fmt_ampm \"",
582 std::fprintf (fout,
"\"\n\n# era_d_t_fmt \"%s\"\nera_d_t_fmt \"",
586 std::fprintf (fout,
"\"\n\n# era_d_fmt \"%s\"\nera_d_fmt \"",
590 std::fprintf (fout,
"\"\n\n# era_t_fmt \"%s\"\nera_t_fmt \"",
594 std::fprintf (fout,
"\"\nalt_digits ");
597 std::fprintf (fout,
"\"");
599 std::fprintf (fout,
"\"%c", td->
alt_digits [
i + 1] ?
';' :
'\n');
602 std::fprintf (fout,
"\n\nera ");
608 std::sprintf (segment,
"%c:%d:%04d/%02d/%02d:",
616 const char *end_date = 0;
624 std::sprintf (segment + std::strlen (segment),
"%s:%s:%s",
628 std::sprintf (segment + std::strlen (segment),
629 "%04d/%02d/%02d:%s:%s",
637 std::fprintf (fout,
"\"");
639 std::fprintf (fout,
"\"%c",
643 std::fprintf (fout,
"\nEND LC_TIME\n");
649 if (
rw_snprintf (cmfname,
sizeof cmfname,
"%s%c%s",
653 fout = std::fopen (cmfname,
"w");
661 const char*
const locname =
667 if (locname && std::strlen (locname) <
sizeof locnamebuf)
668 std::strcpy (locnamebuf, locname);
671 std::remove (cmfname);
672 std::remove (srcfname);
689 const char *zone = 0)
691 static std::tm
tmp = std::tm ();
695 std::time_t
t = std::time (0);
696 std::tm *tmb = std::localtime (&
t);
697 return tmb ? tmb : &
tmp;
713 tmp.tm_isdst = isdst;
715#if defined (__linux__) && defined (_RWSTD_NO_PURE_C_HEADERS)
726 tmp.__tm_gmtoff = gmtoff;
727 tmp.__tm_zone = zone;
731 tmp.tm_gmtoff = gmtoff;
747#define T __LINE__, charT (), tname, mktm
751template <
class charT>
754 rw_info (0, 0, 0,
"std::time_put<%s>, std::locale (\"C\")", tname);
759 rw_info (0, 0, __LINE__,
"%%a: the locale's abbreviated weekday name");
760 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%a", 0, 0,
' ',
"%a");
761 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%a", 0, 0,
' ',
"Sun");
762 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%a", 0, 0,
' ',
"Mon");
763 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%a", 0, 0,
' ',
"Tue");
764 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%a", 0, 0,
' ',
"Wed");
765 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%a", 0, 0,
' ',
"Thu");
766 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%a", 0, 0,
' ',
"Fri");
767 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%a", 0, 0,
' ',
"Sat");
768 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%aday", 0, 0,
' ',
"Sunday");
769 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"Sun", 0, 0,
' ',
"%a");
770 TEST (
T (-1 ),
"%a", 0, 0,
' ',
"%a");
771 TEST (
T (-1),
"%a %a", 0, 0,
' ',
"%a %a");
772 TEST (
T (0, 0, 0, 1, 0, 0, -1),
"%a", 0, 0,
' ', 0 );
775 rw_info (0, 0, __LINE__,
"%%A: the locale's full weekday name");
776 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%A", 0, 0,
' ',
"%A");
777 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%A", 0, 0,
' ',
"Sunday");
778 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%A", 0, 0,
' ',
"Monday");
779 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%A", 0, 0,
' ',
"Tuesday");
780 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%A", 0, 0,
' ',
"Wednesday");
781 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%A", 0, 0,
' ',
"Thursday");
782 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%A", 0, 0,
' ',
"Friday");
783 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%A", 0, 0,
' ',
"Saturday");
784 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"Sunday", 0, 0,
' ',
"%A");
785 TEST (
T (-1 ),
"%A", 0, 0,
' ',
"%A");
786 TEST (
T (-1),
"%A %a", 0, 0,
' ',
"%A %a");
787 TEST (
T (-1),
"%a %A", 0, 0,
' ',
"%a %A");
788 TEST (
T (0, 0, 0, 1, 0, 0, -1),
"%A", 0, 0,
' ', 0 );
791 rw_info (0, 0, __LINE__,
"%%b: the locale's abbreviated month name");
792 TEST (
T (0, 0, 0, 1, 0),
"%b", 0, 0,
' ',
"%b");
793 TEST (
T (0, 0, 0, 1, 0),
"%b", 0, 0,
' ',
"Jan");
794 TEST (
T (0, 0, 0, 1, 1),
"%b", 0, 0,
' ',
"Feb");
795 TEST (
T (0, 0, 0, 1, 2),
"%b", 0, 0,
' ',
"Mar");
796 TEST (
T (0, 0, 0, 1, 3),
"%b", 0, 0,
' ',
"Apr");
797 TEST (
T (0, 0, 0, 1, 4),
"%b", 0, 0,
' ',
"May");
798 TEST (
T (0, 0, 0, 1, 5),
"%b", 0, 0,
' ',
"Jun");
799 TEST (
T (0, 0, 0, 1, 6),
"%b", 0, 0,
' ',
"Jul");
800 TEST (
T (0, 0, 0, 1, 7),
"%b", 0, 0,
' ',
"Aug");
801 TEST (
T (0, 0, 0, 1, 8),
"%b", 0, 0,
' ',
"Sep");
802 TEST (
T (0, 0, 0, 1, 9),
"%b", 0, 0,
' ',
"Oct");
803 TEST (
T (0, 0, 0, 1, 10),
"%b", 0, 0,
' ',
"Nov");
804 TEST (
T (0, 0, 0, 1, 11),
"%b", 0, 0,
' ',
"Dec");
805 TEST (
T (0, 0, 0, 1, 0),
" %buary", 0, 0,
' ',
" January");
806 TEST (
T (0, 0, 0, 1, 0),
"Jan", 0, 0,
' ',
"%b");
807 TEST (
T (-1 ),
"%b", 0, 0,
' ',
"%b");
808 TEST (
T (-1),
"%b %b", 0, 0,
' ',
"%b %b");
809 TEST (
T (0, 0, 0, 1, -1),
"%b", 0, 0,
' ', 0 );
812 rw_info (0, 0, __LINE__,
"%%B: the locale's full month name");
813 TEST (
T (0, 0, 0, 1, 0),
"%B", 0, 0,
' ',
"%B");
814 TEST (
T (0, 0, 0, 1, 0),
"%B", 0, 0,
' ',
"January");
815 TEST (
T (0, 0, 0, 1, 1),
"%B", 0, 0,
' ',
"February");
816 TEST (
T (0, 0, 0, 1, 2),
"%B", 0, 0,
' ',
"March");
817 TEST (
T (0, 0, 0, 1, 3),
"%B", 0, 0,
' ',
"April");
818 TEST (
T (0, 0, 0, 1, 4),
"%B", 0, 0,
' ',
"May");
819 TEST (
T (0, 0, 0, 1, 5),
"%B", 0, 0,
' ',
"June");
820 TEST (
T (0, 0, 0, 1, 6),
"%B", 0, 0,
' ',
"July");
821 TEST (
T (0, 0, 0, 1, 7),
"%B", 0, 0,
' ',
"August");
822 TEST (
T (0, 0, 0, 1, 8),
"%B", 0, 0,
' ',
"September");
823 TEST (
T (0, 0, 0, 1, 9),
"%B", 0, 0,
' ',
"October");
824 TEST (
T (0, 0, 0, 1, 10),
"%B", 0, 0,
' ',
"November");
825 TEST (
T (0, 0, 0, 1, 11),
"%B", 0, 0,
' ',
"December");
826 TEST (
T (),
"January", 0, 0,
' ',
"%B");
827 TEST (
T (-1 ),
"%B", 0, 0,
' ',
"%B");
828 TEST (
T (-1),
"%B %b", 0, 0,
' ',
"%B %b");
829 TEST (
T (-1),
"%A %B", 0, 0,
' ',
"%A %B");
830 TEST (
T (-1),
"%A %B ", 0, 0,
' ',
"%A %B ");
831 TEST (
T (0, 0, 0, 1, -1),
"%B", 0, 0,
' ', 0 );
837 "%%c: the locale's appropriate date and time representation");
842 TEST (
T (),
"%c", 0, 0,
' ',
"%a %b %e %T %Y");
843 TEST (
T (),
"%c %", 0, 0,
' ',
"%a %b %e %T %Y %");
844 TEST (
T (),
"%c", 0, 0,
' ',
"%a %b %e %H:%M:%S %Y");
845 TEST (
T (),
"%c", 0, 0,
' ',
"Sun Jan 1 00:00:00 1900");
846 TEST (
T (-1),
"%c", 0, 0,
' ',
"%a %b %e %T %Y");
847 TEST (
T (0, -1),
"%c", 0, 0,
' ', 0 );
849 TEST (
T ( 1, 2, 3, 4, 5, 6, 0),
"%c", 0, 0,
' ',
850 "Sun Jun 4 03:02:01 1906");
851 TEST (
T ( 2, 3, 4, 5, 6, 7, 0),
"%c", 0, 0,
' ',
852 "Sun Jul 5 04:03:02 1907");
853 TEST (
T (25, 7, 13, 30, 0, 103, 4),
"%c", 0, 0,
' ',
854 "Thu Jan 30 13:07:25 2003");
859 TEST (
T (
INT_MAX),
"%c", 0, 0,
' ',
"%a %b %e %H:%M:%S %Y");
864 "%%C: the year divided by 100 and truncated to an integer");
869 TEST (
T (0, 0, 0, 1, 0, 0),
"19", 0, 0,
' ',
"19");
870 TEST (
T (0, 0, 0, 1, 0, 1),
"%C", 0, 0,
' ',
"19");
871 TEST (
T (0, 0, 0, 1, 0, -1),
"%C", 0, 0,
' ',
"18");
872 TEST (
T (0, 0, 0, 1, 0, 99),
"%C", 0, 0,
' ',
"19");
873 TEST (
T (0, 0, 0, 1, 0, -99),
"%C", 0, 0,
' ',
"18");
874 TEST (
T (0, 0, 0, 1, 0, 100),
"%C", 0, 0,
' ',
"20");
875 TEST (
T (0, 0, 0, 1, 0, -100),
"%C", 0, 0,
' ',
"18");
876 TEST (
T (0, 0, 0, 1, 0, 103),
"%C", 0, 0,
' ',
"20");
877 TEST (
T (0, 0, 0, 1, 0, 199),
"%C", 0, 0,
' ',
"20");
878 TEST (
T (0, 0, 0, 1, 0, 200),
"%C", 0, 0,
' ',
"21");
879 TEST (
T (0, 0, 0, 1, 0, 1000),
"%C", 0, 0,
' ',
"29");
880 TEST (
T (0, 0, 0, 1, 0, -1000),
"%C", 0, 0,
' ',
"09");
881 TEST (
T (0, 0, 0, 1, 0, 8100),
"%C", 0, 0,
' ',
"00");
882 TEST (
T (0, 0, 0, 1, 0, -1900),
"%C", 0, 0,
' ',
"00");
887 "%%EC: the name of the period in alternative representation");
888 TEST (
T (0, 0, 0, 1, 0, -1899),
"%EC", 0, 0,
' ',
"00");
889 TEST (
T (0, 0, 0, 1, 0, 1234),
"%EC", 0, 0,
' ',
"31");
890 TEST (
T (0, 0, 0, 1, 0, 8099),
"%EC", 0, 0,
' ',
"99");
894 rw_info (0, 0, __LINE__,
"%%d: the day of the month as a decimal number");
895 TEST (
T (),
"%d", 0, 0,
' ',
"%d");
896 TEST (
T (),
"%d", 0, 0,
' ',
"01");
897 TEST (
T (),
"01", 0, 0,
' ',
"%d");
898 TEST (
T (-1),
"%d", 0, 0,
' ',
"%d");
900 TEST (
T (0, 0, 0, 1),
"%d", 0, 0,
' ',
"%d");
901 TEST (
T (0, 0, 0, 2),
"%d", 0, 0,
' ',
"%d");
902 TEST (
T (0, 0, 0, 10),
"%d", 0, 0,
' ',
"%d");
903 TEST (
T (0, 0, 0, 11),
"%d", 0, 0,
' ',
"%d");
904 TEST (
T (0, 0, 0, 20),
"%d", 0, 0,
' ',
"%d");
905 TEST (
T (0, 0, 0, 21),
"%d", 0, 0,
' ',
"%d");
906 TEST (
T (0, 0, 0, 30),
"%d", 0, 0,
' ',
"%d");
907 TEST (
T (0, 0, 0, 31),
"%d", 0, 0,
' ',
"%d");
908 TEST (
T (0, 0, 0, -1),
"%d", 0, 0,
' ', 0 );
914 "%%Od: the day of the month, using alternative digits");
915 TEST (
T (0, 0, 0, 1),
"%Od", 0, 0,
' ',
"01");
916 TEST (
T (0, 0, 0, 9),
"%Od", 0, 0,
' ',
"09");
917 TEST (
T (0, 0, 0, 10),
"%Od", 0, 0,
' ',
"10");
918 TEST (
T (0, 0, 0, 13),
"%Od", 0, 0,
' ',
"13");
919 TEST (
T (0, 0, 0, 22),
"%Od", 0, 0,
' ',
"22");
920 TEST (
T (0, 0, 0, 31),
"%Od", 0, 0,
' ',
"31");
921 TEST (
T (0, 0, 0, -1),
"%Od", 0, 0,
' ', 0 );
924 rw_info (0, 0, __LINE__,
"%%D: equivalent to \"%%m/%%d/%%y\"");
925 TEST (
T (),
"%D", 0, 0,
' ',
"%D");
926 TEST (
T (),
"%D", 0, 0,
' ',
"%m/%d/%y");
927 TEST (
T (),
"%D", 0, 0,
' ',
"01/01/00");
928 TEST (
T (),
"01/01/00", 0, 0,
' ',
"%D");
929 TEST (
T (-1),
"%D", 0, 0,
' ',
"%D");
930 TEST (
T (0, 0, 0, -1),
"%D", 0, 0,
' ', 0 );
934 rw_info (0, 0, __LINE__,
"%%e: the day of the month as a decimal number");
935 TEST (
T (),
"%e", 0, 0,
' ',
"%e");
936 TEST (
T (),
"%e", 0, 0,
' ',
" 1");
937 TEST (
T (),
" 1", 0, 0,
' ',
"%e");
938 TEST (
T (-1),
"%e", 0, 0,
' ',
"%e");
940 TEST (
T (0, 0, 0, 1),
"%e", 0, 0,
' ',
"%e");
941 TEST (
T (0, 0, 0, 2),
"%e", 0, 0,
' ',
"%e");
942 TEST (
T (0, 0, 0, 10),
"%e", 0, 0,
' ',
"%e");
943 TEST (
T (0, 0, 0, 11),
"%e", 0, 0,
' ',
"%e");
944 TEST (
T (0, 0, 0, 20),
"%e", 0, 0,
' ',
"%e");
945 TEST (
T (0, 0, 0, 21),
"%e", 0, 0,
' ',
"%e");
946 TEST (
T (0, 0, 0, 30),
"%e", 0, 0,
' ',
"%e");
947 TEST (
T (0, 0, 0, 31),
"%e", 0, 0,
' ',
"%e");
948 TEST (
T (0, 0, 0, -1),
"%e", 0, 0,
' ', 0 );
954 "%%Oe: the day of the month using alternative digits");
955 TEST (
T (0, 0, 0, 1),
"%Oe", 0, 0,
' ',
" 1");
956 TEST (
T (0, 0, 0, 29),
"%Oe", 0, 0,
' ',
"29");
957 TEST (
T (0, 0, 0, 30),
"%Oe", 0, 0,
' ',
"30");
958 TEST (
T (0, 0, 0, 31),
"%Oe", 0, 0,
' ',
"31");
959 TEST (
T (0, 0, 0, -1),
"%Oe", 0, 0,
' ', 0 );
963 rw_info (0, 0, __LINE__,
"%%F: equivalent to \"%%Y-%%m-%%d\"");
964 TEST (
T (),
"%F", 0, 0,
' ',
"%Y-%m-%d");
965 TEST (
T (),
"%F", 0, 0,
' ',
"1900-01-01");
966 TEST (
T (0, 0, 0, -1),
"%F", 0, 0,
' ', 0 );
970 rw_info (0, 0, __LINE__,
"%%g: the last 2 digits of the week-based year");
971 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0),
"%g", 0, 0,
' ',
"99");
972 TEST (
T (0, 0, 0, 1, 0, 102, 2, 120),
"%g", 0, 0,
' ',
"02");
973 TEST (
T (0, 0, 0, 1, 0, 1901, 4, 0),
"%g", 0, 0,
' ',
"01");
974 TEST (
T (0, 0, 0, 1, 0, 1902, 3, 5),
"%g", 0, 0,
' ',
"02");
975 TEST (
T (0, 0, 0, 1, 0, 0, 0, -1),
"%g", 0, 0,
' ', 0 );
979 rw_info (0, 0, __LINE__,
"%%G: the week-based year");
980 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0),
"%G", 0, 0,
' ',
"%G");
981 TEST (
T (0, 0, 0, 1, 0, -1899, 0, 0),
"%G", 0, 0,
' ',
"0");
982 TEST (
T (0, 0, 0, 1, 0, -100, 0, 0),
"%G", 0, 0,
' ',
"1799");
983 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0),
"%G", 0, 0,
' ',
"1899");
984 TEST (
T (0, 0, 0, 1, 0, 102, 2, 120),
"%G", 0, 0,
' ',
"2002");
985 TEST (
T (0, 0, 0, 1, 0, 2668, 5, 0),
"%G", 0, 0,
' ',
"4567");
986 TEST (
T (0, 0, 0, 1, 0, 2668, 0, 3),
"%G", 0, 0,
' ',
"4568");
987 TEST (
T (-1),
"%G", 0, 0,
' ',
"%G");
988 TEST (
T (0, 0, 0, 1, 0, 0, 0, -1),
"%G", 0, 0,
' ', 0 );
991 rw_info (0, 0, __LINE__,
"%%h: equivalent to \"%%b\"");
994 rw_info (0, 0, __LINE__,
"%%H: the hour (24-hour clock)");
995 TEST (
T (),
"%H", 0, 0,
' ',
"%H");
996 TEST (
T (),
"%H", 0, 0,
' ',
"00");
997 TEST (
T (),
"00", 0, 0,
' ',
"%H");
998 TEST (
T (-1),
"%H", 0, 0,
' ',
"%H");
1000 TEST (
T (0, 0, 1),
"%H", 0, 0,
' ',
"%H");
1001 TEST (
T (0, 0, 2),
"%H", 0, 0,
' ',
"%H");
1002 TEST (
T (0, 0, 10),
"%H", 0, 0,
' ',
"%H");
1003 TEST (
T (0, 0, 11),
"%H", 0, 0,
' ',
"%H");
1004 TEST (
T (0, 0, 20),
"%H", 0, 0,
' ',
"%H");
1005 TEST (
T (0, 0, 21),
"%H", 0, 0,
' ',
"%H");
1006 TEST (
T (0, 0, 22),
"%H", 0, 0,
' ',
"%H");
1007 TEST (
T (0, 0, 23),
"%H", 0, 0,
' ',
"%H");
1008 TEST (
T (0, 0, -1),
"%H", 0, 0,
' ', 0 );
1011 TEST (
T (0, 99, 9),
"%H", 0, 0,
' ',
"09");
1012 TEST (
T (3600, 60, 18),
"%H", 0, 0,
' ',
"18");
1013 TEST (
T (7200, 60, 19),
"%H", 0, 0,
' ',
"19");
1018 "%%OH: the hour (24-hour clock), using alternative digits");
1019 TEST (
T (0, 0, 0),
"%OH", 0, 0,
' ',
"00");
1020 TEST (
T (0, 0, 3),
"%OH", 0, 0,
' ',
"03");
1021 TEST (
T (0, 0, 12),
"%OH", 0, 0,
' ',
"12");
1022 TEST (
T (0, 0, 19),
"%OH", 0, 0,
' ',
"19");
1023 TEST (
T (0, 0, 18),
"%OH", 0, 0,
' ',
"18");
1024 TEST (
T (0, 0, 17),
"%OH", 0, 0,
' ',
"17");
1025 TEST (
T (0, 0, -7),
"%OH", 0, 0,
' ', 0 );
1028 rw_info (0, 0, __LINE__,
"%%I: the hour (12-hour clock)");
1029 TEST (
T (0, 0, 0),
"%I", 0, 0,
' ',
"%I");
1030 TEST (
T (0, 0, 0),
"%I", 0, 0,
' ',
"%I");
1031 TEST (
T (0, 0, 1),
"%I", 0, 0,
' ',
"%I");
1032 TEST (
T (0, 0, 1),
"%I", 0, 0,
' ',
"01");
1033 TEST (
T (0, 0, 2),
"%I", 0, 0,
' ',
"02");
1034 TEST (
T (0, 0, 3),
"%I", 0, 0,
' ',
"03");
1035 TEST (
T (0, 0, 11),
"%I", 0, 0,
' ',
"11");
1036 TEST (
T (0, 0, 12),
"%I", 0, 0,
' ',
"%I");
1037 TEST (
T (0, 0, 12),
"%I", 0, 0,
' ',
"12");
1038 TEST (
T (0, 0, 13),
"%I", 0, 0,
' ',
"%I");
1039 TEST (
T (0, 0, 13),
"%I", 0, 0,
' ',
"01");
1040 TEST (
T (0, 0, 21),
"%I", 0, 0,
' ',
"09");
1041 TEST (
T (0, 0, 22),
"%I", 0, 0,
' ',
"10");
1042 TEST (
T (0, 0, 23),
"%I", 0, 0,
' ',
"11");
1043 TEST (
T (0, 0, 24),
"%I", 0, 0,
' ',
"%I");
1044 TEST (
T (0, 0, 0),
"12", 0, 0,
' ',
"%I");
1045 TEST (
T (-1),
"%I", 0, 0,
' ',
"%I");
1046 TEST (
T (0, 0, -2),
"%I", 0, 0,
' ', 0 );
1051 "%%OI: the hour (12-hour clock) using alternative digits");
1052 TEST (
T (0, 0, 24),
"%OI", 0, 0,
' ',
"12");
1053 TEST (
T (0, 0, 16),
"%OI", 0, 0,
' ',
"04");
1054 TEST (
T (0, 0, 15),
"%OI", 0, 0,
' ',
"03");
1055 TEST (
T (0, 0, 14),
"%OI", 0, 0,
' ',
"02");
1056 TEST (
T (0, 0, 12),
"%OI", 0, 0,
' ',
"12");
1057 TEST (
T (0, 0, -3),
"%OI", 0, 0,
' ', 0 );
1060 rw_info (0, 0, __LINE__,
"%%j: the day of the year");
1061 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"%j", 0, 0,
' ',
"%j");
1062 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"%j", 0, 0,
' ',
"001");
1063 TEST (
T (0, 0, 0, 0, 0, 0, 0, 1),
"%j", 0, 0,
' ',
"002");
1064 TEST (
T (0, 0, 0, 0, 0, 0, 0, 12),
"%j", 0, 0,
' ',
"013");
1065 TEST (
T (0, 0, 0, 0, 0, 0, 0, 123),
"%j", 0, 0,
' ',
"124");
1066 TEST (
T (0, 0, 0, 0, 0, 0, 0, 365),
"%j", 0, 0,
' ',
"366");
1067 TEST (
T (0, 0, 0, 0, 0, 0, 0, 0),
"001", 0, 0,
' ',
"%j");
1068 TEST (
T (-1),
"%j", 0, 0,
' ',
"%j");
1069 TEST (
T (0, 0, 0, 0, 0, 0, 0, -4),
"%j", 0, 0,
' ', 0 );
1073 "%%k: the hour (24-hour clock) with single digits "
1074 "preceded by a blank [AIX, Linux, Solaris extension]");
1075 TEST (
T (0, 0, 0),
"%k", 0, 0,
' ',
" 0");
1076 TEST (
T (0, 0, 1),
"%k", 0, 0,
' ',
" 1");
1077 TEST (
T (0, 0, 9),
"%k", 0, 0,
' ',
" 9");
1078 TEST (
T (0, 0, 11),
"%k", 0, 0,
' ',
"11");
1079 TEST (
T (0, 0, 12),
"%k", 0, 0,
' ',
"12");
1080 TEST (
T (0, 0, 23),
"%k", 0, 0,
' ',
"23");
1082#ifdef _RWSTD_OS_SUNOS
1085 TEST (
T (0, 0, 0),
"%k", 0, 0,
' ',
"%k");
1086 TEST (
T (0, 0, 2),
"%k", 0, 0,
' ',
"%k");
1087 TEST (
T (0, 0, 9),
"%k", 0, 0,
' ',
"%k");
1088 TEST (
T (0, 0, 10),
"%k", 0, 0,
' ',
"%k");
1089 TEST (
T (0, 0, 11),
"%k", 0, 0,
' ',
"%k");
1090 TEST (
T (0, 0, 12),
"%k", 0, 0,
' ',
"%k");
1091 TEST (
T (0, 0, 13),
"%k", 0, 0,
' ',
"%k");
1092 TEST (
T (0, 0, 23),
"%k", 0, 0,
' ',
"%k");
1097 "%%l: the hour (12-hour clock) with single digits "
1098 "preceded by a blank [Linux, Solaris extension]");
1099 TEST (
T (0, 0, 0),
"%l", 0, 0,
' ',
"12");
1100 TEST (
T (0, 0, 1),
"%l", 0, 0,
' ',
" 1");
1101 TEST (
T (0, 0, 9),
"%l", 0, 0,
' ',
" 9");
1102 TEST (
T (0, 0, 11),
"%l", 0, 0,
' ',
"11");
1103 TEST (
T (0, 0, 12),
"%l", 0, 0,
' ',
"12");
1104 TEST (
T (0, 0, 13),
"%l", 0, 0,
' ',
" 1");
1105 TEST (
T (0, 0, 21),
"%l", 0, 0,
' ',
" 9");
1106 TEST (
T (0, 0, 23),
"%l", 0, 0,
' ',
"11");
1108#ifdef _RWSTD_OS_SUNOS
1111 TEST (
T (0, 0, 0),
"%l", 0, 0,
' ',
"%l");
1112 TEST (
T (0, 0, 2),
"%l", 0, 0,
' ',
"%l");
1113 TEST (
T (0, 0, 8),
"%l", 0, 0,
' ',
"%l");
1114 TEST (
T (0, 0, 11),
"%l", 0, 0,
' ',
"%l");
1115 TEST (
T (0, 0, 12),
"%l", 0, 0,
' ',
"%l");
1116 TEST (
T (0, 0, 13),
"%l", 0, 0,
' ',
"%l");
1117 TEST (
T (0, 0, 20),
"%l", 0, 0,
' ',
"%l");
1118 TEST (
T (0, 0, 23),
"%l", 0, 0,
' ',
"%l");
1122 rw_info (0, 0, __LINE__,
"%%m: the month");
1123 TEST (
T (),
"%m", 0, 0,
' ',
"%m");
1124 TEST (
T (),
"%m", 0, 0,
' ',
"01");
1125 TEST (
T (),
"01", 0, 0,
' ',
"%m");
1126 TEST (
T (-1),
"%m", 0, 0,
' ',
"%m");
1129 rw_info (0, 0, __LINE__,
"%%Om: the month, using alternative digits");
1130 TEST (
T (0, 0, 0, 0, 9),
"%Om", 0, 0,
' ',
"10");
1131 TEST (
T (0, 0, 0, 0, 10),
"%Om", 0, 0,
' ',
"11");
1132 TEST (
T (0, 0, 0, 0, 11),
"%Om", 0, 0,
' ',
"12");
1133 TEST (
T (0, 0, 0, 0, -5),
"%Om", 0, 0,
' ', 0 );
1136 rw_info (0, 0, __LINE__,
"%%M: the minute");
1137 TEST (
T (0, 0),
"%M", 0, 0,
' ',
"%M");
1138 TEST (
T (0, 0),
"%M", 0, 0,
' ',
"00");
1139 TEST (
T (0, 1),
"%M", 0, 0,
' ',
"01");
1140 TEST (
T (0, 9),
"%M", 0, 0,
' ',
"09");
1141 TEST (
T (0, 19),
"%M", 0, 0,
' ',
"19");
1142 TEST (
T (0, 59),
"%M", 0, 0,
' ',
"59");
1143 TEST (
T (0, 0),
"00", 0, 0,
' ',
"%M");
1144 TEST (
T (-1),
"%M", 0, 0,
' ',
"%M");
1145 TEST (
T (0, -6),
"00", 0, 0,
' ', 0 );
1148 rw_info (0, 0, __LINE__,
"%%OM: the minutes, using alternative digits");
1149 TEST (
T (0, 0),
"%OM", 0, 0,
' ',
"00");
1150 TEST (
T (0, 7),
"%OM", 0, 0,
' ',
"07");
1151 TEST (
T (0, 11),
"%OM", 0, 0,
' ',
"11");
1152 TEST (
T (0, 22),
"%OM", 0, 0,
' ',
"22");
1153 TEST (
T (0, 33),
"%OM", 0, 0,
' ',
"33");
1154 TEST (
T (0, 44),
"%OM", 0, 0,
' ',
"44");
1155 TEST (
T (0, -7),
"%OM", 0, 0,
' ', 0 );
1158 rw_info (0, 0, __LINE__,
"%%n: a new-line character");
1159 TEST (
T (),
"%n", 0, 0,
' ',
"%n");
1160 TEST (
T (),
"%n", 0, 0,
' ',
"\n");
1161 TEST (
T (),
"%n%n", 0, 0,
' ',
"\n\n");
1162 TEST (
T (),
"\n", 0, 0,
' ',
"%n");
1163 TEST (
T (),
"%n \n", 0, 0,
' ',
"\n \n");
1168 "%%p: the locale's equivalent of the AM/PM designations");
1169 TEST (
T ( 0, 0, 0),
"%p", 0, 0,
' ',
"%p");
1170 TEST (
T ( 0, 0, 1),
"%p", 0, 0,
' ',
"AM");
1171 TEST (
T ( 0, 0, 2),
"%p", 0, 0,
' ',
"AM");
1172 TEST (
T ( 0, 0, 11),
"%p", 0, 0,
' ',
"AM");
1173 TEST (
T ( 0, 0, 12),
"%p", 0, 0,
' ',
"%p");
1174 TEST (
T ( 0, 0, 12),
"%p", 0, 0,
' ',
"PM");
1175 TEST (
T ( 0, 0, 13),
"%p", 0, 0,
' ',
"%p");
1176 TEST (
T ( 0, 0, 23),
"%p", 0, 0,
' ',
"%p");
1177 TEST (
T ( 0, 0, -8),
"%p", 0, 0,
' ', 0 );
1180 rw_info (0, 0, __LINE__,
"%%r: the locale's 12-hour clock time");
1181 TEST (
T ( 0, 0, 0),
"%r", 0, 0,
' ',
"%r");
1182 TEST (
T ( 0, 0, 0),
"%r", 0, 0,
' ',
"%I:%M:%S %p");
1183 TEST (
T ( 0, 0, 0),
"%r", 0, 0,
' ',
"12:00:00 AM");
1184 TEST (
T ( 1, 12, 1),
"%r", 0, 0,
' ',
"01:12:01 AM");
1185 TEST (
T ( 3, 23, 2),
"%r", 0, 0,
' ',
"02:23:03 AM");
1186 TEST (
T ( 5, 34, 11),
"%r", 0, 0,
' ',
"11:34:05 AM");
1187 TEST (
T ( 7, 45, 12),
"%r", 0, 0,
' ',
"12:45:07 PM");
1188 TEST (
T ( 9, 56, 13),
"%r", 0, 0,
' ',
"01:56:09 PM");
1189 TEST (
T (59, 59, 23),
"%r", 0, 0,
' ',
"11:59:59 PM");
1190 TEST (
T ( 0, 0, 0),
"12:00:00 AM", 0, 0,
' ',
"%r");
1191 TEST (
T (-1),
"%r", 0, 0,
' ',
"%r");
1192 TEST (
T ( 0, 0, -9),
"%r", 0, 0,
' ', 0 );
1195 rw_info (0, 0, __LINE__,
"%%R: equivalent to \"%%H:%%M\"");
1196 TEST (
T (),
"%R", 0, 0,
' ',
"%R");
1197 TEST (
T (),
"%R", 0, 0,
' ',
"%H:%M");
1198 TEST (
T (),
"%R", 0, 0,
' ',
"00:00");
1199 TEST (
T (),
"00:00", 0, 0,
' ',
"%R");
1200 TEST (
T (-1),
"%R", 0, 0,
' ',
"%R");
1203 rw_info (0, 0, __LINE__,
"%%S: the seconds");
1204 TEST (
T (),
"%S", 0, 0,
' ',
"%S");
1205 TEST (
T (),
"%S", 0, 0,
' ',
"00");
1206 TEST (
T (),
"00", 0, 0,
' ',
"%S");
1207 TEST (
T ( 1),
"%S", 0, 0,
' ',
"%S");
1208 TEST (
T ( 2),
"%S", 0, 0,
' ',
"02");
1209 TEST (
T (11),
"%S", 0, 0,
' ',
"%S");
1210 TEST (
T (21),
"%S", 0, 0,
' ',
"%S");
1211 TEST (
T (39),
"%S", 0, 0,
' ',
"%S");
1212 TEST (
T (59),
"%S", 0, 0,
' ',
"%S");
1213 TEST (
T (60),
"%S", 0, 0,
' ',
"%S");
1214 TEST (
T (60),
"%S", 0, 0,
' ',
"60");
1215 TEST (
T (-1),
"%S", 0, 0,
' ',
"%S");
1218 rw_info (0, 0, __LINE__,
"%%OS: the seconds, using alternate digits");
1219 TEST (
T ( 6),
"%OS", 0, 0,
' ',
"06");
1220 TEST (
T (17),
"%OS", 0, 0,
' ',
"17");
1221 TEST (
T (28),
"%OS", 0, 0,
' ',
"28");
1222 TEST (
T (39),
"%OS", 0, 0,
' ',
"39");
1225 rw_info (0, 0, __LINE__,
"%%t: a horizontal-tab character");
1226 TEST (
T (),
"%t", 0, 0,
' ',
"%t");
1227 TEST (
T (),
"%t", 0, 0,
' ',
"\t");
1228 TEST (
T (),
"\t", 0, 0,
' ',
"%t");
1229 TEST (
T (),
"%t\t%t", 0, 0,
' ',
"\t\t\t");
1233 rw_info (0, 0, __LINE__,
"%%T: equivalent to \"%%H:%%M:%%S\"");
1234 TEST (
T (),
"%T", 0, 0,
' ',
"%T");
1235 TEST (
T (),
"%T", 0, 0,
' ',
"%H:%M:%S");
1236 TEST (
T (),
"%T", 0, 0,
' ',
"00:00:00");
1237 TEST (
T (),
"00:00:00", 0, 0,
' ',
"%T");
1238 TEST (
T (-1),
"%T", 0, 0,
' ',
"%T");
1242 rw_info (0, 0, __LINE__,
"%%u: the ISO 8601 weekday");
1243 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%u", 0, 0,
' ',
"1");
1244 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%u", 0, 0,
' ',
"2");
1245 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%u", 0, 0,
' ',
"3");
1246 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%u", 0, 0,
' ',
"4");
1247 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%u", 0, 0,
' ',
"5");
1248 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%u", 0, 0,
' ',
"6");
1249 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%u", 0, 0,
' ',
"7");
1250 TEST (
T (0, 0, 0, 1, 0, 0, 7),
"%u", 0, 0,
' ', 0 );
1255 "%%Ou: the ISO 8601 weekday using alternative digits");
1256 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%Ou", 0, 0,
' ',
"1");
1257 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%Ou", 0, 0,
' ',
"2");
1258 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%Ou", 0, 0,
' ',
"3");
1259 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%Ou", 0, 0,
' ',
"4");
1260 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%Ou", 0, 0,
' ',
"5");
1261 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%Ou", 0, 0,
' ',
"6");
1262 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%Ou", 0, 0,
' ',
"7");
1263 TEST (
T (0, 0, 0, 1, 0, 0, 8),
"%Ou", 0, 0,
' ', 0 );
1268 rw_info (0, 0, __LINE__,
"%%U: the week number of the year");
1269 TEST (
T (),
"%U", 0, 0,
' ',
"%U");
1270 TEST (
T (),
"%U", 0, 0,
' ',
"01");
1271 TEST (
T (),
"01", 0, 0,
' ',
"%U");
1272 TEST (
T (-1),
"%U", 0, 0,
' ',
"%U");
1273 TEST (
T (0, 0, 0, 1, 0, 320, 2, 60),
"%U", 0, 0,
' ',
"09");
1277 rw_info (0, 0, __LINE__,
"%%OU: the week number, using alternative digits");
1278 TEST (
T (0, 0, 0, 1, 0, 67, 2, 206),
"%U", 0, 0,
' ',
"30");
1279 TEST (
T (0, 0, 0, 1, 0, 99, 5, 365),
"%U", 0, 0,
' ',
"52");
1283 rw_info (0, 0, __LINE__,
"%%V: the ISO 8601 week number");
1313 TEST (
T (0, 0, 0, 1, 0, 95, 0, 0),
"%V", 0, 0,
' ',
"52");
1314 TEST (
T (0, 0, 0, 31, 11, 96, 2, 365),
"%V", 0, 0,
' ',
"01");
1317 TEST (
T (0, 0, 0, 1, 0, 95, 0, 0),
"%V", 0, 0,
' ',
"52");
1318 TEST (
T (0, 0, 0, 1, 0, 96, 2, 365),
"%V", 0, 0,
' ',
"01");
1320 TEST (
T (0, 0, 0, 1, 0, 99, 5, 364),
"%V", 0, 0,
' ',
"52");
1322 TEST (
T (0, 0, 0, 1, 0, 103, 0, 361),
"%V", 0, 0,
' ',
"52");
1323 TEST (
T (0, 0, 0, 1, 0, 103, 1, 362),
"%V", 0, 0,
' ',
"01");
1324 TEST (
T (0, 0, 0, 1, 0, 104, 0, 3),
"%V", 0, 0,
' ',
"01");
1325 TEST (
T (0, 0, 0, 1, 0, 104, 1, 4),
"%V", 0, 0,
' ',
"02");
1327 TEST (
T (0, 0, 0, 1, 0, 109, 0, 360),
"%V", 0, 0,
' ',
"52");
1328 TEST (
T (0, 0, 0, 1, 0, 109, 1, 361),
"%V", 0, 0,
' ',
"53");
1329 TEST (
T (0, 0, 0, 1, 0, 109, 4, 364),
"%V", 0, 0,
' ',
"53");
1330 TEST (
T (0, 0, 0, 1, 0, 110, 5, 0),
"%V", 0, 0,
' ',
"53");
1331 TEST (
T (0, 0, 0, 1, 0, 110, 0, 2),
"%V", 0, 0,
' ',
"53");
1332 TEST (
T (0, 0, 0, 1, 0, 110, 1, 3),
"%V", 0, 0,
' ',
"01");
1337 "%%OV: the ISO 8601 week number, using alternative digits");
1338 TEST (
T (0, 0, 0, 1, 0, 104, 0, 360),
"%V", 0, 0,
' ',
"52");
1339 TEST (
T (0, 0, 0, 1, 0, 104, 1, 361),
"%V", 0, 0,
' ',
"53");
1340 TEST (
T (0, 0, 0, 1, 0, 104, 5, 365),
"%V", 0, 0,
' ',
"53");
1341 TEST (
T (0, 0, 0, 1, 0, 105, 6, 0),
"%V", 0, 0,
' ',
"53");
1342 TEST (
T (0, 0, 0, 1, 0, 105, 0, 1),
"%V", 0, 0,
' ',
"53");
1343 TEST (
T (0, 0, 0, 1, 0, 105, 1, 2),
"%V", 0, 0,
' ',
"01");
1348 rw_info (0, 0, __LINE__,
"%%w: the weekday");
1349 TEST (
T (),
"%w", 0, 0,
' ',
"%w");
1350 TEST (
T (),
"%w", 0, 0,
' ',
"0");
1351 TEST (
T (),
"0", 0, 0,
' ',
"%w");
1352 TEST (
T (-1),
"%w", 0, 0,
' ',
"%w");
1354 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%w", 0, 0,
' ',
"%w");
1355 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%w", 0, 0,
' ',
"%w");
1356 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%w", 0, 0,
' ',
"%w");
1357 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%w", 0, 0,
' ',
"%w");
1358 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%w", 0, 0,
' ',
"%w");
1359 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%w", 0, 0,
' ',
"%w");
1360 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%w", 0, 0,
' ',
"6");
1363 TEST (
T (0, 0, 0, 2, 0, 0, 0),
"%w", 0, 0,
' ',
"%w");
1364 TEST (
T (0, 0, 0, 2, 0, 0, 1),
"%w", 0, 0,
' ',
"%w");
1365 TEST (
T (0, 0, 0, 2, 0, 0, 2),
"%w", 0, 0,
' ',
"%w");
1366 TEST (
T (0, 0, 0, 2, 0, 0, 3),
"%w", 0, 0,
' ',
"%w");
1367 TEST (
T (0, 0, 0, 2, 0, 0, 4),
"%w", 0, 0,
' ',
"%w");
1368 TEST (
T (0, 0, 0, 2, 0, 0, 5),
"%w", 0, 0,
' ',
"%w");
1369 TEST (
T (0, 0, 0, 2, 0, 0, 6),
"%w", 0, 0,
' ',
"%w");
1370 TEST (
T (0, 0, 0, 2, 0, 0, 6),
"%w", 0, 0,
' ',
"6");
1375 "%%Ow: the weekday as a number using alternative digits");
1376 TEST (
T (0, 0, 0, 1, 0, 0, 0),
"%Ow", 0, 0,
' ',
"0");
1377 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%Ow", 0, 0,
' ',
"1");
1378 TEST (
T (0, 0, 0, 1, 0, 0, 2),
"%Ow", 0, 0,
' ',
"2");
1379 TEST (
T (0, 0, 0, 1, 0, 0, 3),
"%Ow", 0, 0,
' ',
"3");
1380 TEST (
T (0, 0, 0, 1, 0, 0, 4),
"%Ow", 0, 0,
' ',
"4");
1381 TEST (
T (0, 0, 0, 1, 0, 0, 5),
"%Ow", 0, 0,
' ',
"5");
1382 TEST (
T (0, 0, 0, 1, 0, 0, 6),
"%Ow", 0, 0,
' ',
"6");
1387 rw_info (0, 0, __LINE__,
"%%W: the week number of the year");
1388 TEST (
T (),
"%W", 0, 0,
' ',
"%W");
1389 TEST (
T (),
"%W", 0, 0,
' ',
"00");
1390 TEST (
T (),
"00", 0, 0,
' ',
"%W");
1391 TEST (
T (-1),
"%W", 0, 0,
' ',
"%W");
1394 TEST (
T (0, 0, 0, 1, 0, 0, 1, 0),
"%W", 0, 0,
' ',
"%W");
1396 TEST (
T (0, 0, 0, 1, 0, 0, 0, 6),
"%W", 0, 0,
' ',
"%W");
1398 TEST (
T (0, 0, 0, 1, 0, 1, 1, 6),
"%W", 0, 0,
' ',
"%W");
1404 TEST (
T (0, 0, 0, 1, 0, -124, 4, 185),
"%OW", 0, 0,
' ',
"27");
1409 "%%x: the locale's appropriate date representation");
1410 TEST (
T (),
"%x", 0, 0,
' ',
"%x");
1411 TEST (
T (-1),
"%x", 0, 0,
' ',
"%x");
1420 "%%Ex: the locale's alternative date representation");
1421 TEST (
T (0, 0, 0, 18, 2, 90),
"%Ex", 0, 0,
' ',
"03/18/90");
1426 "%%X: the locale's appropriate time representation");
1427 TEST (
T (),
"%X", 0, 0,
' ',
"%X");
1428 TEST (
T (-1),
"%X", 0, 0,
' ',
"%X");
1437 rw_info (0, 0, __LINE__,
"%%y: the last 2 digits of the year");
1438 TEST (
T (),
"%y", 0, 0,
' ',
"%y");
1439 TEST (
T (),
"%y", 0, 0,
' ',
"00");
1440 TEST (
T (),
"00", 0, 0,
' ',
"%y");
1441 TEST (
T (-1),
"%y", 0, 0,
' ',
"%y");
1443 TEST (
T (0, 0, 0, 1, 0, 99),
"%y", 0, 0,
' ',
"%y");
1444 TEST (
T (0, 0, 0, 1, 0, 99),
"%y", 0, 0,
' ',
"99");
1445 TEST (
T (0, 0, 0, 1, 0, 199),
"%y", 0, 0,
' ',
"99");
1446 TEST (
T (0, 0, 0, 1, 0, 299),
"%y", 0, 0,
' ',
"99");
1447 TEST (
T (0, 0, 0, 1, 0, 399),
"%y", 0, 0,
' ',
"99");
1448 TEST (
T (0, 0, 0, 1, 0, -1),
"%y", 0, 0,
' ',
"99");
1449 TEST (
T (0, 0, 0, 1, 0, -101),
"%y", 0, 0,
' ',
"99");
1450 TEST (
T (0, 0, 0, 1, 0, -201),
"%y", 0, 0,
' ',
"99");
1453 rw_info (0, 0, __LINE__,
"%%Y: the year");
1454 TEST (
T (),
"%Y", 0, 0,
' ',
"%Y");
1455 TEST (
T (),
"%Y", 0, 0,
' ',
"1900");
1456 TEST (
T (),
"1900", 0, 0,
' ',
"%Y");
1457 TEST (
T (-1),
"%Y", 0, 0,
' ',
"%Y");
1471 rw_info (0, 0, __LINE__,
"%%z: the offset from UTC in the ISO 8601 format");
1533 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"");
1534 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, +1),
"%z", 0, 0,
' ',
"");
1535 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1),
"%z", 0, 0,
' ',
"");
1539 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0000");
1542 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1),
"%z", 0, 0,
' ',
"");
1546 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0700");
1549 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1),
"%z", 0, 0,
' ',
"");
1553 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0100");
1554 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0200");
1555 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1),
"%z", 0, 0,
' ',
"");
1559 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0200");
1560 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0400");
1561 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1),
"%z", 0, 0,
' ',
"");
1564 set_TZ (
"TZ=abc3:00def4:00");
1565 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0300");
1566 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0400");
1569 set_TZ (
"TZ=abc11:30:00def11:45");
1570 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+1130");
1571 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+1145");
1576 set_TZ (
"TZ=bcd12:34efg");
1577 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+1234");
1578 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+1334");
1581 set_TZ (
"TZ=cde23:01fgh");
1582 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+2301");
1583 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0001");
1586 set_TZ (
"TZ=def23:59ghi");
1587 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+2359");
1588 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0059");
1590 set_TZ (
"TZ=EST03:00<EDT1>04:00");
1591 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0300");
1592 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0400");
1596 set_TZ (
"TZ=<EST+2>03:21EDT04:32");
1597 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0321");
1598 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0432");
1600 set_TZ (
"TZ=EST04:32:10<EDT+03>05:43:21");
1601 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0432");
1602 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0543");
1606 set_TZ (
"TZ=EST-4EDT-5");
1607 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"-0400");
1608 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"-0500");
1610 set_TZ (
"TZ=EST-5:00EDT-6:00");
1611 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"-0500");
1612 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"-0600");
1614 set_TZ (
"TZ=EST-5:43EDT-6:54");
1615 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"-0543");
1616 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"-0654");
1620 rw_info (0, 0, __LINE__,
"%%z: with tm::tm_gmtoff - GNU glibc extension");
1630 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0, 60),
"%z", 0, 0,
' ',
"+0001");
1631 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1, 120),
"%z", 0, 0,
' ',
"+0002");
1632 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1, 180),
"%z", 0, 0,
' ',
"");
1637 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0, 3600),
"%z", 0, 0,
' ',
"+0100");
1638 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1, -7260),
"%z", 0, 0,
' ',
"-0201");
1639 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, -1, 1234),
"%z", 0, 0,
' ',
"");
1641 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0, 60),
"%z", 0, 0,
' ',
"%z");
1642 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1, 120),
"%z", 0, 0,
' ',
"%z");
1644 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0, 10800),
"%z", 0, 0,
' ',
"%z");
1645 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1, -14400),
"%z", 0, 0,
' ',
"%z");
1649#ifdef _RWSTD_OS_SUNOS
1654 rw_info (0, 0, __LINE__,
"%%z: SunOS UZ/zone format [platform-specific]");
1656 set_TZ (
"TZ=US/Eastern");
1657 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0500");
1658 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0600");
1660 set_TZ (
"TZ=US/Central");
1661 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0600");
1662 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0700");
1664 set_TZ (
"TZ=US/Mountain");
1665 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0700");
1666 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0800");
1668 set_TZ (
"TZ=US/Pacific");
1669 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%z", 0, 0,
' ',
"+0800");
1670 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%z", 0, 0,
' ',
"+0900");
1678 "%%Z: the locale's time zone name or abbreviation");
1681 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%Z", 0, 0,
' ',
"foo");
1682 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%Z", 0, 0,
' ',
"bar");
1689 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%Z", 0, 0,
' ',
"EST");
1690 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%Z", 0, 0,
' ',
"EDT");
1697 set_TZ (
"TZ=ABC01DEF02");
1698 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%Z", 0, 0,
' ',
"ABC");
1699 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%Z", 0, 0,
' ',
"DEF");
1702#if defined (TZNAME_MAX) && !defined (_MSC_VER)
1707 std::memset (
std_name,
'A', TZNAME_MAX);
1710 char dst_name [TZNAME_MAX + 1];
1711 std::memset (dst_name,
'B', TZNAME_MAX);
1712 dst_name [TZNAME_MAX] =
'\0';
1714 char tz_buf [2 * TZNAME_MAX + 8] =
"TZ=";
1716 std::strcat (tz_buf,
"01");
1717 std::strcat (tz_buf, dst_name);
1718 std::strcat (tz_buf,
"02");
1722 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 0),
"%Z", 0, 0,
' ',
std_name);
1723 TEST (
T (0, 0, 0, 1, 0, 0, 0, 0, 1),
"%Z", 0, 0,
' ', dst_name);
1728 TEST (
T (),
" %%", 0, 0,
' ',
" %");
1729 TEST (
T (),
" %%%", 0, 0,
' ',
" %%");
1730 TEST (
T (),
" %%%%", 0, 0,
' ',
" %%");
1731 TEST (
T (),
" %% %%", 0, 0,
' ',
" % %");
1735 TEST (
T (),
"%%C ", 0, 0,
' ',
"%%C ");
1736 TEST (
T (),
" %%C", 0, 0,
' ',
" %C");
1737 TEST (
T (),
" %%C%", 0, 0,
' ',
" %C%");
1738 TEST (
T (),
" %%C%%", 0, 0,
' ',
" %C%");
1739 TEST (
T (),
" %%%C%%", 0, 0,
' ',
" %19%");
1741 TEST (
T (),
" %%%d%%%", 0, 0,
' ',
" %01%%");
1743 TEST (
T (),
"%Y%%%y", 0, 0,
' ',
"1900%00");
1744 TEST (
T (),
"%C%y", 0, 0,
' ',
"1900");
1745 TEST (
T (-1),
"%Y", 0, 0,
' ',
"%Y");
1748 TEST (
T (),
"%w", 0, 10,
' ',
" 0");
1749 TEST (
T (),
"%w", 0, 10,
'0',
"0000000000");
1750 TEST (
T (0, 0, 0, 1, 0, 0, 1),
"%w", 0, 10,
'0',
"0000000001");
1752 TEST (
T (1),
"%S", std::ios::left, 10,
'*',
"01********");
1753 TEST (
T (2),
"%S", std::ios::right, 10,
'*',
"********02");
1754 TEST (
T (3),
"%S", std::ios::internal, 10,
'*',
"********03");
1756 TEST (
T (13),
"%S", std::ios::left | std::ios::right, 11,
'_',
1759 TEST (
T (24),
"%S", std::ios::left | std::ios::internal, 12,
'_',
1763 std::ios::left | std::ios::right | std::ios::internal, 13,
'_',
1782 TEST (
T (0, 0, 0, 2, 0, 99, 6, 1),
"%g", 0, 0,
' ',
"98");
1783 TEST (
T (0, 0, 0, 2, 0, 99, 6, 1),
"%G", 0, 0,
' ',
"1998");
1784 TEST (
T (0, 0, 0, 2, 0, 99, 6, 1),
"%V", 0, 0,
' ',
"53");
1788 TEST (
T (0, 0, 0, 1, 0, 99, 6, 1),
"%g", 0, 0,
' ',
"98");
1789 TEST (
T (0, 0, 0, 1, 0, 99, 6, 1),
"%G", 0, 0,
' ',
"1998");
1790 TEST (
T (0, 0, 0, 1, 0, 99, 6, 1),
"%V", 0, 0,
' ',
"53");
1793 TEST (
T (0, 0, 0, 30, 11, 97, 2, 363),
"%g", 0, 0,
' ',
"98");
1794 TEST (
T (0, 0, 0, 30, 11, 97, 2, 363),
"%G", 0, 0,
' ',
"1998");
1795 TEST (
T (0, 0, 0, 30, 11, 97, 2, 363),
"%V", 0, 0,
' ',
"01");
1799 TEST (
T (0, 0, 0, 1, 0, 97, 2, 363),
"%g", 0, 0,
' ',
"98");
1800 TEST (
T (0, 0, 0, 1, 0, 97, 2, 363),
"%G", 0, 0,
' ',
"1998");
1801 TEST (
T (0, 0, 0, 1, 0, 97, 2, 363),
"%V", 0, 0,
' ',
"01");
1807template <
class charT>
1811 "std::time_put<%s>, using generated LC_TIME data", tname);
1813 const char* alt_digits[] = {
1814 "",
"1st",
"2nd",
"3rd",
"4th",
1815 "5th",
"6th",
"7th",
"8th",
"9th",
1816 "10th",
"11th",
"12th",
"13th",
"14th",
1817 "15th",
"16th",
"17th",
"18th",
"19th",
1818 "20th",
"21st",
"22nd",
"23rd",
"24th",
1819 "25th",
"26th",
"27th",
"28th",
"29th",
1846 { 2, 2, 0, 90, 0, 0,
INT_MAX,
"Heisei",
"%EC %Ey Nen" },
1847 { 1, 8, 0, 89, 31, 11, 89,
"Heisei",
"%EC Gannen" },
1848 { 2, 1, 0, 27, 7, 0, 89,
"Showa",
"%EC %Ey Nen" },
1849 { -7, 31, 11, 26, 0, 0,
INT_MIN,
"bar",
"foo%EC %Ey" },
1850 {
INT_MIN , 0, 0, 0, 0, 0, 0, 0, 0 }
1855 {
"[Sun]",
"[Mon]",
"[Tue]",
"[Wed]",
"[Thu]",
"[Fri]",
"[Sat]" },
1859 "[Sunday]",
"[Monday]",
"[Tuesday]",
"[Wednesday]",
"[Thursday]",
1860 "[Friday]",
"[Saturday]"
1865 "[Jan]",
"[Feb]",
"[Mar]",
"[Apr]",
"[May]",
"[Jun]",
1866 "[Jul]",
"[Aug]",
"[Sep]",
"[Oct]",
"[Nov]",
"[Dec]",
1871 "[January]",
"[February]",
"[March]",
"[April]",
"[May]",
"[June]",
1872 "[July]",
"[August]",
"[September]",
"[October]",
"[November]",
1876 {
"[A.M.]",
"[P.M.]" },
1878 "[[%a][%b][%d][%H][%M][%S][%y]]",
1879 "[[%3m][%.4d][%4.3y]]",
1880 "[[%3H][%.4M][%4.3S]]",
1881 "[[%I][%M][%S][%p]]",
1882 "[[%A][%B][%d][%H][%M][%S][%Y]]",
1884 "[[%H hrs][%M min][%S sec]]",
1892 if (!
rw_error (0 != locname, 0, __LINE__,
1893 "failed to generate LC_TIME locale data"))
1900 loc = std::locale (std::locale (), locname, std::locale::time);
1904 "std::locale (std::locale (), \"%s\", std::locale::time) "
1905 "unexpectedly threw an exception", locname);
1910 std::locale::global (
loc);
1914 rw_info (0, 0, __LINE__,
"%%a: the locale's abbreviated weekday name");
1915 rw_info (0, 0, __LINE__,
"%%A: the locale's full weekday name");
1918 for (
i = 0;
i != 7; ++
i) {
1919 TEST (
T (0, 0, 0, 1, 0, 0,
i),
"%a", 0, 0,
' ', td.
abday [
i]);
1920 TEST (
T (0, 0, 0, 1, 0, 0,
i),
"%A", 0, 0,
' ', td.
day [
i]);
1923 rw_info (0, 0, __LINE__,
"%%b: the locale's abbreviated month name");
1924 rw_info (0, 0, __LINE__,
"%%B: the locale's full month name");
1926 for (
i = 0;
i != 12; ++
i) {
1927 TEST (
T (0, 0, 0, 1,
i),
"%b", 0, 0,
' ', td.
abmon [
i]);
1928 TEST (
T (0, 0, 0, 1,
i),
"%B", 0, 0,
' ', td.
mon [
i]);
1932 "%%c: the locale's appropriate date and time representation");
1936 "%%r: the locale's time representation in the AM/PM notation");
1940 "%%X: the locale's appropriate time representation");
1953 TEST (
T (1, 2, 3),
"%X", 0, 0,
' ',
"[[ 3][0002][ 001]]");
1956 "%%x: the locale's appropriate date and time representation");
1957 TEST (
T (0, 0, 0, 4, 5, 6),
"%x", 0, 0,
' ',
"[[ 6][0004][ 006]]");
1963 "%%Ec: the alternative date and time representation");
1965 TEST (
T (22, 5, 18, 26, 3, 102, 5),
"%Ec", 0, 0,
' ',
1967 "[[[Friday]][[April]][26][18][05][22][2002]]");
1973 "%%Ec: the name of the base year (period) in the locale's "
1974 "alternative representation");
1975 TEST (
T (0, 0, 0, 1, 0, -100),
"%EC", 0, 0,
' ', era [3].
name);
1976 TEST (
T (0, 0, 0, 1, 0, 0),
"%EC", 0, 0,
' ', era [3].
name);
1977 TEST (
T (0, 0, 0, 31, 11, 26),
"%EC", 0, 0,
' ', era [3].
name);
1978 TEST (
T (0, 0, 0, 1, 0, 27),
"%EC", 0, 0,
' ', era [2].
name);
1979 TEST (
T (0, 0, 0, 7, 0, 89),
"%EC", 0, 0,
' ', era [2].
name);
1980 TEST (
T (0, 0, 0, 8, 0, 89),
"%EC", 0, 0,
' ', era [1].
name);
1981 TEST (
T (0, 0, 0, 31, 11, 89),
"%EC", 0, 0,
' ', era [1].
name);
1982 TEST (
T (0, 0, 0, 1, 0, 90),
"%EC", 0, 0,
' ',
"19");
1983 TEST (
T (0, 0, 0, 2, 0, 90),
"%EC", 0, 0,
' ', era [0].
name);
1984 TEST (
T (0, 0, 0, 30, 3, 102),
"%EC", 0, 0,
' ', era [0].
name);
1989 "%%Ex: the locale's alternative date representation");
1992 TEST (
T (0, 0, 0, 26, 3, 102),
"%Ex", 0, 0,
' ',
"[[[April]][26][2002]]");
1996 "%%EX: the locale's alternative time representation");
1999 TEST (
T (22, 5, 18),
"%EX", 0, 0,
' ',
"[[18 hrs][05 min][22 sec]]");
2003 "%%Ey: the offset from %%EC in the alternative representation");
2004 TEST (
T (0, 0, 0, 1, 0, -100),
"%Ey", 0, 0,
' ',
"133");
2005 TEST (
T (0, 0, 0, 1, 0, 0),
"%Ey", 0, 0,
' ',
"33");
2006 TEST (
T (0, 0, 0, 1, 0, 2),
"%Ey", 0, 0,
' ',
"31st");
2007 TEST (
T (0, 0, 0, 1, 0, 20),
"%Ey", 0, 0,
' ',
"13th");
2008 TEST (
T (0, 0, 0, 31, 11, 26),
"%Ey", 0, 0,
' ',
"7th");
2009 TEST (
T (0, 0, 0, 1, 0, 27),
"%Ey", 0, 0,
' ',
"2nd");
2010 TEST (
T (0, 0, 0, 7, 0, 89),
"%Ey", 0, 0,
' ',
"64");
2011 TEST (
T (0, 0, 0, 8, 0, 89),
"%Ey", 0, 0,
' ',
"1st");
2012 TEST (
T (0, 0, 0, 31, 11, 89),
"%Ey", 0, 0,
' ',
"1st");
2013 TEST (
T (0, 0, 0, 1, 0, 90),
"%Ey", 0, 0,
' ',
"90");
2014 TEST (
T (0, 0, 0, 2, 0, 90),
"%Ey", 0, 0,
' ',
"2nd");
2015 TEST (
T (0, 0, 0, 30, 3, 102),
"%Ey", 0, 0,
' ',
"14th");
2018 rw_info (0, 0, __LINE__,
"%%EY: the full alternative year representation");
2019 TEST (
T (0, 0, 0, 1, 0, 0),
"%EY", 0, 0,
' ',
"foobar 33");
2020 TEST (
T (0, 0, 0, 31, 11, 26),
"%EY", 0, 0,
' ',
"foobar 7th");
2021 TEST (
T (0, 0, 0, 1, 0, 27),
"%EY", 0, 0,
' ',
"Showa 2nd Nen");
2022 TEST (
T (0, 0, 0, 7, 0, 89),
"%EY", 0, 0,
' ',
"Showa 64 Nen");
2023 TEST (
T (0, 0, 0, 8, 0, 89),
"%EY", 0, 0,
' ',
"Heisei Gannen");
2024 TEST (
T (0, 0, 0, 31, 11, 89),
"%EY", 0, 0,
' ',
"Heisei Gannen");
2025 TEST (
T (0, 0, 0, 1, 0, 90),
"%EY", 0, 0,
' ',
"1990");
2026 TEST (
T (0, 0, 0, 2, 0, 90),
"%EY", 0, 0,
' ',
"Heisei 2nd Nen");
2027 TEST (
T (0, 0, 0, 30, 3, 102),
"%EY", 0, 0,
' ',
"Heisei 14th Nen");
2030 std::locale::global (std::locale (
"C"));
2049#ifndef _RWSTD_NO_WCHAR_T
2065 return rw_test (argc, argv, __FILE__,
2066 "lib.locale.time.put",
const char * make_LC_TIME(const time_data *td)
void test_POSIX(charT, const char *tname)
void test_user(charT, const char *tname)
const char * widen(char *dst, const char *src)
std::size_t rw_strftime(char *buf, std::size_t bufsize, const char *pat, const std::tm *tmb)
void set_TZ(const char *str)
const char * narrow(char *dst, const char *src)
const std::tm * mktm(int sec=0, int min=0, int hour=0, int mday=1, int mon=0, int year=0, int wday=0, int yday=0, int isdst=0, long gmtoff=0, const char *zone=0)
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)
#define _RWSTD_UNUSED(arg)
_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_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 int rw_putenv(const char *, int=-1)
_TEST_EXPORT void pcs_write(void *, const char *)
_TEST_EXPORT const char * rw_set_locale_root()
_TEST_EXPORT const char * rw_localedef(const char *, const char *, const char *, const char *)
_TEST_EXPORT int rw_snprintf(char *, _RWSTD_SIZE_T, const char *,...)
_TEST_EXPORT int rw_strncmp(const char *, const char *, _RWSTD_SIZE_T=_RWSTD_SIZE_MAX, int=CMP_NULTERM)
void pubsetp(charT *beg, charT *end)
Buffer(charT *beg, charT *end)
const char *const * alt_digits