ignore.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//===----------------------------------------------------------------------===//
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//                     The LLVM Compiler Infrastructure
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// This file is distributed under the University of Illinois Open Source
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// License. See LICENSE.TXT for details.
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//===----------------------------------------------------------------------===//
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// <istream>
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// basic_istream<charT,traits>&
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng//    ignore(streamsize n = 1, int_type delim = traits::eof());
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <istream>
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <cassert>
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtemplate <class CharT>
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct testbuf
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    : public std::basic_streambuf<CharT>
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    typedef std::basic_string<CharT> string_type;
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    typedef std::basic_streambuf<CharT> base;
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengprivate:
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    string_type str_;
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengpublic:
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    testbuf() {}
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    testbuf(const string_type& str)
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        : str_(str)
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    {
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        base::setg(const_cast<CharT*>(str_.data()),
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                   const_cast<CharT*>(str_.data()),
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                   const_cast<CharT*>(str_.data()) + str_.size());
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    }
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CharT* eback() const {return base::eback();}
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CharT* gptr() const {return base::gptr();}
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    CharT* egptr() const {return base::egptr();}
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint main()
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    {
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        testbuf<char> sb(" 1\n2345\n6");
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        std::istream is(&sb);
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore();
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.eof());
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 1);
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore(5, '\n');
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.eof());
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 2);
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore(15);
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert( is.eof());
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 6);
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    }
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    {
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        testbuf<wchar_t> sb(L" 1\n2345\n6");
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        std::wistream is(&sb);
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore();
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.eof());
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 1);
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore(5, '\n');
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.eof());
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 2);
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        is.ignore(15);
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert( is.eof());
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(!is.fail());
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng        assert(is.gcount() == 6);
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    }
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng