1// 2000-06-29 bkoz 2 3// Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation 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 8// Free Software Foundation; either version 2, or (at your option) 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 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// 27.6.2.4 basic_ostream seek members [lib.ostream.seeks] 22 23#include <ostream> 24#include <istream> 25#include <sstream> 26#include <testsuite_hooks.h> 27 28const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto"; 29const int times = 10; 30 31void write_rewind(std::iostream& stream) 32{ 33 bool test __attribute__((unused)) = true; 34 35 for (int j = 0; j < times; j++) 36 { 37 std::streampos begin = stream.tellp(); 38 39 for (int i = 0; i < times; ++i) 40 stream << j << '-' << i << s << '\n'; 41 42 stream.seekp(begin); 43 } 44 VERIFY( stream.good() ); 45} 46 47void check_contents(std::iostream& stream) 48{ 49 bool test __attribute__((unused)) = true; 50 51 stream.clear(); 52 stream.seekg(0, std::ios::beg); 53 int i = 0; 54 int loop = times * times + 2; 55 while (i < loop) 56 { 57 stream.ignore(80, '\n'); 58 if (stream.good()) 59 ++i; 60 else 61 break; 62 } 63 VERIFY( i == times ); 64} 65 66// stringstream 67// libstdc++/2346 68// N.B. The original testcase was broken, using tellg/seekg in write_rewind. 69void test03() 70{ 71 std::stringstream sstrm; 72 73 write_rewind(sstrm); 74 check_contents(sstrm); 75} 76 77int main() 78{ 79 test03(); 80 return 0; 81} 82