]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/5.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / basic_filebuf / close / char / 5.cc
CommitLineData
80416931
PC
1// 2003-05-20 Paolo Carlini <pcarlini@unitus.it>
2
99dee823 3// Copyright (C) 2003-2021 Free Software Foundation, Inc.
80416931
PC
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
748086b7 8// Free Software Foundation; either version 3, or (at your option)
80416931
PC
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
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
80416931
PC
19
20// 27.8.1.3 filebuf member functions
21// @require@ %-*.tst %-*.txt
22// @diff@ %-*.tst %-*.txt
23
24// Test that upon filebuf::close() 27.8.1.1,3 is enforced.
25
26#include <fstream>
27#include <testsuite_hooks.h>
28
29const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
30const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
31
32bool overflow_called;
33bool underflow_called;
34bool uflow_called;
35
36class Close_filebuf : public std::filebuf
37{
38public:
39 int_type overflow(int_type c)
40 {
41 overflow_called = true;
42 return std::filebuf::overflow(c);
43 }
44
45 int_type underflow()
46 {
47 underflow_called = true;
48 return std::filebuf::underflow();
49 }
50
51 int_type uflow()
52 {
53 uflow_called = true;
54 return std::filebuf::uflow();
55 }
56};
57
58void test_05()
59{
80416931
PC
60 Close_filebuf fb_01, fb_02;
61 char buffer[] = "xxxxxxxxxx";
62
63 // 'in'
64 fb_01.open(name_01, std::ios_base::in);
65 fb_01.sgetc();
66
67 fb_01.close();
68
69 underflow_called = false;
70 fb_01.sgetc();
71 VERIFY( underflow_called == true );
72
73 uflow_called = false;
74 fb_01.sbumpc();
75 VERIFY( uflow_called == true );
76
77 uflow_called = false;
78 fb_01.snextc();
79 VERIFY( uflow_called == true );
80
81 uflow_called = false;
82 fb_01.sgetn(buffer, sizeof(buffer));
83 VERIFY( uflow_called == true );
84
85 // 'out'
86 fb_02.open(name_02, std::ios_base::out);
87
88 fb_02.close();
89
90 overflow_called = false;
91 fb_02.sputc('T');
92 VERIFY( overflow_called == true );
93
94 overflow_called = false;
95 fb_02.sputn(buffer, sizeof(buffer));
96 VERIFY( overflow_called == true );
97}
98
99int
100main()
101{
102 test_05();
103 return 0;
104}