aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-02 18:44:50 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-02 18:44:50 +0000
commit3bd33b8a3d165f63491c54155c89425202fb8703 (patch)
tree25ea33498c6963bfed74e7c354dd1d81f141af42 /libstdc++-v3/testsuite
parent7417ed8d4ef89ab7b9c8ac9f014bf27783690140 (diff)
2001-10-02 Benjamin Kosnik <bkoz@redhat.com>
* config/locale/time_members_gnu.h: Remove. * config/locale/time_members_generic.h: Remove. * config/locale/time_members_gnu.cc (__timepunct::_M_put_helper): Add. * config/locale/time_members_generic.cc: Same. * include/bits/locale_facets.h: Add data members. (__timepunct::_M_put_helper): Change signature. (__timepunct::_M_date_formats): Same. (__timepunct::_M_time_formats): Same. (__timepunct::_M_ampm): Add. (__timepunct::_M_date_time_formats): Add. (time_get::_M_extract_via_format): Add. (time_get::_M_extract_time): Change to... (time_get::_M_extract_num): ... this, modify signature. * include/bits/locale_facets.tcc (time_get::do_get_year): Fix. (time_get::do_get_time): Fix. (time_get::do_get_date): Fix. * acinclude.m4: Remove CTIME_H. * aclocal.m4: Regenerate. * include/Makefile.am: Same. * include/Makefile.in: Regenerate. * configure: Regenerate. * testsuite/22_locale/time_get_members_char.cc: Fix. * testsuite/22_locale/time_get_members_wchar_t.cc: Add. * testsuite/22_locale/time_put_members_wchar_t.cc: Add. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45966 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite')
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get_members_char.cc105
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc599
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc200
-rw-r--r--libstdc++-v3/testsuite/Makefile.in1
4 files changed, 904 insertions, 1 deletions
diff --git a/libstdc++-v3/testsuite/22_locale/time_get_members_char.cc b/libstdc++-v3/testsuite/22_locale/time_get_members_char.cc
index 7af11b1d6bc..b477ba22317 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get_members_char.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get_members_char.cc
@@ -481,11 +481,116 @@ void test04()
VERIFY( errorstate == ios_base::eofbit );
}
+void test05()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<char> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<char>& time_c = use_facet<__timepunct<char> >(loc_c);
+ const __timepunct<char>& time_de = use_facet<__timepunct<char> >(loc_de);
+ const __timepunct<char>& time_hk = use_facet<__timepunct<char> >(loc_hk);
+ const __timepunct<char>& time_fr = use_facet<__timepunct<char> >(loc_fr);
+
+ const string empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ istringstream iss;
+ const time_get<char>& tim_get = use_facet<time_get<char> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const char* all = "%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ "%w %W %x %X %y %Y %Z %%";
+ const char* date = "%A, the second of %B";
+ const char* date_ex = "%Ex";
+
+ // iter_type
+ // get_date(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str("04/04/71");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_date(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_year == time_bday.tm_year );
+ VERIFY( time01.tm_mon == time_bday.tm_mon );
+ VERIFY( time01.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str("04/04/71 ");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_date(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time02.tm_year == time_bday.tm_year );
+ VERIFY( time02.tm_mon == time_bday.tm_mon );
+ VERIFY( time02.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it02 == ' ');
+
+ iss.str("04/04d/71 ");
+ iterator_type is_it03(iss);
+ tm time03;
+ time03.tm_year = 3;
+ errorstate = good;
+ tim_get.get_date(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time03.tm_year == 3 );
+ VERIFY( time03.tm_mon == time_bday.tm_mon );
+ VERIFY( time03.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == ios_base::failbit );
+ VERIFY( *is_it03 == 'd');
+
+ // inspection of named locales, de_DE
+ iss.imbue(loc_de);
+ iss.str("04.04.1971");
+ iterator_type is_it10(iss);
+ tm time10;
+ errorstate = good;
+ tim_get.get_date(is_it10, end, iss, errorstate, &time10);
+ VERIFY( time10.tm_mon == time_bday.tm_mon );
+ VERIFY( time10.tm_mday == time_bday.tm_mday );
+ VERIFY( time10.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ // inspection of named locales, en_HK
+ iss.imbue(loc_hk);
+ iss.str("Sunday, April 04, 1971");
+ iterator_type is_it20(iss);
+ tm time20;
+ errorstate = good;
+ tim_get.get_date(is_it20, end, iss, errorstate, &time20);
+ VERIFY( time20.tm_mon == time_bday.tm_mon );
+ VERIFY( time20.tm_mday == time_bday.tm_mday );
+ VERIFY( time20.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+
int main()
{
test01();
test02();
test03();
test04();
+ test05();
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc b/libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc
new file mode 100644
index 00000000000..dfddc0325c5
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc
@@ -0,0 +1,599 @@
+// 2001-10-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 22.2.5.1.1 time_get members
+
+#include <locale>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// XXX This test is not working for non-glibc locale models.
+// { dg-do run { xfail *-*-* } }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+void test01()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<wchar_t> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ const wstring empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ wistringstream iss;
+ const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // 1
+ // dateorder date_order() const
+ iss.imbue(loc_c);
+ dateorder do1 = tim_get.date_order();
+ // VERIFY( do1 == time_base::mdy );
+ VERIFY( do1 == time_base::no_order );
+
+ // 2
+ // iter_type
+ // get_time(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str(L"12:00:00");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_time(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_sec == time_bday.tm_sec );
+ VERIFY( time01.tm_min == time_bday.tm_min );
+ VERIFY( time01.tm_hour == time_bday.tm_hour );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"12:00:00 ");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_time(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time01.tm_sec == time_bday.tm_sec );
+ VERIFY( time01.tm_min == time_bday.tm_min );
+ VERIFY( time01.tm_hour == time_bday.tm_hour );
+ VERIFY( errorstate == good );
+
+ iss.str(L"12:61:00 ");
+ iterator_type is_it03(iss);
+ tm time03;
+ errorstate = good;
+ tim_get.get_time(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time01.tm_hour == time_bday.tm_hour );
+ VERIFY( errorstate == ios_base::failbit );
+
+ iss.str(L"12:a:00 ");
+ iterator_type is_it04(iss);
+ tm time04;
+ errorstate = good;
+ tim_get.get_time(is_it04, end, iss, errorstate, &time04);
+ VERIFY( time01.tm_hour == time_bday.tm_hour );
+ VERIFY( *is_it04 == 'a');
+ VERIFY( errorstate == ios_base::failbit );
+
+ // inspection of named locales, de_DE
+ iss.imbue(loc_de);
+ iss.str(L"12:00:00");
+ iterator_type is_it10(iss);
+ tm time10;
+ errorstate = good;
+ tim_get.get_time(is_it10, end, iss, errorstate, &time10);
+ VERIFY( time10.tm_sec == time_bday.tm_sec );
+ VERIFY( time10.tm_min == time_bday.tm_min );
+ VERIFY( time10.tm_hour == time_bday.tm_hour );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ // inspection of named locales, en_HK
+ iss.imbue(loc_hk);
+ iss.str(L"12:00:00 PST");
+ // Hong Kong in California! Well, they have Paris in Vegas... this
+ // is all a little disney-esque anyway. Besides, you can get decent
+ // Dim Sum in San Francisco.
+ iterator_type is_it20(iss);
+ tm time20;
+ errorstate = good;
+ tim_get.get_time(is_it20, end, iss, errorstate, &time20);
+ VERIFY( time10.tm_sec == time_bday.tm_sec );
+ VERIFY( time10.tm_min == time_bday.tm_min );
+ VERIFY( time10.tm_hour == time_bday.tm_hour );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+
+void test02()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<wchar_t> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ const wstring empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ wistringstream iss;
+ const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // iter_type
+ // get_weekday(iter_type, iter_type, ios_base&,
+ // ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str(L"Sunday");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_weekday(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"Sun");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_weekday(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time02.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"Sun ");
+ iterator_type is_it03(iss);
+ tm time03;
+ errorstate = good;
+ tim_get.get_weekday(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time03.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it03 == ' ');
+
+ iss.str(L"San");
+ iterator_type is_it04(iss);
+ tm time04;
+ time04.tm_wday = 4;
+ errorstate = good;
+ tim_get.get_weekday(is_it04, end, iss, errorstate, &time04);
+ VERIFY( time04.tm_wday == 4 );
+ VERIFY( *is_it04 == 'n');
+ VERIFY( errorstate == ios_base::failbit );
+
+ iss.str(L"Tuesday ");
+ iterator_type is_it05(iss);
+ tm time05;
+ errorstate = good;
+ tim_get.get_weekday(is_it05, end, iss, errorstate, &time05);
+ VERIFY( time05.tm_wday == 2 );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it05 == ' ');
+
+ iss.str(L"Tuesducky "); // Kind of like Fryday, without the swirls.
+ iterator_type is_it06(iss);
+ tm time06;
+ time06.tm_wday = 4;
+ errorstate = good;
+ tim_get.get_weekday(is_it06, end, iss, errorstate, &time06);
+ VERIFY( time06.tm_wday == 4 );
+ VERIFY( errorstate == ios_base::failbit );
+ VERIFY( *is_it05 == 'u');
+
+ // inspection of named locales, de_DE
+ iss.imbue(loc_de);
+ iss.str(L"Sonntag");
+ iterator_type is_it10(iss);
+ tm time10;
+ errorstate = good;
+ tim_get.get_weekday(is_it10, end, iss, errorstate, &time10);
+ VERIFY( time10.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ // inspection of named locales, en_HK
+ iss.imbue(loc_hk);
+ iss.str(L"Sunday");
+ iterator_type is_it20(iss);
+ tm time20;
+ errorstate = good;
+ tim_get.get_weekday(is_it20, end, iss, errorstate, &time20);
+ VERIFY( time20.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+
+void test03()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<wchar_t> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ const wstring empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ wistringstream iss;
+ const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // iter_type
+ // get_monthname(iter_type, iter_type, ios_base&,
+ // ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str(L"April");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_monthname(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"Apr");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_monthname(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time02.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"Apr ");
+ iterator_type is_it03(iss);
+ tm time03;
+ errorstate = good;
+ tim_get.get_monthname(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time03.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it03 == ' ');
+
+ iss.str(L"Aar");
+ iterator_type is_it04(iss);
+ tm time04;
+ time04.tm_mon = 5;
+ errorstate = good;
+ tim_get.get_monthname(is_it04, end, iss, errorstate, &time04);
+ VERIFY( time04.tm_mon == 5 );
+ VERIFY( *is_it04 == 'a');
+ VERIFY( errorstate == ios_base::failbit );
+
+ iss.str(L"December ");
+ iterator_type is_it05(iss);
+ tm time05;
+ errorstate = good;
+ tim_get.get_monthname(is_it05, end, iss, errorstate, &time05);
+ VERIFY( time05.tm_mon == 11 );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it05 == ' ');
+
+ iss.str(L"Decelember ");
+ iterator_type is_it06(iss);
+ tm time06;
+ time06.tm_mon = 4;
+ errorstate = good;
+ tim_get.get_monthname(is_it06, end, iss, errorstate, &time06);
+ VERIFY( time06.tm_mon == 4 );
+ VERIFY( errorstate == ios_base::failbit );
+ VERIFY( *is_it05 == 'l');
+
+ // inspection of named locales, de_DE
+ iss.imbue(loc_de);
+ iss.str(L"April");
+ iterator_type is_it10(iss);
+ tm time10;
+ errorstate = good;
+ tim_get.get_monthname(is_it10, end, iss, errorstate, &time10);
+ VERIFY( time10.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ // inspection of named locales, en_HK
+ iss.imbue(loc_hk);
+ iss.str(L"April");
+ iterator_type is_it20(iss);
+ tm time20;
+ errorstate = good;
+ tim_get.get_monthname(is_it20, end, iss, errorstate, &time20);
+ VERIFY( time20.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+
+void test04()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<wchar_t> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ const wstring empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ wistringstream iss;
+ const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // iter_type
+ // get_year(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str(L"1971");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_year(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"1971 ");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_year(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time02.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it02 == ' ');
+
+ iss.str(L"197d1 ");
+ iterator_type is_it03(iss);
+ tm time03;
+ time03.tm_year = 3;
+ errorstate = good;
+ tim_get.get_year(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time03.tm_year == 3 );
+ VERIFY( errorstate == ios_base::failbit );
+ VERIFY( *is_it03 == 'd');
+
+ iss.str(L"71d71");
+ iterator_type is_it04(iss);
+ tm time04;
+ errorstate = good;
+ tim_get.get_year(is_it04, end, iss, errorstate, &time04);
+ VERIFY( time04.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it03 == 'd');
+
+ iss.str(L"71");
+ iterator_type is_it05(iss);
+ tm time05;
+ errorstate = good;
+ tim_get.get_year(is_it05, end, iss, errorstate, &time05);
+ VERIFY( time05.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+
+void test05()
+{
+ using namespace std;
+ typedef time_base::dateorder dateorder;
+ typedef istreambuf_iterator<wchar_t> iterator_type;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ const wstring empty;
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+
+ wistringstream iss;
+ const time_get<wchar_t>& tim_get = use_facet<time_get<wchar_t> >(iss.getloc());
+
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+ // create "C" time objects
+ const tm time_bday = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // iter_type
+ // get_date(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const
+
+ // sanity checks for "C" locale
+ iss.str(L"04/04/71");
+ iterator_type is_it01(iss);
+ tm time01;
+ errorstate = good;
+ tim_get.get_date(is_it01, end, iss, errorstate, &time01);
+ VERIFY( time01.tm_year == time_bday.tm_year );
+ VERIFY( time01.tm_mon == time_bday.tm_mon );
+ VERIFY( time01.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ iss.str(L"04/04/71 ");
+ iterator_type is_it02(iss);
+ tm time02;
+ errorstate = good;
+ tim_get.get_date(is_it02, end, iss, errorstate, &time02);
+ VERIFY( time02.tm_year == time_bday.tm_year );
+ VERIFY( time02.tm_mon == time_bday.tm_mon );
+ VERIFY( time02.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == good );
+ VERIFY( *is_it02 == ' ');
+
+ iss.str(L"04/04d/71 ");
+ iterator_type is_it03(iss);
+ tm time03;
+ time03.tm_year = 3;
+ errorstate = good;
+ tim_get.get_date(is_it03, end, iss, errorstate, &time03);
+ VERIFY( time03.tm_year == 3 );
+ VERIFY( time03.tm_mon == time_bday.tm_mon );
+ VERIFY( time03.tm_mday == time_bday.tm_mday );
+ VERIFY( errorstate == ios_base::failbit );
+ VERIFY( *is_it03 == 'd');
+
+ // inspection of named locales, de_DE
+ iss.imbue(loc_de);
+ iss.str(L"04.04.1971");
+ iterator_type is_it10(iss);
+ tm time10;
+ errorstate = good;
+ tim_get.get_date(is_it10, end, iss, errorstate, &time10);
+ VERIFY( time10.tm_mon == time_bday.tm_mon );
+ VERIFY( time10.tm_mday == time_bday.tm_mday );
+ VERIFY( time10.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+
+ // inspection of named locales, en_HK
+ iss.imbue(loc_hk);
+ iss.str(L"Sunday, April 04, 1971");
+ iterator_type is_it20(iss);
+ tm time20;
+ errorstate = good;
+ tim_get.get_date(is_it20, end, iss, errorstate, &time20);
+ VERIFY( time20.tm_mon == time_bday.tm_mon );
+ VERIFY( time20.tm_mday == time_bday.tm_mday );
+ VERIFY( time20.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+}
+#endif
+
+int main()
+{
+#ifdef _GLIBCPP_USE_WCHAR_T
+ test01();
+ test02();
+ test03();
+ test04();
+ test05();
+#endif
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc b/libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc
new file mode 100644
index 00000000000..cde8bd4baa3
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc
@@ -0,0 +1,200 @@
+// 2001-10-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 22.2.5.3.1 time_put members
+
+#include <locale>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// XXX This test is not working for non-glibc locale models.
+// { dg-do run { xfail *-*-* } }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+void test01()
+{
+ using namespace std;
+ typedef ostreambuf_iterator<wchar_t> iterator_type;
+ typedef char_traits<wchar_t> traits;
+
+ bool test = true;
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+ locale loc_hk("en_HK");
+ locale loc_fr("fr_FR@euro");
+ locale loc_de("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_fr );
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_de != loc_fr );
+
+ // cache the __timepunct facets, for quicker gdb inspection
+ const __timepunct<wchar_t>& time_c = use_facet<__timepunct<wchar_t> >(loc_c);
+ const __timepunct<wchar_t>& time_de = use_facet<__timepunct<wchar_t> >(loc_de);
+ const __timepunct<wchar_t>& time_hk = use_facet<__timepunct<wchar_t> >(loc_hk);
+ const __timepunct<wchar_t>& time_fr = use_facet<__timepunct<wchar_t> >(loc_fr);
+
+ // create an ostream-derived object, cache the time_put facet
+ const wstring empty;
+ wostringstream oss;
+ const time_put<wchar_t>& tim_put = use_facet<time_put<wchar_t> >(oss.getloc());
+
+ // create "C" time objects
+ tm time1 = { 0, 0, 12, 4, 3, 71 };
+ const wchar_t* all = L"%a %A %b %B %c %d %H %I %j %m %M %p %s %U "
+ L"%w %W %x %X %y %Y %Z %%";
+ const wchar_t* date = L"%A, the second of %B";
+ const wchar_t* date_ex = L"%Ex";
+
+ // 1
+ // iter_type
+ // put(iter_type s, ios_base& str, char_type fill, const tm* t,
+ // char format, char modifier = 0) const;
+ oss.str(empty);
+ oss.imbue(loc_c);
+ iterator_type os_it01 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ wstring result1 = oss.str();
+ VERIFY( result1 == L"Sun" );
+
+ oss.str(empty);
+ iterator_type os_it21 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ wstring result21 = oss.str(); // "04/04/71"
+ oss.str(empty);
+ iterator_type os_it22 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ wstring result22 = oss.str(); // "12:00:00"
+ oss.str(empty);
+ iterator_type os_it31 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ wstring result31 = oss.str(); // "04/04/71"
+ oss.str(empty);
+ iterator_type os_it32 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ wstring result32 = oss.str(); // "12:00:00"
+
+ oss.str(empty);
+ oss.imbue(loc_de);
+ iterator_type os_it02 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ wstring result2 = oss.str();
+ VERIFY( result2 == L"Son" );
+
+ oss.str(empty); // "%d.%m.%Y"
+ iterator_type os_it23 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ wstring result23 = oss.str(); // "04.04.1971"
+ oss.str(empty); // "%T"
+ iterator_type os_it24 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ wstring result24 = oss.str(); // "12:00:00"
+ oss.str(empty);
+ iterator_type os_it33 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ wstring result33 = oss.str(); // "04.04.1971"
+ oss.str(empty);
+ iterator_type os_it34 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ wstring result34 = oss.str(); // "12:00:00"
+
+ oss.str(empty);
+ oss.imbue(loc_hk);
+ iterator_type os_it03 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ wstring result3 = oss.str();
+ VERIFY( result3 == L"Sun" );
+
+ oss.str(empty); // "%A, %B %d, %Y"
+ iterator_type os_it25 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ wstring result25 = oss.str(); // "Sunday, April 04, 1971"
+ oss.str(empty); // "%I:%M:%S %Z"
+ iterator_type os_it26 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ wstring result26 = oss.str(); // "12:00:00 PST"
+ oss.str(empty);
+ iterator_type os_it35 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ wstring result35 = oss.str(); // "Sunday, April 04, 1971"
+ oss.str(empty);
+ iterator_type os_it36 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ wstring result36 = oss.str(); // "12:00:00 PST"
+
+ oss.str(empty);
+ oss.imbue(loc_fr);
+ iterator_type os_it04 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'a');
+ wstring result4 = oss.str();
+ VERIFY( result4 == L"dim" );
+
+ oss.str(empty); // "%d.%m.%Y"
+ iterator_type os_it27 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x');
+ wstring result27 = oss.str(); // "04.04.1971"
+ oss.str(empty); // "%T"
+ iterator_type os_it28 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X');
+ wstring result28 = oss.str(); // "12:00:00"
+ oss.str(empty);
+ iterator_type os_it37 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'x', 'E');
+ wstring result37 = oss.str(); // "04.04.1971"
+ oss.str(empty);
+ iterator_type os_it38 = tim_put.put(oss.rdbuf(), oss, '*', &time1, 'X', 'E');
+ wstring result38 = oss.str(); // "12:00:00"
+
+ // 2
+ oss.str(empty);
+ oss.imbue(loc_c);
+ iterator_type os_it05 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
+ wstring result5 = oss.str();
+ VERIFY( result5 == L"Sunday, the second of April");
+ iterator_type os_it06 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date));
+ wstring result6 = oss.str();
+ VERIFY( result6 != result5 );
+
+ oss.str(empty);
+ oss.imbue(loc_de);
+ iterator_type os_it07 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
+ wstring result7 = oss.str();
+ VERIFY( result7 == L"Sonntag, the second of April");
+ iterator_type os_it08 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date));
+ wstring result8 = oss.str();
+ VERIFY( result8 != result7 );
+
+ oss.str(empty);
+ oss.imbue(loc_hk);
+ iterator_type os_it09 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
+ wstring result9 = oss.str();
+ VERIFY( result9 == L"Sunday, the second of April");
+ iterator_type os_it10 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date));
+ wstring result10 = oss.str();
+ VERIFY( result10 != result9 );
+
+ oss.str(empty);
+ oss.imbue(loc_fr);
+ iterator_type os_it11 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date, date + traits::length(date));
+ wstring result11 = oss.str();
+ VERIFY( result11 == L"dimanche, the second of avril");
+ iterator_type os_it12 = tim_put.put(oss.rdbuf(), oss, '*', &time1,
+ date_ex, date_ex + traits::length(date));
+ wstring result12 = oss.str();
+ VERIFY( result12 != result11 );
+}
+#endif
+
+int main()
+{
+#ifdef _GLIBCPP_USE_WCHAR_T
+ test01();
+#endif
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index 24a64d6eb29..b09f33d2539 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -78,7 +78,6 @@ CMESSAGES_H = @CMESSAGES_H@
CPP = @CPP@
CSHADOW_FLAGS = @CSHADOW_FLAGS@
CSTDIO_H = @CSTDIO_H@
-CTIME_H = @CTIME_H@
CXX = @CXX@
CXXCPP = @CXXCPP@
C_INCLUDE_DIR = @C_INCLUDE_DIR@