1// { dg-require-namedlocale "de_DE" } 2 3// 2005-04-08 Paolo Carlini <pcarlini@suse.de> 4 5// Copyright (C) 2005-2015 Free Software Foundation, Inc. 6// 7// This file is part of the GNU ISO C++ Library. This library is free 8// software; you can redistribute it and/or modify it under the 9// terms of the GNU General Public License as published by the 10// Free Software Foundation; either version 3, or (at your option) 11// any later version. 12 13// This library is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17 18// You should have received a copy of the GNU General Public License along 19// with this library; see the file COPYING3. If not see 20// <http://www.gnu.org/licenses/>. 21 22// 22.2.2.2.1 num_put members 23 24#include <locale> 25#include <sstream> 26#include <testsuite_hooks.h> 27 28// libstdc++/20909 29void test01() 30{ 31 using namespace std; 32 bool test __attribute__((unused)) = true; 33 34 // A locale that expects grouping. 35 locale loc_de = locale("de_DE"); 36 37 const string empty; 38 string result; 39 40 ostringstream oss; 41 oss.imbue(loc_de); 42 const num_put<char>& np = use_facet<num_put<char> >(oss.getloc()); 43 44 double d0 = 2e20; 45 double d1 = -2e20; 46 47 oss.str(empty); 48 oss.clear(); 49 np.put(oss.rdbuf(), oss, '*', d0); 50 result = oss.str(); 51 VERIFY( result == "2e+20" ); 52 53 oss.str(empty); 54 oss.clear(); 55 np.put(oss.rdbuf(), oss, '*', d1); 56 result = oss.str(); 57 VERIFY( result == "-2e+20" ); 58 59 oss.str(empty); 60 oss.clear(); 61 oss.setf(ios::uppercase); 62 np.put(oss.rdbuf(), oss, '*', d0); 63 result = oss.str(); 64 VERIFY( result == "2E+20" ); 65 66 oss.str(empty); 67 oss.clear(); 68 oss.setf(ios::showpos); 69 np.put(oss.rdbuf(), oss, '*', d0); 70 result = oss.str(); 71 VERIFY( result == "+2E+20" ); 72} 73 74int main() 75{ 76 test01(); 77 return 0; 78} 79 80 81