sbumpc.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)// 8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <streambuf> 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class charT, class traits = char_traits<charT> > 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class basic_streambuf; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// int_type sbumpc(); 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <streambuf> 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <cassert> 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int uflow_called = 0; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct test 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public std::basic_streambuf<char> 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::basic_streambuf<char> base; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test() {} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setg(char* gbeg, char* gnext, char* gend) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::setg(gbeg, gnext, gend); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int_type uflow() 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++uflow_called; 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return 'a'; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main() 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test t; 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) assert(uflow_called == 0); 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) assert(t.sbumpc() == 'a'); 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) assert(uflow_called == 1); 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) char in[] = "ABC"; 500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) t.setg(in, in, in+sizeof(in)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(t.sbumpc() == 'A'); 523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch assert(uflow_called == 1); 533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch assert(t.sbumpc() == 'B'); 540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) assert(uflow_called == 1); 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)