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