1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <fstream> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// int_type pbackfail(int_type c = traits::eof()); 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This test is not entirely portable 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <fstream> 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertemplate <class CharT> 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerstruct test_buf 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner : public std::basic_filebuf<CharT> 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::basic_filebuf<CharT> base; 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef typename base::char_type char_type; 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef typename base::int_type int_type; 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef typename base::traits_type traits_type; 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char_type* eback() const {return base::eback();} 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char_type* gptr() const {return base::gptr();} 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char_type* egptr() const {return base::egptr();} 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner void gbump(int n) {base::gbump(n);} 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner virtual int_type pbackfail(int_type c = traits_type::eof()) {return base::pbackfail(c);} 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}; 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test_buf<char> f; 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.open("underflow.dat", std::ios_base::in) != 0); 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.is_open()); 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sbumpc() == '1'); 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sgetc() == '2'); 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.pbackfail('a') == -1); 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner test_buf<char> f; 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.open("underflow.dat", std::ios_base::in | std::ios_base::out) != 0); 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.is_open()); 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sbumpc() == '1'); 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sgetc() == '2'); 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.pbackfail('a') == 'a'); 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sbumpc() == 'a'); 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(f.sgetc() == '2'); 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 57