1// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 27.6.2.4 basic_ostream seek members [lib.ostream.seeks] 19// @require@ %-*.tst %-*.txt 20// @diff@ %-*.tst %-*.txt 21 22#include <ostream> 23#include <istream> 24#include <fstream> 25#include <cstdlib> 26#include <testsuite_hooks.h> 27 28const wchar_t* s = L" lootpack, peanut butter wolf, rob swift, madlib, quasimoto"; 29const int times = 10; 30 31void write_rewind(std::wiostream& 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 << L'-' << i << s << L'\n'; 41 42 stream.seekp(begin); 43 } 44 VERIFY( stream.good() ); 45} 46 47void check_contents(std::wiostream& stream) 48{ 49 bool test __attribute__((unused)) = true; 50 51 stream.clear(); 52 stream.seekg(0, std::wios::beg); 53 int i = 0; 54 int loop = times * times + 2; 55 while (i < loop) 56 { 57 stream.ignore(80, L'\n'); 58 if (stream.good()) 59 ++i; 60 else 61 break; 62 } 63 VERIFY( i == times ); 64} 65 66// fstream 67// libstdc++/2346 68void test02() 69{ 70 std::wfstream ofstrm; 71 ofstrm.open("wistream_seeks-3.txt", std::wios::out); 72 if (!ofstrm) 73 std::abort(); 74 write_rewind(ofstrm); 75 ofstrm.close(); 76 77 std::wfstream ifstrm; 78 ifstrm.open("wistream_seeks-3.txt", std::wios::in); 79 check_contents(ifstrm); 80 ifstrm.close(); 81} 82 83int main() 84{ 85 test02(); 86 return 0; 87} 88