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