]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/2.cc
libstdc++: Ensure c++NN effective target present in all C++17 tests
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 21_strings / basic_string_view / inserters / char / 2.cc
CommitLineData
ca8f2cb1 1
8d9254fc 2// Copyright (C) 2013-2020 Free Software Foundation, Inc.
ca8f2cb1
VV
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" }
6458742a 26// { dg-do run { target c++17 } }
ca8f2cb1
VV
27// { dg-require-fileio "" }
28
29#include <string_view>
30#include <string>
31#include <fstream>
32#include <iostream>
33#include <testsuite_hooks.h>
34
35// testing basic_filebuf::xsputn via stress testing with large string_views
36// based on a bug report libstdc++ 9
37// mode == out
38void
39test05(std::size_t size)
40{
118c8424 41 bool test = true;
ca8f2cb1
VV
42
43 const char filename[] = "inserters_extractors-2.txt";
44 const char fillc = 'f';
45 std::ofstream ofs(filename);
46 std::string str(size, fillc);
47 std::string_view strv{str};
48
49 // sanity checks
50 VERIFY( str.size() == size );
51 VERIFY( ofs.good() );
52
53 // stress test
54 ofs << str << std::endl;
55 if (!ofs.good())
56 test = false;
57
58 ofs << str << std::endl;
59 if (!ofs.good())
60 test = false;
61
62 VERIFY( str.size() == size );
63 VERIFY( ofs.good() );
64
65 ofs.close();
66
67 // sanity check on the written file
68 std::ifstream ifs(filename);
69 std::size_t count = 0;
70 char c;
71 while (count <= (2 * size) + 4)
72 {
73 ifs >> c;
74 if (ifs.good() && c == fillc)
75 {
76 ++count;
77 c = '0';
78 }
79 else
80 break;
81 }
82
83 VERIFY( count == 2 * size );
84}
85
86int
87main()
88{
89 test05(1);
90 test05(1000);
91 test05(10000);
92
93 return 0;
94}