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