GDB (xrefs)
Loading...
Searching...
No Matches
2.cc
Go to the documentation of this file.
1
2// Copyright (C) 2013-2023 Free Software Foundation, Inc.
3//
4// This file is part of the GNU ISO C++ Library. This library is free
5// software; you can redistribute it and/or modify it under the
6// terms of the GNU General Public License as published by the
7// Free Software Foundation; either version 3, or (at your option)
8// any later version.
9
10// This library is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14
15// You should have received a copy of the GNU General Public License along
16// with this library; see the file COPYING3. If not see
17// <http://www.gnu.org/licenses/>.
18
19// inserters
20
21// NB: This file is predicated on sstreams, ostreams
22// working, not to mention other major details like char_traits, and
23// all of the string_view class.
24
25// { dg-options "-std=gnu++17" }
26// { dg-require-fileio "" }
27
28namespace inserters_2 {
29
30// testing basic_filebuf::xsputn via stress testing with large string_views
31// based on a bug report libstdc++ 9
32// mode == out
33static void
34test05 (std::size_t size)
35{
36 bool test ATTRIBUTE_UNUSED = true;
37
38 const char filename[] = "inserters_extractors-2.txt";
39 const char fillc = 'f';
40 std::ofstream ofs(filename);
41 std::string str(size, fillc);
42 gdb::string_view strv{str};
43
44 // sanity checks
45 VERIFY( str.size() == size );
46 VERIFY( ofs.good() );
47
48 // stress test
49 ofs << str << std::endl;
50 if (!ofs.good())
51 test = false;
52
53 ofs << str << std::endl;
54 if (!ofs.good())
55 test = false;
56
57 VERIFY( str.size() == size );
58 VERIFY( ofs.good() );
59
60 ofs.close();
61
62 // sanity check on the written file
63 std::ifstream ifs(filename);
64 std::size_t count = 0;
65 char c;
66 while (count <= (2 * size) + 4)
67 {
68 ifs >> c;
69 if (ifs.good() && c == fillc)
70 {
71 ++count;
72 c = '0';
73 }
74 else
75 break;
76 }
77
78 VERIFY( count == 2 * size );
79}
80
81static int
83{
84 test05(1);
85 test05(1000);
86 test05(10000);
87
88 return 0;
89}
90
91} // namespace inserters_2
void test05()
Definition 3.cc:26
#define VERIFY(x)
size_t size
Definition go32-nat.c:239
static int main()
Definition 2.cc:82