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
main()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