1// 2003-05-01 Petur Runolfsson <peturr02@ru.is> 2 3// Copyright (C) 2003 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 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#include <iostream> 22#include <cstdio> 23#include <testsuite_hooks.h> 24 25void test10() 26{ 27 using namespace std; 28 29 bool test __attribute__((unused)) = true; 30 const char* name = "filebuf_virtuals-1.txt"; 31 32 FILE* ret = freopen(name, "r", stdin); 33 VERIFY( ret != NULL ); 34 35 streampos p1 = cin.tellg(); 36 VERIFY( p1 != streampos(-1) ); 37 VERIFY( streamoff(p1) == 0 ); 38 39 cin.seekg(0, ios::end); 40 VERIFY( cin.good() ); 41 42 streampos p2 = cin.tellg(); 43 VERIFY( p2 != streampos(-1) ); 44 VERIFY( p2 != p1 ); 45 VERIFY( streamoff(p2) == ftell(stdin) ); 46 47 cin.seekg(p1); 48 VERIFY( cin.good() ); 49 50 streamoff n = p2 - p1; 51 VERIFY( n > 0 ); 52 53 for (int i = 0; i < n; ++i) 54 { 55 streampos p3 = cin.tellg(); 56 VERIFY( streamoff(p3) == i ); 57 VERIFY( ftell(stdin) == i ); 58 cin.get(); 59 VERIFY( cin.good() ); 60 } 61 62 streampos p4 = cin.tellg(); 63 VERIFY( streamoff(p4) == n ); 64 VERIFY( ftell(stdin) == n ); 65 cin.get(); 66 VERIFY( cin.eof() ); 67} 68 69int main() 70{ 71 test10(); 72 return 0; 73} 74