pbackfail.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <locale>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// wbuffer_convert<Codecvt, Elem, Tr>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// int_type pbackfail(int_type c = traits::eof());
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is not entirely portable
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <codecvt>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fstream>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct test_buf
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::wbuffer_convert<std::codecvt_utf8<wchar_t> >
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef std::wbuffer_convert<std::codecvt_utf8<wchar_t> > base;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef base::char_type   char_type;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef base::int_type    int_type;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef base::traits_type traits_type;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit test_buf(std::streambuf* sb) : base(sb) {}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char_type* eback() const {return base::eback();}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char_type* gptr()  const {return base::gptr();}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char_type* egptr() const {return base::egptr();}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    void gbump(int n) {base::gbump(n);}
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual int_type pbackfail(int_type c = traits_type::eof()) {return base::pbackfail(c);}
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int main()
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles){
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    {
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        std::ifstream bs("underflow.dat");
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        test_buf f(bs.rdbuf());
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        assert(f.sbumpc() == L'1');
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        assert(f.sgetc() == L'2');
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        assert(f.pbackfail(L'a') == -1);
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    {
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        std::fstream bs("underflow.dat");
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        test_buf f(bs.rdbuf());
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        assert(f.sbumpc() == L'1');
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(f.sgetc() == L'2');
55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        assert(f.pbackfail(L'a') == -1);
56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        assert(f.sbumpc() == L'2');
57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch        assert(f.sgetc() == L'3');
58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)