1// 2001-06-05 Benjamin Kosnik  <bkoz@redhat.com>
2
3// Copyright (C) 2001, 2002, 2003 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 2, 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 COPYING.  If not, write to the Free
18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19// USA.
20
21// As a special exception, you may use this file as part of a free software
22// library without restriction.  Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License.  This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
29
30#include <fstream>
31#include <iostream>
32#include <testsuite_hooks.h>
33
34class gnu_filebuf: public std::filebuf
35{
36  int i;
37public:
38  gnu_filebuf(int j = 1): i(j) { }
39  ~gnu_filebuf() { --i; }
40  int get_i() { return i;}
41};
42
43const int initial = 4;
44gnu_filebuf buf(initial);
45
46// libstdc++/3045, in a vague way.
47void test01()
48{
49  bool test __attribute__((unused)) = true;
50  int k1;
51
52  // 1 normal
53  k1 = buf.get_i();
54  VERIFY( k1 == initial );
55  {
56    std::cout.rdbuf(&buf);
57  }
58  k1 = buf.get_i();
59  VERIFY( k1 == initial );
60
61  // 2 syncd off
62  k1 = buf.get_i();
63  VERIFY( k1 == initial );
64  {
65    std::cout.rdbuf(&buf);
66    std::ios_base::sync_with_stdio(false); // make sure doesn't clobber buf
67  }
68  k1 = buf.get_i();
69  VERIFY( k1 == initial );
70
71  // 3 callling init
72  k1 = buf.get_i();
73  VERIFY( k1 == initial );
74  {
75    std::cout.rdbuf(&buf);
76    std::ios_base::Init make_sure_initialized;
77  }
78  k1 = buf.get_i();
79  VERIFY( k1 == initial );
80}
81
82int main()
83{
84  test01();
85  return 0;
86}
87