1// { dg-require-namedlocale "" } 2 3// 2001-09-12 Benjamin Kosnik <bkoz@redhat.com> 4 5// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation 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 2, 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 COPYING. If not, write to the Free 20// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 21// USA. 22 23// 22.2.6.1.1 money_get members 24 25#include <locale> 26#include <sstream> 27#include <testsuite_hooks.h> 28 29// test string version 30void test01() 31{ 32 using namespace std; 33 typedef istreambuf_iterator<char> iterator_type; 34 35 bool test __attribute__((unused)) = true; 36 37 // basic construction 38 locale loc_c = locale::classic(); 39 locale loc_de = locale("de_DE@euro"); 40 VERIFY( loc_c != loc_de ); 41 42 // sanity check the data is correct. 43 const string empty; 44 45 // total EPA budget FY 2002 46 const string digits1("720000000000"); 47 48 iterator_type end; 49 istringstream iss; 50 iss.imbue(loc_de); 51 // cache the money_get facet 52 const money_get<char>& mon_get = use_facet<money_get<char> >(iss.getloc()); 53 54 iss.str("7.200.000.000,00 "); 55 iterator_type is_it01(iss); 56 string result1; 57 ios_base::iostate err01 = ios_base::goodbit; 58 mon_get.get(is_it01, end, true, iss, err01, result1); // xxx 59 VERIFY( result1 == digits1 ); 60 VERIFY( err01 == ios_base::eofbit ); 61 62 iss.str("7.200.000.000,00 "); 63 iterator_type is_it02(iss); 64 string result2; 65 ios_base::iostate err02 = ios_base::goodbit; 66 mon_get.get(is_it02, end, true, iss, err02, result2); 67 VERIFY( result2 == digits1 ); 68 VERIFY( err02 == ios_base::eofbit ); 69 70 iss.str("7.200.000.000,00 a"); 71 iterator_type is_it03(iss); 72 string result3; 73 ios_base::iostate err03 = ios_base::goodbit; 74 mon_get.get(is_it03, end, true, iss, err03, result3); 75 VERIFY( result3 == digits1 ); 76 VERIFY( err03 == ios_base::goodbit ); 77 78 iss.str(""); 79 iterator_type is_it04(iss); 80 string result4; 81 ios_base::iostate err04 = ios_base::goodbit; 82 mon_get.get(is_it04, end, true, iss, err04, result4); 83 VERIFY( result4 == empty ); 84 VERIFY( err04 == (ios_base::failbit | ios_base::eofbit) ); 85 86 iss.str("working for enlightenment and peace in a mad world"); 87 iterator_type is_it05(iss); 88 string result5; 89 ios_base::iostate err05 = ios_base::goodbit; 90 mon_get.get(is_it05, end, true, iss, err05, result5); 91 VERIFY( result5 == empty ); 92 VERIFY( err05 == ios_base::failbit ); 93 94 // now try with showbase, to get currency symbol in format 95 iss.setf(ios_base::showbase); 96 97 iss.str("7.200.000.000,00 EUR "); 98 iterator_type is_it06(iss); 99 string result6; 100 ios_base::iostate err06 = ios_base::goodbit; 101 mon_get.get(is_it06, end, true, iss, err06, result6); 102 VERIFY( result6 == digits1 ); 103 VERIFY( err06 == ios_base::eofbit ); 104 105 iss.str("7.200.000.000,00 EUR "); // Extra space. 106 iterator_type is_it07(iss); 107 string result7; 108 ios_base::iostate err07 = ios_base::goodbit; 109 mon_get.get(is_it07, end, true, iss, err07, result7); 110 VERIFY( result7 == digits1 ); 111 VERIFY( err07 == ios_base::goodbit ); 112 113 iss.str("7.200.000.000,00 \244"); 114 iterator_type is_it08(iss); 115 string result8; 116 ios_base::iostate err08 = ios_base::goodbit; 117 mon_get.get(is_it08, end, false, iss, err08, result8); 118 VERIFY( result8 == digits1 ); 119 VERIFY( err08 == ios_base::eofbit ); 120} 121 122int main() 123{ 124 test01(); 125 return 0; 126} 127