diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/22_locale/money_put | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/22_locale/money_put')
25 files changed, 1638 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/cons/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/cons/3.cc new file mode 100644 index 000000000..5e316fa81 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/cons/3.cc @@ -0,0 +1,40 @@ +// 2005-04-29 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2005, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2 Template class money_put + +// { dg-do compile } + +#include <locale> +#include <testsuite_character.h> + +class gnu_money_put: public std::money_put<__gnu_test::pod_uint> +{ }; + +// libstdc++/21238 +void test01() +{ + gnu_money_put facet01; +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc new file mode 100644 index 000000000..848dd141e --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc @@ -0,0 +1,108 @@ +// { dg-require-namedlocale "de_DE@euro" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test string version +void test01() +{ + using namespace std; + typedef ostreambuf_iterator<char> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_de = locale("de_DE@euro"); + VERIFY( loc_c != loc_de ); + + // sanity check the data is correct. + const string empty; + + // total EPA budget FY 2002 + const string digits1("720000000000"); + + // input less than frac_digits + const string digits2("-1"); + + // cache the money_put facet + ostringstream oss; + oss.imbue(loc_de); + const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, ' ', digits1); + string result1 = oss.str(); + VERIFY( result1 == "7.200.000.000,00 "); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); + string result2 = oss.str(); + VERIFY( result2 == "7.200.000.000,00 "); + + // intl and non-intl versions should be the same. + VERIFY( result1 == result2 ); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, ' ', digits1); + string result3 = oss.str(); + VERIFY( result3 == "7.200.000.000,00 EUR "); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); + string result4 = oss.str(); + VERIFY( result4 == "7.200.000.000,00 \244"); + + // intl and non-intl versions should be different. + VERIFY( result3 != result4 ); + VERIFY( result3 != result1 ); + VERIFY( result4 != result2 ); + + oss.unsetf(ios_base::showbase); + + // test io.width() > length + // test various fill strategies + oss.str(empty); + oss.width(20); + mon_put.put(oss.rdbuf(), true, oss, '*', digits2); + string result10 = oss.str(); + VERIFY( result10 == "***************-,01*"); + + oss.str(empty); + oss.width(20); + oss.setf(ios_base::internal); + mon_put.put(oss.rdbuf(), true, oss, '*', digits2); + string result11 = oss.str(); + VERIFY( result11 == "-,01****************"); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc new file mode 100644 index 000000000..5ccb9ba4a --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc @@ -0,0 +1,49 @@ +// 2003-11-09 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2003, 2009, 2010 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// libstdc++/12971 +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + typedef ostreambuf_iterator<char> iterator_type; + + long double amount = 10.8L; + + // cache the money_put facet + ostringstream oss; + const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, ' ', amount); + string result = oss.str(); + VERIFY( result == "11" ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc new file mode 100644 index 000000000..6d3136c54 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc @@ -0,0 +1,105 @@ +// { dg-require-namedlocale "en_HK" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test string version +void test02() +{ + using namespace std; + typedef ostreambuf_iterator<char> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_hk = locale("en_HK"); + VERIFY( loc_c != loc_hk ); + + // sanity check the data is correct. + const string empty; + + // total EPA budget FY 2002 + const string digits1("720000000000"); + + // est. cost, national missile "defense", expressed as a loss in USD 2001 + const string digits2("-10000000000000"); + + // not valid input + const string digits3("-A"); + + // input less than frac_digits + const string digits4("-1"); + + // cache the money_put facet + ostringstream oss; + oss.imbue(loc_hk); + const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc()); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + // test sign of more than one digit, say hong kong. + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); + string result5 = oss.str(); + VERIFY( result5 == "HK$7,200,000,000.00"); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, ' ', digits2); + string result6 = oss.str(); + VERIFY( result6 == "(HKD 100,000,000,000.00)"); + + // test one-digit formats without zero padding + oss.imbue(loc_c); + oss.str(empty); + const money_put<char>& mon_put2 = use_facet<money_put<char> >(oss.getloc()); + mon_put2.put(oss.rdbuf(), true, oss, ' ', digits4); + string result7 = oss.str(); + VERIFY( result7 == "1"); + + // test one-digit formats with zero padding, zero frac widths + oss.imbue(loc_hk); + oss.str(empty); + const money_put<char>& mon_put3 = use_facet<money_put<char> >(oss.getloc()); + mon_put3.put(oss.rdbuf(), true, oss, ' ', digits4); + string result8 = oss.str(); + VERIFY( result8 == "(HKD .01)"); + + oss.unsetf(ios_base::showbase); + + // test bunk input + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, ' ', digits3); + string result9 = oss.str(); + VERIFY( result9 == ""); +} + +int main() +{ + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc new file mode 100644 index 000000000..462666f8b --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc @@ -0,0 +1,88 @@ +// { dg-require-namedlocale "de_DE@euro" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test double version +void test03() +{ + using namespace std; + typedef ostreambuf_iterator<char> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_de = locale("de_DE@euro"); + VERIFY( loc_c != loc_de ); + + // sanity check the data is correct. + const string empty; + + // total EPA budget FY 2002 + const long double digits1 = 720000000000.0; + + // cache the money_put facet + ostringstream oss; + oss.imbue(loc_de); + const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, ' ', digits1); + string result1 = oss.str(); + VERIFY( result1 == "7.200.000.000,00 "); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); + string result2 = oss.str(); + VERIFY( result2 == "7.200.000.000,00 "); + + // intl and non-intl versions should be the same. + VERIFY( result1 == result2 ); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, ' ', digits1); + string result3 = oss.str(); + VERIFY( result3 == "7.200.000.000,00 EUR "); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); + string result4 = oss.str(); + VERIFY( result4 == "7.200.000.000,00 \244"); + + // intl and non-intl versions should be different. + VERIFY( result3 != result4 ); + VERIFY( result3 != result1 ); + VERIFY( result4 != result2 ); +} + +int main() +{ + test03(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/39168.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/39168.cc new file mode 100644 index 000000000..1fb9bf0f9 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/39168.cc @@ -0,0 +1,50 @@ +// Copyright (C) 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <sstream> +#include <locale> +#include <climits> +#include <testsuite_hooks.h> + +class my_moneypunct: public std::moneypunct<char> +{ +protected: + std::string do_grouping() const { return std::string(1, CHAR_MAX); } +}; + +// libstdc++/39168 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + ostringstream oss; + oss.imbue(locale(oss.getloc(), new my_moneypunct)); + const money_put<char>& mp = use_facet<money_put<char> >(oss.getloc()); + + string digits(300, '1'); + mp.put(oss.rdbuf(), false, oss, ' ', digits); + VERIFY( oss.str() == digits ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/4.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/4.cc new file mode 100644 index 000000000..4595a1523 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/4.cc @@ -0,0 +1,71 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +void test04() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + // Check money_put works with other iterators besides streambuf + // output iterators. (As long as output_iterator requirements are met.) + typedef string::iterator iter_type; + typedef money_put<char, iter_type> mon_put_type; + const ios_base::iostate goodbit = ios_base::goodbit; + ios_base::iostate err = goodbit; + const locale loc_c = locale::classic(); + // woman, art, thief (stole the blues) + const string str("1943 Janis Joplin"); + const long double ld = 1943.0; + const string x(str.size(), 'x'); // have to have allocated string! + string res; + + ostringstream oss; + oss.imbue(locale(loc_c, new mon_put_type)); + + // Iterator advanced, state, output. + const mon_put_type& mp = use_facet<mon_put_type>(oss.getloc()); + + // 01 string + res = x; + iter_type ret1 = mp.put(res.begin(), false, oss, ' ', str); + string sanity1(res.begin(), ret1); + VERIFY( err == goodbit ); + VERIFY( res == "1943xxxxxxxxxxxxx" ); + VERIFY( sanity1 == "1943" ); + + // 02 long double + res = x; + iter_type ret2 = mp.put(res.begin(), false, oss, ' ', ld); + string sanity2(res.begin(), ret2); + VERIFY( err == goodbit ); + VERIFY( res == "1943xxxxxxxxxxxxx" ); + VERIFY( sanity2 == "1943" ); +} + +int main() +{ + test04(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/5.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/5.cc new file mode 100644 index 000000000..a7a6f8181 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/5.cc @@ -0,0 +1,69 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +struct My_money_io : public std::moneypunct<char,false> +{ + char_type do_decimal_point() const { return '.'; } + char_type do_thousands_sep() const { return ','; } + std::string do_grouping() const { return "\003"; } + + std::string do_negative_sign() const { return "()"; } + + int do_frac_digits() const { return 2; } + + pattern do_neg_format() const + { + pattern pat = { { symbol, space, sign, value } }; + return pat; + } +}; + +// libstdc++/5708 +void test05() +{ + using namespace std; + bool test __attribute__((unused)) = true; + typedef ostreambuf_iterator<char> OutIt; + + locale loc(locale::classic(), new My_money_io); + + bool intl = false; + + string val("-123456"); + const money_put<char,OutIt>& mp = + use_facet<money_put<char, OutIt> >(loc); + + ostringstream fmt; + fmt.imbue(loc); + OutIt out(fmt); + mp.put(out,intl,fmt,'*',val); + VERIFY( fmt.str() == "*(1,234.56)" ); +} + +int main() +{ + test05(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/6.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/6.cc new file mode 100644 index 000000000..379824771 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/6.cc @@ -0,0 +1,58 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +struct My_money_io_2 : public std::moneypunct<char,false> +{ + char_type do_thousands_sep() const { return ','; } + std::string do_grouping() const { return "\001"; } +}; + +// Make sure we can output a very big amount of money (with grouping too). +void test06() +{ + using namespace std; + bool test __attribute__((unused)) = true; + typedef ostreambuf_iterator<char> OutIt; + + locale loc(locale::classic(), new My_money_io_2); + + bool intl = false; + + long double val = 1.0e50L; + const money_put<char,OutIt>& mp = + use_facet<money_put<char, OutIt> >(loc); + + ostringstream fmt; + fmt.imbue(loc); + OutIt out(fmt); + mp.put(out,intl,fmt,'*',val); + VERIFY( fmt.good() ); +} + +int main() +{ + test06(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc new file mode 100644 index 000000000..e54035891 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc @@ -0,0 +1,50 @@ +// { dg-require-namedlocale "de_DE" } +// { dg-require-namedlocale "es_ES" } + +// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 +// Free Software Foundation, Inc. +// +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <sstream> +#include <locale> +#include <testsuite_hooks.h> + +int main() +{ + using namespace std; + + bool test __attribute__((unused)) = true; + locale l1 = locale("de_DE"); + locale l2 = locale("es_ES"); + + const money_put<char>& mp = use_facet<money_put<char> >(l1); + ostringstream oss; + oss.imbue(l2); + oss.setf(ios_base::showbase); + + long double ld = -1234567890; + mp.put(oss.rdbuf(), true, oss, ' ', ld); // -EUR 12.345.678,90 + string res = oss.str(); + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 7) + VERIFY( res == "-12.345.678,90 EUR " ); +#else + VERIFY( res == "-EUR 12.345.678,90" ); +#endif + + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc new file mode 100644 index 000000000..3b13bdc28 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc @@ -0,0 +1,64 @@ +// { dg-require-namedlocale "de_DE" } +// { dg-require-namedlocale "de_DE@euro" } +// { dg-require-namedlocale "en_HK" } + +// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2005, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.4.1.1 collate members + +#include <testsuite_hooks.h> + +#define main discard_main_1 +#include "1.cc" +#undef main + +#define main discard_main_2 +#include "2.cc" +#undef main + +#define main discard_main_3 +#include "3.cc" +#undef main + +#define main discard_main_4 +#include "4.cc" +#undef main + +#define main discard_main_5 +#include "5.cc" +#undef main + +#define main discard_main_6 +#include "6.cc" +#undef main + +int main() +{ + using namespace __gnu_test; + func_callback two; + two.push_back(&test01); + two.push_back(&test02); + two.push_back(&test03); + two.push_back(&test04); + two.push_back(&test05); + two.push_back(&test06); + run_tests_wrapped_env("de_DE", "LANG", two); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc new file mode 100644 index 000000000..b160fb72a --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc @@ -0,0 +1,64 @@ +// { dg-require-namedlocale "ja_JP.eucjp" } +// { dg-require-namedlocale "de_DE@euro" } +// { dg-require-namedlocale "en_HK" } + +// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2005, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.4.1.1 collate members + +#include <testsuite_hooks.h> + +#define main discard_main_1 +#include "1.cc" +#undef main + +#define main discard_main_2 +#include "2.cc" +#undef main + +#define main discard_main_3 +#include "3.cc" +#undef main + +#define main discard_main_4 +#include "4.cc" +#undef main + +#define main discard_main_5 +#include "5.cc" +#undef main + +#define main discard_main_6 +#include "6.cc" +#undef main + +int main() +{ + using namespace __gnu_test; + func_callback two; + two.push_back(&test01); + two.push_back(&test02); + two.push_back(&test03); + two.push_back(&test04); + two.push_back(&test05); + two.push_back(&test06); + run_tests_wrapped_locale("ja_JP.eucjp", two); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc new file mode 100644 index 000000000..71f35abd1 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc @@ -0,0 +1,109 @@ +// { dg-require-namedlocale "de_DE@euro" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test wstring version +void test01() +{ + using namespace std; + typedef ostreambuf_iterator<wchar_t> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_de = locale("de_DE@euro"); + VERIFY( loc_c != loc_de ); + + // sanity check the data is correct. + const wstring empty; + + // total EPA budget FY 2002 + const wstring digits1(L"720000000000"); + + // input less than frac_digits + const wstring digits2(L"-1"); + + // cache the money_put facet + wostringstream oss; + oss.imbue(loc_de); + const money_put<wchar_t>& mon_put = + use_facet<money_put<wchar_t> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, L' ', digits1); + wstring result1 = oss.str(); + VERIFY( result1 == L"7.200.000.000,00 " ); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); + wstring result2 = oss.str(); + VERIFY( result2 == L"7.200.000.000,00 " ); + + // intl and non-intl versions should be the same. + VERIFY( result1 == result2 ); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, L' ', digits1); + wstring result3 = oss.str(); + VERIFY( result3 == L"7.200.000.000,00 EUR " ); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); + wstring result4 = oss.str(); + VERIFY( result4 == L"7.200.000.000,00 \x20ac" ); + + // intl and non-intl versions should be different. + VERIFY( result3 != result4 ); + VERIFY( result3 != result1 ); + VERIFY( result4 != result2 ); + + oss.unsetf(ios_base::showbase); + + // test io.width() > length + // test various fill strategies + oss.str(empty); + oss.width(20); + mon_put.put(oss.rdbuf(), true, oss, L'*', digits2); + wstring result10 = oss.str(); + VERIFY( result10 == L"***************-,01*" ); + + oss.str(empty); + oss.width(20); + oss.setf(ios_base::internal); + mon_put.put(oss.rdbuf(), true, oss, L'*', digits2); + wstring result11 = oss.str(); + VERIFY( result11 == L"-,01****************" ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc new file mode 100644 index 000000000..cd430a9e1 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc @@ -0,0 +1,50 @@ +// 2003-11-09 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2003, 2004, 2009, 2010 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// libstdc++/12971 +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + typedef ostreambuf_iterator<wchar_t> iterator_type; + + long double amount = 10.8L; + + // cache the money_put facet + wostringstream oss; + const money_put<wchar_t>& mon_put = + use_facet<money_put<wchar_t> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, L' ', amount); + wstring result = oss.str(); + VERIFY( result == L"11" ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc new file mode 100644 index 000000000..84331bd92 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc @@ -0,0 +1,108 @@ +// { dg-require-namedlocale "en_HK" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test wstring version +void test02() +{ + using namespace std; + typedef ostreambuf_iterator<wchar_t> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_hk = locale("en_HK"); + VERIFY( loc_c != loc_hk ); + + // sanity check the data is correct. + const wstring empty; + + // total EPA budget FY 2002 + const wstring digits1(L"720000000000"); + + // est. cost, national missile "defense", expressed as a loss in USD 2001 + const wstring digits2(L"-10000000000000"); + + // not valid input + const wstring digits3(L"-A"); + + // input less than frac_digits + const wstring digits4(L"-1"); + + // cache the money_put facet + wostringstream oss; + oss.imbue(loc_hk); + const money_put<wchar_t>& mon_put = + use_facet<money_put<wchar_t> >(oss.getloc()); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + // test sign of more than one digit, say hong kong. + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); + wstring result5 = oss.str(); + VERIFY( result5 == L"HK$7,200,000,000.00" ); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, L' ', digits2); + wstring result6 = oss.str(); + VERIFY( result6 == L"(HKD 100,000,000,000.00)" ); + + // test one-digit formats without zero padding + oss.imbue(loc_c); + oss.str(empty); + const money_put<wchar_t>& mon_put2 = + use_facet<money_put<wchar_t> >(oss.getloc()); + mon_put2.put(oss.rdbuf(), true, oss, L' ', digits4); + wstring result7 = oss.str(); + VERIFY( result7 == L"1" ); + + // test one-digit formats with zero padding, zero frac widths + oss.imbue(loc_hk); + oss.str(empty); + const money_put<wchar_t>& mon_put3 = + use_facet<money_put<wchar_t> >(oss.getloc()); + mon_put3.put(oss.rdbuf(), true, oss, L' ', digits4); + wstring result8 = oss.str(); + VERIFY( result8 == L"(HKD .01)" ); + + oss.unsetf(ios_base::showbase); + + // test bunk input + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, L' ', digits3); + wstring result9 = oss.str(); + VERIFY( result9 == L"" ); +} + +int main() +{ + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc new file mode 100644 index 000000000..19921bf5d --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc @@ -0,0 +1,89 @@ +// { dg-require-namedlocale "de_DE@euro" } + +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 +// 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +// test double version +void test03() +{ + using namespace std; + typedef ostreambuf_iterator<wchar_t> iterator_type; + + bool test __attribute__((unused)) = true; + + // basic construction + locale loc_c = locale::classic(); + locale loc_de = locale("de_DE@euro"); + VERIFY( loc_c != loc_de ); + + // sanity check the data is correct. + const wstring empty; + + // total EPA budget FY 2002 + const long double digits1 = 720000000000.0; + + // cache the money_put facet + wostringstream oss; + oss.imbue(loc_de); + const money_put<wchar_t>& mon_put = + use_facet<money_put<wchar_t> >(oss.getloc()); + + mon_put.put(oss.rdbuf(), true, oss, L' ', digits1); + wstring result1 = oss.str(); + VERIFY( result1 == L"7.200.000.000,00 " ); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); + wstring result2 = oss.str(); + VERIFY( result2 == L"7.200.000.000,00 " ); + + // intl and non-intl versions should be the same. + VERIFY( result1 == result2 ); + + // now try with showbase, to get currency symbol in format + oss.setf(ios_base::showbase); + + oss.str(empty); + mon_put.put(oss.rdbuf(), true, oss, L' ', digits1); + wstring result3 = oss.str(); + VERIFY( result3 == L"7.200.000.000,00 EUR " ); + + oss.str(empty); + mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); + wstring result4 = oss.str(); + VERIFY( result4 == L"7.200.000.000,00 \x20ac" ); + + // intl and non-intl versions should be different. + VERIFY( result3 != result4 ); + VERIFY( result3 != result1 ); + VERIFY( result4 != result2 ); +} + +int main() +{ + test03(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/39168.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/39168.cc new file mode 100644 index 000000000..05b2303a7 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/39168.cc @@ -0,0 +1,50 @@ +// Copyright (C) 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <sstream> +#include <locale> +#include <climits> +#include <testsuite_hooks.h> + +class my_moneypunct: public std::moneypunct<wchar_t> +{ +protected: + std::string do_grouping() const { return std::string(1, CHAR_MAX); } +}; + +// libstdc++/39168 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + wostringstream oss; + oss.imbue(locale(oss.getloc(), new my_moneypunct)); + const money_put<wchar_t>& mp = use_facet<money_put<wchar_t> >(oss.getloc()); + + wstring digits(300, L'1'); + mp.put(oss.rdbuf(), false, oss, ' ', digits); + VERIFY( oss.str() == digits ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc new file mode 100644 index 000000000..d0c7f0258 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc @@ -0,0 +1,71 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +void test04() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + // Check money_put works with other iterators besides streambuf + // output iterators. (As long as output_iterator requirements are met.) + typedef wstring::iterator iter_type; + typedef money_put<wchar_t, iter_type> mon_put_type; + const ios_base::iostate goodbit = ios_base::goodbit; + ios_base::iostate err = goodbit; + const locale loc_c = locale::classic(); + // woman, art, thief (stole the blues) + const wstring str(L"1943 Janis Joplin"); + const long double ld = 1943.0; + const wstring x(str.size(), 'x'); // have to have allocated wstring! + wstring res; + + ostringstream oss; + oss.imbue(locale(loc_c, new mon_put_type)); + + // Iterator advanced, state, output. + const mon_put_type& mp = use_facet<mon_put_type>(oss.getloc()); + + // 01 wstring + res = x; + iter_type ret1 = mp.put(res.begin(), false, oss, L' ', str); + wstring sanity1(res.begin(), ret1); + VERIFY( err == goodbit ); + VERIFY( res == L"1943xxxxxxxxxxxxx" ); + VERIFY( sanity1 == L"1943" ); + + // 02 long double + res = x; + iter_type ret2 = mp.put(res.begin(), false, oss, L' ', ld); + wstring sanity2(res.begin(), ret2); + VERIFY( err == goodbit ); + VERIFY( res == L"1943xxxxxxxxxxxxx" ); + VERIFY( sanity2 == L"1943" ); +} + +int main() +{ + test04(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc new file mode 100644 index 000000000..7a9529ca3 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc @@ -0,0 +1,69 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +struct My_money_io : public std::moneypunct<wchar_t,false> +{ + char_type do_decimal_point() const { return L'.'; } + char_type do_thousands_sep() const { return L','; } + std::string do_grouping() const { return "\003"; } + + std::wstring do_negative_sign() const { return L"()"; } + + int do_frac_digits() const { return 2; } + + pattern do_neg_format() const + { + pattern pat = { { symbol, space, sign, value } }; + return pat; + } +}; + +// libstdc++/5708 +void test05() +{ + using namespace std; + bool test __attribute__((unused)) = true; + typedef ostreambuf_iterator<wchar_t> OutIt; + + locale loc(locale::classic(), new My_money_io); + + bool intl = false; + + wstring val(L"-123456"); + const money_put<wchar_t, OutIt>& mp = + use_facet<money_put<wchar_t, OutIt> >(loc); + + wostringstream fmt; + fmt.imbue(loc); + OutIt out(fmt); + mp.put(out, intl, fmt, L'*', val); + VERIFY( fmt.str() == L"*(1,234.56)" ); +} + +int main() +{ + test05(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc new file mode 100644 index 000000000..2fbc05f5a --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc @@ -0,0 +1,58 @@ +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2004, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2.1 money_put members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +struct My_money_io_2 : public std::moneypunct<wchar_t,false> +{ + char_type do_thousands_sep() const { return L','; } + std::string do_grouping() const { return "\001"; } +}; + +// Make sure we can output a very big amount of money (with grouping too). +void test06() +{ + using namespace std; + bool test __attribute__((unused)) = true; + typedef ostreambuf_iterator<wchar_t> OutIt; + + locale loc(locale::classic(), new My_money_io_2); + + bool intl = false; + + long double val = 1.0e50L; + const money_put<wchar_t, OutIt>& mp = + use_facet<money_put<wchar_t, OutIt> >(loc); + + wostringstream fmt; + fmt.imbue(loc); + OutIt out(fmt); + mp.put(out, intl, fmt, L'*', val); + VERIFY( fmt.good() ); +} + +int main() +{ + test06(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc new file mode 100644 index 000000000..3b13bdc28 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc @@ -0,0 +1,64 @@ +// { dg-require-namedlocale "de_DE" } +// { dg-require-namedlocale "de_DE@euro" } +// { dg-require-namedlocale "en_HK" } + +// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2005, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.4.1.1 collate members + +#include <testsuite_hooks.h> + +#define main discard_main_1 +#include "1.cc" +#undef main + +#define main discard_main_2 +#include "2.cc" +#undef main + +#define main discard_main_3 +#include "3.cc" +#undef main + +#define main discard_main_4 +#include "4.cc" +#undef main + +#define main discard_main_5 +#include "5.cc" +#undef main + +#define main discard_main_6 +#include "6.cc" +#undef main + +int main() +{ + using namespace __gnu_test; + func_callback two; + two.push_back(&test01); + two.push_back(&test02); + two.push_back(&test03); + two.push_back(&test04); + two.push_back(&test05); + two.push_back(&test06); + run_tests_wrapped_env("de_DE", "LANG", two); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc new file mode 100644 index 000000000..b160fb72a --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc @@ -0,0 +1,64 @@ +// { dg-require-namedlocale "ja_JP.eucjp" } +// { dg-require-namedlocale "de_DE@euro" } +// { dg-require-namedlocale "en_HK" } + +// 2001-08-15 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2002, 2003, 2005, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.4.1.1 collate members + +#include <testsuite_hooks.h> + +#define main discard_main_1 +#include "1.cc" +#undef main + +#define main discard_main_2 +#include "2.cc" +#undef main + +#define main discard_main_3 +#include "3.cc" +#undef main + +#define main discard_main_4 +#include "4.cc" +#undef main + +#define main discard_main_5 +#include "5.cc" +#undef main + +#define main discard_main_6 +#include "6.cc" +#undef main + +int main() +{ + using namespace __gnu_test; + func_callback two; + two.push_back(&test01); + two.push_back(&test02); + two.push_back(&test03); + two.push_back(&test04); + two.push_back(&test05); + two.push_back(&test06); + run_tests_wrapped_locale("ja_JP.eucjp", two); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/requirements/base_classes.cc b/libstdc++-v3/testsuite/22_locale/money_put/requirements/base_classes.cc new file mode 100644 index 000000000..b7e979c1c --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/requirements/base_classes.cc @@ -0,0 +1,32 @@ +// { dg-do compile } +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2 Template class money_put + +#include <locale> + +void test01() +{ + // Check for required base class. + typedef std::money_put<char> test_type; + typedef std::locale::facet base_type; + const test_type& obj = std::use_facet<test_type>(std::locale()); + const base_type* base __attribute__((unused)) = &obj; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_put/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/22_locale/money_put/requirements/explicit_instantiation.cc new file mode 100644 index 000000000..9c684587f --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/requirements/explicit_instantiation.cc @@ -0,0 +1,26 @@ +// { dg-do compile } +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2 Template class money_put + +#include <locale> + +// Should be able to instantiate this for other types besides char, wchar_t +template class std::money_put<unsigned char>; diff --git a/libstdc++-v3/testsuite/22_locale/money_put/requirements/typedefs.cc b/libstdc++-v3/testsuite/22_locale/money_put/requirements/typedefs.cc new file mode 100644 index 000000000..0ad705c0d --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_put/requirements/typedefs.cc @@ -0,0 +1,32 @@ +// { dg-do compile } +// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001, 2003, 2009 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 3, 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 COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.2 Template class money_put + +#include <locale> + +void test01() +{ + // Check for required typedefs + typedef std::money_put<char> test_type; + typedef test_type::char_type char_type; + typedef test_type::string_type string_type; + typedef test_type::iter_type iter_type; +} |