1// { dg-require-namedlocale "" } 2 3// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com> 4 5// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 6// Free Software Foundation 7// 8// This file is part of the GNU ISO C++ Library. This library is free 9// software; you can redistribute it and/or modify it under the 10// terms of the GNU General Public License as published by the 11// Free Software Foundation; either version 3, or (at your option) 12// any later version. 13 14// This library is distributed in the hope that it will be useful, 15// but WITHOUT ANY WARRANTY; without even the implied warranty of 16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17// GNU General Public License for more details. 18 19// You should have received a copy of the GNU General Public License along 20// with this library; see the file COPYING3. If not see 21// <http://www.gnu.org/licenses/>. 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 ul; 48 double d1 = 1.02345e+308; 49 double d2 = 3.15e-308; 50 double d; 51 long double ld1 = 6.630025e+4; 52 long double ld; 53 void* v = 0; 54 55 // cache the num_get facet 56 istringstream iss; 57 iss.imbue(loc_de); 58 const num_get<char>& ng = use_facet<num_get<char> >(iss.getloc()); 59 const ios_base::iostate goodbit = ios_base::goodbit; 60 const ios_base::iostate eofbit = ios_base::eofbit; 61 ios_base::iostate err = ios_base::goodbit; 62 63 // bool, simple 64 iss.str("1"); 65 iterator_type os_it00 = iss.rdbuf(); 66 iterator_type os_it01 = ng.get(os_it00, 0, iss, err, b1); 67 VERIFY( b1 == true ); 68 VERIFY( err & ios_base::eofbit ); 69 70 iss.str("0"); 71 err = goodbit; 72 ng.get(iss.rdbuf(), 0, iss, err, b0); 73 VERIFY( b0 == false ); 74 VERIFY( err & eofbit ); 75 76 // ... and one that does 77 iss.imbue(loc_de); 78 iss.str("1.294.967.294+++++++"); 79 iss.clear(); 80 iss.width(20); 81 iss.setf(ios_base::left, ios_base::adjustfield); 82 err = goodbit; 83 ng.get(iss.rdbuf(), 0, iss, err, ul); 84 VERIFY( ul == ul1 ); 85 VERIFY( err == goodbit ); 86 87 iss.str("+1,02345e+308"); 88 iss.clear(); 89 iss.width(20); 90 iss.setf(ios_base::right, ios_base::adjustfield); 91 iss.setf(ios_base::scientific, ios_base::floatfield); 92 err = goodbit; 93 ng.get(iss.rdbuf(), 0, iss, err, d); 94 VERIFY( d == d1 ); 95 VERIFY( err == eofbit ); 96 97 iss.str("3,15E-308 "); 98 iss.clear(); 99 iss.width(20); 100 iss.precision(10); 101 iss.setf(ios_base::right, ios_base::adjustfield); 102 iss.setf(ios_base::scientific, ios_base::floatfield); 103 iss.setf(ios_base::uppercase); 104 err = goodbit; 105 ng.get(iss.rdbuf(), 0, iss, err, d); 106 VERIFY( d == d2 ); 107 VERIFY( err == goodbit ); 108 109 // long double 110 iss.str("6,630025e+4"); 111 iss.clear(); 112 err = goodbit; 113 ng.get(iss.rdbuf(), 0, iss, err, ld); 114 VERIFY( ld == ld1 ); 115 VERIFY( err == eofbit ); 116 117 iss.str("0 "); 118 iss.clear(); 119 iss.precision(0); 120 iss.setf(ios_base::fixed, ios_base::floatfield); 121 err = goodbit; 122 ng.get(iss.rdbuf(), 0, iss, err, ld); 123 VERIFY( ld == 0 ); 124 VERIFY( err == goodbit ); 125 126 // void* 127 iss.str("0xbffff74c,"); 128 iss.clear(); 129 err = goodbit; 130 ng.get(iss.rdbuf(), 0, iss, err, v); 131 VERIFY( v != 0 ); 132 VERIFY( err == goodbit ); 133 134#ifdef _GLIBCXX_USE_LONG_LONG 135 long long ll1 = 9223372036854775807LL; 136 long long ll; 137 138 iss.str("9.223.372.036.854.775.807"); 139 iss.clear(); 140 err = goodbit; 141 ng.get(iss.rdbuf(), 0, iss, err, ll); 142 VERIFY( ll == ll1 ); 143 VERIFY( err == eofbit ); 144#endif 145} 146 147int main() 148{ 149 test01(); 150 return 0; 151} 152 153 154// Kathleen Hannah, humanitarian, woman, art-thief 155