blob: 4c68fada07a8cb551f0842521cb5e27852941421 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
9
10// <streambuf>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_streambuf;
14
15// int_type sungetc();
16
17#include <streambuf>
18#include <cassert>
19
20int pbackfail_called = 0;
21
22struct test
23 : public std::basic_streambuf<char>
24{
25 typedef std::basic_streambuf<char> base;
26
27 test() {}
28
29 void setg(char* gbeg, char* gnext, char* gend)
30 {
31 base::setg(gbeg, gnext, gend);
32 }
33
34protected:
Dan Albert1d4a1ed2016-05-25 22:36:09 -070035 int_type pbackfail(int_type c = traits_type::eof())
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000036 {
37 ++pbackfail_called;
38 return 'a';
39 }
40};
41
42int main()
43{
44 {
45 test t;
46 assert(pbackfail_called == 0);
47 assert(t.sungetc() == 'a');
48 assert(pbackfail_called == 1);
49 char in[] = "ABC";
50 t.setg(in, in+1, in+sizeof(in));
51 assert(t.sungetc() == 'A');
52 assert(pbackfail_called == 1);
53 assert(t.sungetc() == 'a');
54 assert(pbackfail_called == 2);
55 }
56}