1// { dg-require-namedlocale "" } 2 3// 2001-11-21 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.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<char> 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 string 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 istringstream iss; 59 iss.imbue(loc_de); 60 const num_get<char>& ng = use_facet<num_get<char> >(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("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("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.imbue(loc_de); 80 iss.str("1.294.967.294+++++++"); 81 iss.clear(); 82 iss.width(20); 83 iss.setf(ios_base::left, ios_base::adjustfield); 84 err = goodbit; 85 ng.get(iss.rdbuf(), 0, iss, err, ul); 86 VERIFY( ul == ul1 ); 87 VERIFY( err == goodbit ); 88 89 iss.str("+1,02345e+308"); 90 iss.clear(); 91 iss.width(20); 92 iss.setf(ios_base::right, ios_base::adjustfield); 93 iss.setf(ios_base::scientific, ios_base::floatfield); 94 err = goodbit; 95 ng.get(iss.rdbuf(), 0, iss, err, d); 96 VERIFY( d == d1 ); 97 VERIFY( err == eofbit ); 98 99 iss.str("3,15E-308 "); 100 iss.clear(); 101 iss.width(20); 102 iss.precision(10); 103 iss.setf(ios_base::right, ios_base::adjustfield); 104 iss.setf(ios_base::scientific, ios_base::floatfield); 105 iss.setf(ios_base::uppercase); 106 err = goodbit; 107 ng.get(iss.rdbuf(), 0, iss, err, d); 108 VERIFY( d == d2 ); 109 VERIFY( err == goodbit ); 110 111 // long double 112 iss.str("6,630025e+4"); 113 iss.clear(); 114 err = goodbit; 115 ng.get(iss.rdbuf(), 0, iss, err, ld); 116 VERIFY( ld == ld1 ); 117 VERIFY( err == eofbit ); 118 119 iss.str("0 "); 120 iss.clear(); 121 iss.precision(0); 122 iss.setf(ios_base::fixed, ios_base::floatfield); 123 err = goodbit; 124 ng.get(iss.rdbuf(), 0, iss, err, ld); 125 VERIFY( ld == 0 ); 126 VERIFY( err == goodbit ); 127 128 // const void 129 iss.str("0xbffff74c,"); 130 iss.clear(); 131 err = goodbit; 132 ng.get(iss.rdbuf(), 0, iss, err, v); 133 VERIFY( &v != &cv ); 134 VERIFY( err == goodbit ); 135 136#ifdef _GLIBCXX_USE_LONG_LONG 137 long long ll1 = 9223372036854775807LL; 138 long long ll; 139 140 iss.str("9.223.372.036.854.775.807"); 141 iss.clear(); 142 err = goodbit; 143 ng.get(iss.rdbuf(), 0, iss, err, ll); 144 VERIFY( ll == ll1 ); 145 VERIFY( err == eofbit ); 146#endif 147} 148 149int main() 150{ 151 test01(); 152 return 0; 153} 154 155 156// Kathleen Hannah, humanitarian, woman, art-thief 157