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 wstring version 29void test02() 30{ 31 using namespace std; 32 typedef ostreambuf_iterator<wchar_t> 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 wstring empty; 43 44 // total EPA budget FY 2002 45 const wstring digits1(L"720000000000"); 46 47 // est. cost, national missile "defense", expressed as a loss in USD 2001 48 const wstring digits2(L"-10000000000000"); 49 50 // not valid input 51 const wstring digits3(L"-A"); 52 53 // input less than frac_digits 54 const wstring digits4(L"-1"); 55 56 // cache the money_put facet 57 wostringstream oss; 58 oss.imbue(loc_hk); 59 const money_put<wchar_t>& mon_put = 60 use_facet<money_put<wchar_t> >(oss.getloc()); 61 62 // now try with showbase, to get currency symbol in format 63 oss.setf(ios_base::showbase); 64 65 // test sign of more than one digit, say hong kong. 66 oss.str(empty); 67 mon_put.put(oss.rdbuf(), false, oss, L' ', digits1); 68 wstring result5 = oss.str(); 69 VERIFY( result5 == L"HK$7,200,000,000.00" ); 70 71 oss.str(empty); 72 mon_put.put(oss.rdbuf(), true, oss, L' ', digits2); 73 wstring result6 = oss.str(); 74 VERIFY( result6 == L"(HKD 100,000,000,000.00)" ); 75 76 // test one-digit formats without zero padding 77 oss.imbue(loc_c); 78 oss.str(empty); 79 const money_put<wchar_t>& mon_put2 = 80 use_facet<money_put<wchar_t> >(oss.getloc()); 81 mon_put2.put(oss.rdbuf(), true, oss, L' ', digits4); 82 wstring result7 = oss.str(); 83 VERIFY( result7 == L"1" ); 84 85 // test one-digit formats with zero padding, zero frac widths 86 oss.imbue(loc_hk); 87 oss.str(empty); 88 const money_put<wchar_t>& mon_put3 = 89 use_facet<money_put<wchar_t> >(oss.getloc()); 90 mon_put3.put(oss.rdbuf(), true, oss, L' ', digits4); 91 wstring result8 = oss.str(); 92 VERIFY( result8 == L"(HKD .01)" ); 93 94 oss.unsetf(ios_base::showbase); 95 96 // test bunk input 97 oss.str(empty); 98 mon_put.put(oss.rdbuf(), true, oss, L' ', digits3); 99 wstring result9 = oss.str(); 100 VERIFY( result9 == L"" ); 101} 102 103int main() 104{ 105 test02(); 106 return 0; 107} 108