Home | History | Annotate | Download | only in filebuf.virtuals
      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