1// { dg-require-namedlocale "" } 2 3// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com> 4 5// Copyright (C) 2001, 2002, 2003, 2004 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.2.1.1 num_get members 24 25#include <locale> 26#include <sstream> 27#include <testsuite_hooks.h> 28 29void test01() 30{ 31 using namespace std; 32 typedef istreambuf_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_de = locale("de_DE"); 39 VERIFY( loc_c != loc_de ); 40 41 // sanity check the data is correct. 42 const wstring empty; 43 44 bool b1 = true; 45 bool b0 = false; 46 unsigned long ul1 = 1294967294; 47 unsigned long ul2 = 0; 48 unsigned long ul; 49 double d1 = 1.02345e+308; 50 double d2 = 3.15e-308; 51 double d; 52 long double ld1 = 6.630025e+4; 53 long double ld; 54 void* v; 55 const void* cv = &ul2; 56 57 // cache the num_get facet 58 wistringstream iss; 59 iss.imbue(loc_de); 60 const num_get<wchar_t>& ng = use_facet<num_get<wchar_t> >(iss.getloc()); 61 const ios_base::iostate goodbit = ios_base::goodbit; 62 const ios_base::iostate eofbit = ios_base::eofbit; 63 ios_base::iostate err = ios_base::goodbit; 64 65 // bool, simple 66 iss.str(L"1"); 67 iterator_type os_it00 = iss.rdbuf(); 68 iterator_type os_it01 = ng.get(os_it00, 0, iss, err, b1); 69 VERIFY( b1 == true ); 70 VERIFY( err & ios_base::eofbit ); 71 72 iss.str(L"0"); 73 err = goodbit; 74 ng.get(iss.rdbuf(), 0, iss, err, b0); 75 VERIFY( b0 == false ); 76 VERIFY( err & eofbit ); 77 78 // ... and one that does 79 iss.str(L"1.294.967.294+++++++"); 80 iss.clear(); 81 iss.width(20); 82 iss.setf(ios_base::left, ios_base::adjustfield); 83 err = goodbit; 84 ng.get(iss.rdbuf(), 0, iss, err, ul); 85 VERIFY( ul == ul1 ); 86 VERIFY( err == goodbit ); 87 88 iss.str(L"+1,02345e+308"); 89 iss.clear(); 90 iss.width(20); 91 iss.setf(ios_base::right, ios_base::adjustfield); 92 iss.setf(ios_base::scientific, ios_base::floatfield); 93 err = goodbit; 94 ng.get(iss.rdbuf(), 0, iss, err, d); 95 VERIFY( d == d1 ); 96 VERIFY( err == eofbit ); 97 98 iss.str(L"3,15E-308 "); 99 iss.clear(); 100 iss.width(20); 101 iss.precision(10); 102 iss.setf(ios_base::right, ios_base::adjustfield); 103 iss.setf(ios_base::scientific, ios_base::floatfield); 104 iss.setf(ios_base::uppercase); 105 err = goodbit; 106 ng.get(iss.rdbuf(), 0, iss, err, d); 107 VERIFY( d == d2 ); 108 VERIFY( err == goodbit ); 109 110 // long double 111 iss.str(L"6,630025e+4"); 112 iss.clear(); 113 err = goodbit; 114 ng.get(iss.rdbuf(), 0, iss, err, ld); 115 VERIFY( ld == ld1 ); 116 VERIFY( err == eofbit ); 117 118 iss.str(L"0 "); 119 iss.clear(); 120 iss.precision(0); 121 iss.setf(ios_base::fixed, ios_base::floatfield); 122 err = goodbit; 123 ng.get(iss.rdbuf(), 0, iss, err, ld); 124 VERIFY( ld == 0 ); 125 VERIFY( err == goodbit ); 126 127 // const void 128 iss.str(L"0xbffff74c,"); 129 iss.clear(); 130 err = goodbit; 131 ng.get(iss.rdbuf(), 0, iss, err, v); 132 VERIFY( &v != &cv ); 133 VERIFY( err == goodbit ); 134 135#ifdef _GLIBCXX_USE_LONG_LONG 136 long long ll1 = 9223372036854775807LL; 137 long long ll; 138 139 iss.str(L"9.223.372.036.854.775.807"); 140 iss.clear(); 141 err = goodbit; 142 ng.get(iss.rdbuf(), 0, iss, err, ll); 143 VERIFY( ll == ll1 ); 144 VERIFY( err == eofbit ); 145#endif 146} 147 148int main() 149{ 150 test01(); 151 return 0; 152} 153 154 155// Kathleen Hannah, humanitarian, woman, art-thief 156