1// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com> 2 3// Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc. 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 3, 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 COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 27.8.1.4 Overridden virtual functions 21 22// { dg-require-fileio "" } 23 24#include <fstream> 25#include <testsuite_hooks.h> 26#include <testsuite_io.h> 27 28// @require@ %-*.tst %-*.txt 29// @diff@ %-*.tst %*.txt 30 31const char name_01[] = "seekpos-2out.tst"; // file with data in it 32 33void test05() 34{ 35 using namespace std; 36 using namespace __gnu_test; 37 38 typedef filebuf::int_type int_type; 39 typedef filebuf::pos_type pos_type; 40 typedef filebuf::off_type off_type; 41 typedef filebuf::traits_type traits_type; 42 43 bool test __attribute__((unused)) = true; 44 45 int_type c1; 46 int_type c2; 47 int_type c3; 48 49 pos_type pt_1(off_type(-1)); 50 pos_type pt_2(off_type(0)); 51 pos_type pt_3; 52 off_type off_1 = 0; 53 off_type off_2 = 0; 54 55 // seekpos 56 // pubseekpos(pos_type sp, ios_base::openmode) 57 // alters the stream position to sp 58 59 // out 60 { 61 constraint_filebuf fb; 62 fb.pubsetbuf(0, 0); 63 fb.open(name_01, ios_base::out); 64 VERIFY( fb.unbuffered() ); 65 66 // beg 67 pt_1 = fb.pubseekoff(78, ios_base::beg); 68 off_1 = off_type(pt_1); 69 VERIFY( off_1 > 0 ); 70 c1 = fb.snextc(); //current in pointer +1 71 VERIFY( c1 == traits_type::eof() ); 72 73 // cur 74 pt_3 = fb.pubseekoff(0, ios_base::cur); 75 fb.pubseekpos(pt_3); 76 c2 = fb.sputc('\n'); //test current out pointer 77 pt_3 = fb.pubseekoff(0, ios_base::cur); 78 fb.pubseekpos(pt_3); 79 c3 = fb.sgetc(); 80 fb.pubsync(); //resets pointers 81 pt_2 = fb.pubseekpos(pt_1); 82 off_2 = off_type(pt_2); 83 VERIFY( off_1 == off_2 ); 84 c3 = fb.snextc(); //current in pointer +1 85 VERIFY( c2 != c3 ); 86 VERIFY( c3 == traits_type::eof() ); 87 88 // end 89 pt_1 = fb.pubseekoff(0, ios_base::end); 90 off_1 = off_type(pt_1); 91 VERIFY( off_1 > off_2 ); 92 fb.sputn("\nof the wonderful things he does!!\nok", 37); 93 fb.pubsync(); 94 VERIFY( fb.unbuffered() ); 95 fb.close(); 96 VERIFY( !fb.is_open() ); 97 } 98} 99 100int main() 101{ 102 test05(); 103 return 0; 104} 105