diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-12-05 18:23:39 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-12-05 18:23:39 +0000 |
commit | 015daa3a7bc6deaa1aa9004e968564a50f76b9e6 (patch) | |
tree | 0e60e96ae364a94b0ae3e40ab4d61a9023b3b565 /libstdc++-v3/testsuite/22_locale | |
parent | 2503f730c938835a044ffe7594ce814a1fb627ad (diff) | |
download | gcc-015daa3a7bc6deaa1aa9004e968564a50f76b9e6.zip gcc-015daa3a7bc6deaa1aa9004e968564a50f76b9e6.tar.gz gcc-015daa3a7bc6deaa1aa9004e968564a50f76b9e6.tar.bz2 |
re PR libstdc++/38399 (money_get<> read decimal point when frac_digits() <= 0)
2008-12-05 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/38399
* include/bits/locale_facets_nonio.tcc (money_get<>::
_M_extract(iter_type, iter_type, ios_base&, ios_base::iostate&,
string&)): Fix, reject decimal point when frac_digits <= 0.
* testsuite/22_locale/money_get/get/char/38399.cc: New.
* testsuite/22_locale/money_get/get/wchar_t/38399.cc: Likewise.
* testsuite/22_locale/money_get/get/char/5.cc: Adjust.
* testsuite/22_locale/money_get/get/wchar_t/5.cc: Likewise.
From-SVN: r142487
Diffstat (limited to 'libstdc++-v3/testsuite/22_locale')
4 files changed, 116 insertions, 4 deletions
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/38399.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/38399.cc new file mode 100644 index 0000000..3283f34 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/38399.cc @@ -0,0 +1,55 @@ +// Copyright (C) 2008 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// 22.2.6.1.1 money_get members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +class my_moneypunct : public std::moneypunct<char> +{ +protected: + //this should disable fraction part of monetary value + int do_frac_digits() const { return 0; } +}; + +// libstdc++/38399 +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + locale loc(locale(), new my_moneypunct()); + stringstream ss("123.455"); + ss.imbue(loc); + string digits; + ios_base::iostate err; + istreambuf_iterator<char> iter = + use_facet<money_get<char> >(loc).get(ss, 0, false, ss, err, digits); + + string rest = string(iter, istreambuf_iterator<char>()); + VERIFY( digits == "123" ); + VERIFY( rest == ".455" ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc index b1d735b..9c6cb1d 100644 --- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc +++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc @@ -1,6 +1,7 @@ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com> -// Copyright (C) 2001, 2002, 2003 Free Software Foundation +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +// 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 @@ -36,7 +37,7 @@ void test05() const ios_base::iostate goodbit = ios_base::goodbit; ios_base::iostate err = goodbit; const locale loc_c = locale::classic(); - const string str = "0.01Eleanor Roosevelt"; + const string str = "1Eleanor Roosevelt"; istringstream iss; iss.imbue(locale(loc_c, new mon_get_type)); diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/38399.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/38399.cc new file mode 100644 index 0000000..bca8ab0 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/38399.cc @@ -0,0 +1,55 @@ +// Copyright (C) 2008 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// 22.2.6.1.1 money_get members + +#include <locale> +#include <sstream> +#include <testsuite_hooks.h> + +class my_moneypunct : public std::moneypunct<wchar_t> +{ +protected: + //this should disable fraction part of monetary value + int do_frac_digits() const { return 0; } +}; + +// libstdc++/38399 +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + locale loc(locale(), new my_moneypunct()); + wstringstream ss(L"123.455"); + ss.imbue(loc); + wstring digits; + ios_base::iostate err; + istreambuf_iterator<wchar_t> iter = + use_facet<money_get<wchar_t> >(loc).get(ss, 0, false, ss, err, digits); + + wstring rest = wstring(iter, istreambuf_iterator<wchar_t>()); + VERIFY( digits == L"123" ); + VERIFY( rest == L".455" ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc index 70c3cec..afbd1ec 100644 --- a/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc +++ b/libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc @@ -1,6 +1,7 @@ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com> -// Copyright (C) 2001, 2002, 2003 Free Software Foundation +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +// 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 @@ -36,7 +37,7 @@ void test05() const ios_base::iostate goodbit = ios_base::goodbit; ios_base::iostate err = goodbit; const locale loc_c = locale::classic(); - const wstring str = L"0.01Eleanor Roosevelt"; + const wstring str = L"1Eleanor Roosevelt"; wistringstream iss; iss.imbue(locale(loc_c, new mon_get_type)); |