1// Copyright (C) 2003, 2004 2// Free Software Foundation, Inc. 3// 4// This file is part of the GNU ISO C++ Library. This library is free 5// software; you can redistribute it and/or modify it under the 6// terms of the GNU General Public License as published by the 7// Free Software Foundation; either version 2, or (at your option) 8// any later version. 9 10// This library is distributed in the hope that it will be useful, 11// but WITHOUT ANY WARRANTY; without even the implied warranty of 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13// GNU General Public License for more details. 14 15// You should have received a copy of the GNU General Public License along 16// with this library; see the file COPYING. If not, write to the Free 17// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 18// USA. 19 20// As a special exception, you may use this file as part of a free software 21// library without restriction. Specifically, if other files instantiate 22// templates or use macros or inline functions from this file, or you compile 23// this file and link it with other files to produce an executable, this 24// file does not by itself cause the resulting executable to be covered by 25// the GNU General Public License. This exception does not however 26// invalidate any other reasons why the executable file might be covered by 27// the GNU General Public License. 28 29#include <sstream> 30#include <testsuite_hooks.h> 31#include <testsuite_io.h> 32 33// libstdc++/10093 34template<typename T> 35void test_failbit() 36{ 37 using namespace std; 38 bool test __attribute__((unused)) = true; 39 40 locale loc(locale::classic(), new __gnu_test::fail_num_put_char); 41 ostringstream stream("jaylib - champion sound"); 42 stream.imbue(loc); 43 44 stream.exceptions(ios_base::failbit); 45 46 try 47 { 48 T i = T(); 49 stream << i; 50 } 51 catch (const ios_base::failure&) 52 { VERIFY( false ); } 53 catch(...) 54 { VERIFY( false ); } 55 56 // stream should set badbit. 57 VERIFY( stream.bad() ); 58 VERIFY( (stream.rdstate() & ios_base::failbit) == 0 ); 59 VERIFY( !stream.eof() ); 60} 61 62int main() 63{ 64 test_failbit<bool>(); 65 test_failbit<short>(); 66 test_failbit<unsigned short>(); 67 test_failbit<int>(); 68 test_failbit<unsigned int>(); 69 test_failbit<long>(); 70 test_failbit<unsigned long>(); 71 72 test_failbit<float>(); 73 test_failbit<double>(); 74 75 return 0; 76} 77