diff options
author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-10-02 18:44:50 +0000 |
---|---|---|
committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-10-02 18:44:50 +0000 |
commit | 3bd33b8a3d165f63491c54155c89425202fb8703 (patch) | |
tree | 25ea33498c6963bfed74e7c354dd1d81f141af42 /libstdc++-v3/testsuite | |
parent | 7417ed8d4ef89ab7b9c8ac9f014bf27783690140 (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.cc | 105 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc | 599 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc | 200 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/Makefile.in | 1 |
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@ |