sgetc.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <streambuf>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_streambuf;
14
15// int_type sgetc();
16
17#include <streambuf>
18#include <cassert>
19
20int underflow_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:
35    int_type underflow()
36    {
37        ++underflow_called;
38        return 'a';
39    }
40};
41
42int main()
43{
44    {
45        test t;
46        assert(underflow_called == 0);
47        assert(t.sgetc() == 'a');
48        assert(underflow_called == 1);
49        char in[] = "ABC";
50        t.setg(in, in, in+sizeof(in));
51        assert(t.sgetc() == 'A');
52        assert(underflow_called == 1);
53        assert(t.sgetc() == 'A');
54        assert(underflow_called == 1);
55    }
56}
57