15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <fstream>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // pos_type seekoff(off_type off, ios_base::seekdir way,
125a83710eSEric Fiselier // ios_base::openmode which = ios_base::in | ios_base::out);
135a83710eSEric Fiselier // pos_type seekpos(pos_type sp,
145a83710eSEric Fiselier // ios_base::openmode which = ios_base::in | ios_base::out);
155a83710eSEric Fiselier
167efbd851SLouis Dionne // FILE_DEPENDENCIES: underflow.dat
177efbd851SLouis Dionne
185a83710eSEric Fiselier #include <fstream>
195a83710eSEric Fiselier #include <cassert>
205a83710eSEric Fiselier
216e083f62SBilly Robert O'Neal III #include "test_macros.h"
226e083f62SBilly Robert O'Neal III
main(int,char **)232df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier {
265a83710eSEric Fiselier char buf[10];
275a83710eSEric Fiselier typedef std::filebuf::pos_type pos_type;
285a83710eSEric Fiselier std::filebuf f;
295a83710eSEric Fiselier f.pubsetbuf(buf, sizeof(buf));
305a83710eSEric Fiselier assert(f.open("seekoff.dat", std::ios_base::in | std::ios_base::out
315a83710eSEric Fiselier | std::ios_base::trunc) != 0);
325a83710eSEric Fiselier assert(f.is_open());
335a83710eSEric Fiselier f.sputn("abcdefghijklmnopqrstuvwxyz", 26);
346e083f62SBilly Robert O'Neal III LIBCPP_ASSERT(buf[0] == 'v');
355a83710eSEric Fiselier pos_type p = f.pubseekoff(-15, std::ios_base::cur);
365a83710eSEric Fiselier assert(p == 11);
375a83710eSEric Fiselier assert(f.sgetc() == 'l');
385a83710eSEric Fiselier f.pubseekoff(0, std::ios_base::beg);
395a83710eSEric Fiselier assert(f.sgetc() == 'a');
405a83710eSEric Fiselier f.pubseekoff(-1, std::ios_base::end);
415a83710eSEric Fiselier assert(f.sgetc() == 'z');
425a83710eSEric Fiselier assert(f.pubseekpos(p) == p);
435a83710eSEric Fiselier assert(f.sgetc() == 'l');
445a83710eSEric Fiselier }
455a83710eSEric Fiselier std::remove("seekoff.dat");
46*f4c1258dSLouis Dionne
47*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
485a83710eSEric Fiselier {
495a83710eSEric Fiselier wchar_t buf[10];
505a83710eSEric Fiselier typedef std::filebuf::pos_type pos_type;
515a83710eSEric Fiselier std::wfilebuf f;
525a83710eSEric Fiselier f.pubsetbuf(buf, sizeof(buf)/sizeof(buf[0]));
535a83710eSEric Fiselier assert(f.open("seekoff.dat", std::ios_base::in | std::ios_base::out
545a83710eSEric Fiselier | std::ios_base::trunc) != 0);
555a83710eSEric Fiselier assert(f.is_open());
565a83710eSEric Fiselier f.sputn(L"abcdefghijklmnopqrstuvwxyz", 26);
576e083f62SBilly Robert O'Neal III LIBCPP_ASSERT(buf[0] == L'v');
585a83710eSEric Fiselier pos_type p = f.pubseekoff(-15, std::ios_base::cur);
595a83710eSEric Fiselier assert(p == 11);
605a83710eSEric Fiselier assert(f.sgetc() == L'l');
615a83710eSEric Fiselier f.pubseekoff(0, std::ios_base::beg);
625a83710eSEric Fiselier assert(f.sgetc() == L'a');
635a83710eSEric Fiselier f.pubseekoff(-1, std::ios_base::end);
645a83710eSEric Fiselier assert(f.sgetc() == L'z');
655a83710eSEric Fiselier assert(f.pubseekpos(p) == p);
665a83710eSEric Fiselier assert(f.sgetc() == L'l');
675a83710eSEric Fiselier }
685a83710eSEric Fiselier std::remove("seekoff.dat");
69*f4c1258dSLouis Dionne #endif
702df59c50SJF Bastien
712df59c50SJF Bastien return 0;
725a83710eSEric Fiselier }
73