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)