Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / unittests / basic_string_view / inserters / char / 2.cc
CommitLineData
fdc11678 1
88b9d363 2// Copyright (C) 2013-2022 Free Software Foundation, Inc.
fdc11678
SM
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
c9638d26 28namespace inserters_2 {
fdc11678
SM
29
30// testing basic_filebuf::xsputn via stress testing with large string_views
31// based on a bug report libstdc++ 9
32// mode == out
dd694d77
SM
33static void
34test05 (std::size_t size)
fdc11678 35{
c9638d26 36 bool test ATTRIBUTE_UNUSED = true;
fdc11678
SM
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);
c9638d26 42 gdb::string_view strv{str};
fdc11678
SM
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
dd694d77
SM
81static int
82main ()
fdc11678
SM
83{
84 test05(1);
85 test05(1000);
86 test05(10000);
87
88 return 0;
89}
c9638d26
SM
90
91} // namespace inserters_2
This page took 0.485894 seconds and 4 git commands to generate.