1 // 1999-08-16 bkoz 2 // 1999-11-01 bkoz 3 4 // Copyright (C) 1999-2018 Free Software Foundation, Inc. 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 32 const int size = 1000; 33 const char name_01[] = "ostream_inserter_other-1.tst"; 34 const char name_02[] = "ostream_inserter_other-1.txt"; 35 const char name_03[] = "ostream_inserter_other-2.tst"; 36 const char name_04[] = "ostream_inserter_other-2.txt"; 37 38 // fstream 39 void test02()40test02() 41 { 42 typedef std::ios_base::iostate iostate; 43 44 // basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sb) 45 // filebuf-> NULL 46 std::ifstream f_in1(name_01); 47 std::ofstream f_out1(name_02); 48 std::stringbuf* strbuf01 = 0; 49 iostate state01 = f_in1.rdstate(); 50 f_in1 >> strbuf01; 51 iostate state02 = f_in1.rdstate(); 52 VERIFY( state01 != state02 ); 53 VERIFY( (state02 & std::ios_base::failbit) != 0 ); 54 state01 = f_out1.rdstate(); 55 f_out1 << strbuf01; 56 state02 = f_out1.rdstate(); 57 VERIFY( state01 != state02 ); 58 VERIFY( (state02 & std::ios_base::badbit) != 0 ); 59 60 // filebuf->filebuf 61 std::ifstream f_in(name_01); 62 std::ofstream f_out(name_02); 63 f_out << f_in.rdbuf(); 64 f_in.close(); 65 f_out.close(); 66 67 // filebuf->stringbuf->filebuf 68 std::ifstream f_in2(name_03); 69 std::ofstream f_out2(name_04); // should be different name 70 std::stringbuf strbuf02; 71 f_in2 >> &strbuf02; 72 f_out2 << &strbuf02; 73 f_in2.close(); 74 f_out2.close(); 75 } 76 77 int main()78main() 79 { 80 test02(); 81 return 0; 82 } 83