1// 2003-12-19 Paolo Carlini <pcarlini@suse.de> 2 3// Copyright (C) 2003-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 22.2.2.1.1 num_get members 21 22#include <locale> 23#include <sstream> 24#include <testsuite_hooks.h> 25 26void test01() 27{ 28 using namespace std; 29 typedef istreambuf_iterator<wchar_t> iterator_type; 30 31 bool test __attribute__((unused)) = true; 32 33 wistringstream iss; 34 const num_get<wchar_t>& ng = use_facet<num_get<wchar_t> >(iss.getloc()); 35 ios_base::iostate err = ios_base::goodbit; 36 iterator_type end; 37 float f = 1.0f; 38 double d = 1.0; 39 long double ld = 1.0l; 40 41 iss.str(L"1e."); 42 err = ios_base::goodbit; 43 end = ng.get(iss.rdbuf(), 0, iss, err, f); 44 VERIFY( err == ios_base::failbit ); 45 VERIFY( *end == L'.' ); 46 VERIFY( f == 0.0f ); 47 48 iss.str(L"3e+"); 49 iss.clear(); 50 err = ios_base::goodbit; 51 end = ng.get(iss.rdbuf(), 0, iss, err, d); 52 VERIFY( err == (ios_base::failbit | ios_base::eofbit) ); 53 VERIFY( d == 0.0 ); 54 55 iss.str(L"6e "); 56 iss.clear(); 57 err = ios_base::goodbit; 58 end = ng.get(iss.rdbuf(), 0, iss, err, ld); 59 VERIFY( *end == L' ' ); 60 61 // libstdc++/37624. We can't always obtain the required behavior 62 // when sscanf is involved, because of, e.g., glibc/1765. 63#if defined(_GLIBCXX_HAVE_STRTOLD) && !defined(_GLIBCXX_HAVE_BROKEN_STRTOLD) 64 VERIFY( err == ios_base::failbit ); 65 VERIFY( ld == 0.0l ); 66#endif 67} 68 69int main() 70{ 71 test01(); 72 return 0; 73} 74