1// 2005-09-30 Paolo Carlini <pcarlini@suse.de> 2 3// Copyright (C) 2005 Free Software Foundation 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// 22.2.2.2.1 num_put members 22 23#include <locale> 24#include <sstream> 25#include <testsuite_hooks.h> 26 27using namespace std; 28 29struct Punct1: numpunct<wchar_t> 30{ string do_grouping() const { return string(1, char(-1)); } }; 31 32struct Punct2: numpunct<wchar_t> 33{ string do_grouping() const { return string("\002") + char(-1); } }; 34 35struct Punct3: numpunct<wchar_t> 36{ string do_grouping() const { return string("\001\002") + char(-1); } }; 37 38// libstdc++/23953 39void test01() 40{ 41 bool test __attribute__((unused)) = true; 42 43 wostringstream oss1, oss2, oss3; 44 wstring result1, result2, result3; 45 46 oss1.imbue(locale(oss1.getloc(), new Punct1)); 47 oss2.imbue(locale(oss2.getloc(), new Punct2)); 48 oss3.imbue(locale(oss3.getloc(), new Punct3)); 49 const num_put<wchar_t>& ng1 = use_facet<num_put<wchar_t> >(oss1.getloc()); 50 const num_put<wchar_t>& ng2 = use_facet<num_put<wchar_t> >(oss2.getloc()); 51 const num_put<wchar_t>& ng3 = use_facet<num_put<wchar_t> >(oss3.getloc()); 52 53 long l1 = 12345l; 54 long l2 = 12345678l; 55 double d1 = 1234567.0; 56 57 ng1.put(oss1.rdbuf(), oss1, L'+', l1); 58 result1 = oss1.str(); 59 VERIFY( result1 == L"12345" ); 60 61 ng2.put(oss2.rdbuf(), oss2, L'+', l2); 62 result2 = oss2.str(); 63 VERIFY( result2 == L"123456,78" ); 64 65 oss3.precision(1); 66 oss3.setf(ios_base::fixed, ios_base::floatfield); 67 ng3.put(oss3.rdbuf(), oss3, L'+', d1); 68 result3 = oss3.str(); 69 VERIFY( result3 == L"1234,56,7.0" ); 70} 71 72int main() 73{ 74 test01(); 75 return 0; 76} 77