Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libcxx / test / std / input.output / iostream.format / input.streams / istream.unformatted / tellg.pass.cpp
blob816e400287cf53a539c3594d5a4c7d24b45bd32a
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 // <istream>
11 // pos_type tellg();
13 #include <istream>
14 #include <cassert>
16 #include "test_macros.h"
18 template <class CharT>
19 struct testbuf
20 : public std::basic_streambuf<CharT>
22 typedef std::basic_string<CharT> string_type;
23 typedef std::basic_streambuf<CharT> base;
24 private:
25 string_type str_;
26 public:
28 testbuf() {}
29 testbuf(const string_type& str)
30 : str_(str)
32 base::setg(const_cast<CharT*>(str_.data()),
33 const_cast<CharT*>(str_.data()),
34 const_cast<CharT*>(str_.data()) + str_.size());
37 CharT* eback() const {return base::eback();}
38 CharT* gptr() const {return base::gptr();}
39 CharT* egptr() const {return base::egptr();}
40 protected:
41 typename base::pos_type seekoff(typename base::off_type off,
42 std::ios_base::seekdir way,
43 std::ios_base::openmode which)
45 assert(off == 0);
46 assert(way == std::ios_base::cur);
47 assert(which == std::ios_base::in);
48 return 5;
52 int main(int, char**)
55 testbuf<char> sb(" 123456789");
56 std::istream is(&sb);
57 assert(is.tellg() == 5);
59 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
61 testbuf<wchar_t> sb(L" 123456789");
62 std::wistream is(&sb);
63 assert(is.tellg() == 5);
65 #endif
67 return 0;