readsome.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu//===----------------------------------------------------------------------===// 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// The LLVM Compiler Infrastructure 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// This file is dual licensed under the MIT and the University of Illinois Open 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Source Licenses. See LICENSE.TXT for details. 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu//===----------------------------------------------------------------------===// 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// <istream> 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// streamsize readsome(char_type* s, streamsize n); 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <istream> 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <cassert> 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liutemplate <class CharT> 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustruct testbuf 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : public std::basic_streambuf<CharT> 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu{ 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef std::basic_string<CharT> string_type; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef std::basic_streambuf<CharT> base; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprivate: 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu string_type str_; 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liupublic: 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu testbuf() {} 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu testbuf(const string_type& str) 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : str_(str) 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu { 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::setg(const_cast<CharT*>(str_.data()), 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const_cast<CharT*>(str_.data()), 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const_cast<CharT*>(str_.data()) + str_.size()); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CharT* eback() const {return base::eback();} 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CharT* gptr() const {return base::gptr();} 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CharT* egptr() const {return base::egptr();} 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuint main() 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu{ 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu { 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu testbuf<char> sb(" 1234567890"); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::istream is(&sb); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu char s[5]; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.readsome(s, 5) == 5); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.eof()); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assert(!is.fail()); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assert(std::string(s, 5) == " 1234"); 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 5); 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is.readsome(s, 5); 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.eof()); 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.fail()); 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(std::string(s, 5) == "56789"); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 5); 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is.readsome(s, 5); 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert( is.eof()); 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.fail()); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 1); 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(std::string(s, 1) == "0"); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu { 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu testbuf<wchar_t> sb(L" 1234567890"); 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::wistream is(&sb); 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wchar_t s[5]; 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.readsome(s, 5) == 5); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.eof()); 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.fail()); 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(std::wstring(s, 5) == L" 1234"); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 5); 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is.readsome(s, 5); 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.eof()); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(!is.fail()); 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(std::wstring(s, 5) == L"56789"); 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 5); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) is.readsome(s, 5); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assert( is.eof()); 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) assert(!is.fail()); 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(is.gcount() == 1); 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assert(std::wstring(s, 1) == L"0"); 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu