pbackfail.pass.cpp revision 4b53f508efcd857b2dddeff092a8509def5bc6bd
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// <locale> 11 12// wbuffer_convert<Codecvt, Elem, Tr> 13 14// int_type pbackfail(int_type c = traits::eof()); 15 16// This test is not entirely portable 17 18#include <locale> 19#include <codecvt> 20#include <fstream> 21#include <cassert> 22 23struct test_buf 24 : public std::wbuffer_convert<std::codecvt_utf8<wchar_t> > 25{ 26 typedef std::wbuffer_convert<std::codecvt_utf8<wchar_t> > base; 27 typedef base::char_type char_type; 28 typedef base::int_type int_type; 29 typedef base::traits_type traits_type; 30 31 explicit test_buf(std::streambuf* sb) : base(sb) {} 32 33 char_type* eback() const {return base::eback();} 34 char_type* gptr() const {return base::gptr();} 35 char_type* egptr() const {return base::egptr();} 36 void gbump(int n) {base::gbump(n);} 37 38 virtual int_type pbackfail(int_type c = traits_type::eof()) {return base::pbackfail(c);} 39}; 40 41int main() 42{ 43 { 44 std::ifstream bs("underflow.dat"); 45 test_buf f(bs.rdbuf()); 46 assert(f.sbumpc() == L'1'); 47 assert(f.sgetc() == L'2'); 48 assert(f.pbackfail(L'a') == -1); 49 } 50 { 51 std::fstream bs("underflow.dat"); 52 test_buf f(bs.rdbuf()); 53 assert(f.sbumpc() == L'1'); 54 assert(f.sgetc() == L'2'); 55 assert(f.pbackfail(L'a') == -1); 56 assert(f.sbumpc() == L'2'); 57 assert(f.sgetc() == L'3'); 58 } 59} 60