1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <fstream> 11 12 // pos_type seekoff(off_type off, ios_base::seekdir way, 13 // ios_base::openmode which = ios_base::in | ios_base::out); 14 // pos_type seekpos(pos_type sp, 15 // ios_base::openmode which = ios_base::in | ios_base::out); 16 17 // This test is not entirely portable 18 19 #include <fstream> 20 #include <cassert> 21 22 int main() 23 { 24 { 25 char buf[10]; 26 typedef std::filebuf::pos_type pos_type; 27 std::filebuf f; 28 f.pubsetbuf(buf, sizeof(buf)); 29 assert(f.open("seekoff.dat", std::ios_base::in | std::ios_base::out 30 | std::ios_base::trunc) != 0); 31 assert(f.is_open()); 32 f.sputn("abcdefghijklmnopqrstuvwxyz", 26); 33 assert(buf[0] == 'v'); 34 pos_type p = f.pubseekoff(-15, std::ios_base::cur); 35 assert(p == 11); 36 assert(f.sgetc() == 'l'); 37 f.pubseekoff(0, std::ios_base::beg); 38 assert(f.sgetc() == 'a'); 39 f.pubseekoff(-1, std::ios_base::end); 40 assert(f.sgetc() == 'z'); 41 assert(f.pubseekpos(p) == p); 42 assert(f.sgetc() == 'l'); 43 } 44 std::remove("seekoff.dat"); 45 { 46 wchar_t buf[10]; 47 typedef std::filebuf::pos_type pos_type; 48 std::wfilebuf f; 49 f.pubsetbuf(buf, sizeof(buf)/sizeof(buf[0])); 50 assert(f.open("seekoff.dat", std::ios_base::in | std::ios_base::out 51 | std::ios_base::trunc) != 0); 52 assert(f.is_open()); 53 f.sputn(L"abcdefghijklmnopqrstuvwxyz", 26); 54 assert(buf[0] == L'v'); 55 pos_type p = f.pubseekoff(-15, std::ios_base::cur); 56 assert(p == 11); 57 assert(f.sgetc() == L'l'); 58 f.pubseekoff(0, std::ios_base::beg); 59 assert(f.sgetc() == L'a'); 60 f.pubseekoff(-1, std::ios_base::end); 61 assert(f.sgetc() == L'z'); 62 assert(f.pubseekpos(p) == p); 63 assert(f.sgetc() == L'l'); 64 } 65 std::remove("seekoff.dat"); 66 } 67