1// { dg-require-namedlocale "en_HK" } 2 3// 2001-08-27 Benjamin Kosnik <bkoz@redhat.com> 4 5// Copyright (C) 2001-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.6.2.1 money_put members 23 24#include <locale> 25#include <sstream> 26#include <testsuite_hooks.h> 27 28// test string version 29void test02() 30{ 31 using namespace std; 32 typedef ostreambuf_iterator<char> iterator_type; 33 34 bool test __attribute__((unused)) = true; 35 36 // basic construction 37 locale loc_c = locale::classic(); 38 locale loc_hk = locale("en_HK"); 39 VERIFY( loc_c != loc_hk ); 40 41 // sanity check the data is correct. 42 const string empty; 43 44 // total EPA budget FY 2002 45 const string digits1("720000000000"); 46 47 // est. cost, national missile "defense", expressed as a loss in USD 2001 48 const string digits2("-10000000000000"); 49 50 // not valid input 51 const string digits3("-A"); 52 53 // input less than frac_digits 54 const string digits4("-1"); 55 56 // cache the money_put facet 57 ostringstream oss; 58 oss.imbue(loc_hk); 59 const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc()); 60 61 // now try with showbase, to get currency symbol in format 62 oss.setf(ios_base::showbase); 63 64 // test sign of more than one digit, say hong kong. 65 oss.str(empty); 66 mon_put.put(oss.rdbuf(), false, oss, ' ', digits1); 67 string result5 = oss.str(); 68 VERIFY( result5 == "HK$7,200,000,000.00"); 69 70 oss.str(empty); 71 mon_put.put(oss.rdbuf(), true, oss, ' ', digits2); 72 string result6 = oss.str(); 73 VERIFY( result6 == "(HKD 100,000,000,000.00)"); 74 75 // test one-digit formats without zero padding 76 oss.imbue(loc_c); 77 oss.str(empty); 78 const money_put<char>& mon_put2 = use_facet<money_put<char> >(oss.getloc()); 79 mon_put2.put(oss.rdbuf(), true, oss, ' ', digits4); 80 string result7 = oss.str(); 81 VERIFY( result7 == "1"); 82 83 // test one-digit formats with zero padding, zero frac widths 84 oss.imbue(loc_hk); 85 oss.str(empty); 86 const money_put<char>& mon_put3 = use_facet<money_put<char> >(oss.getloc()); 87 mon_put3.put(oss.rdbuf(), true, oss, ' ', digits4); 88 string result8 = oss.str(); 89 VERIFY( result8 == "(HKD .01)"); 90 91 oss.unsetf(ios_base::showbase); 92 93 // test bunk input 94 oss.str(empty); 95 mon_put.put(oss.rdbuf(), true, oss, ' ', digits3); 96 string result9 = oss.str(); 97 VERIFY( result9 == ""); 98} 99 100int main() 101{ 102 test02(); 103 return 0; 104} 105