1// 1999-08-16 bkoz 2// 1999-11-01 bkoz 3 4// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2009 Free Software Foundation 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20 21// 27.6.2.5.4 basic_ostream character inserters 22// @require@ %-*.tst %-*.txt 23// @diff@ %-*.tst %-*.txt 24 25// { dg-require-fileio "" } 26 27#include <ostream> 28#include <sstream> 29#include <fstream> 30#include <testsuite_hooks.h> 31 32const int size = 1000; 33const char name_01[] = "ostream_inserter_other-1.tst"; 34const char name_02[] = "ostream_inserter_other-1.txt"; 35const char name_03[] = "ostream_inserter_other-2.tst"; 36const char name_04[] = "ostream_inserter_other-2.txt"; 37 38// fstream 39void 40test02() 41{ 42 typedef std::ios_base::iostate iostate; 43 bool test __attribute__((unused)) = true; 44 45 // basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sb) 46 // filebuf-> NULL 47 std::ifstream f_in1(name_01); 48 std::ofstream f_out1(name_02); 49 std::stringbuf* strbuf01 = NULL; 50 iostate state01 = f_in1.rdstate(); 51 f_in1 >> strbuf01; 52 iostate state02 = f_in1.rdstate(); 53 VERIFY( state01 != state02 ); 54 VERIFY( (state02 & std::ios_base::failbit) != 0 ); 55 state01 = f_out1.rdstate(); 56 f_out1 << strbuf01; 57 state02 = f_out1.rdstate(); 58 VERIFY( state01 != state02 ); 59 VERIFY( (state02 & std::ios_base::badbit) != 0 ); 60 61 // filebuf->filebuf 62 std::ifstream f_in(name_01); 63 std::ofstream f_out(name_02); 64 f_out << f_in.rdbuf(); 65 f_in.close(); 66 f_out.close(); 67 68 // filebuf->stringbuf->filebuf 69 std::ifstream f_in2(name_03); 70 std::ofstream f_out2(name_04); // should be different name 71 std::stringbuf strbuf02; 72 f_in2 >> &strbuf02; 73 f_out2 << &strbuf02; 74 f_in2.close(); 75 f_out2.close(); 76} 77 78int 79main() 80{ 81 test02(); 82 return 0; 83} 84