signed_char_pointer.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//===----------------------------------------------------------------------===//
2221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//
3221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//                     The LLVM Compiler Infrastructure
4221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//
5221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// This file is dual licensed under the MIT and the University of Illinois Open
6221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// Source Licenses. See LICENSE.TXT for details.
7221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//
8221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//===----------------------------------------------------------------------===//
9221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
10221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// <istream>
11221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
12221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// template<class traits>
13221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&& in, signed char* s);
14221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
15221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org#include <istream>
16bcf0a1019f34cac346bd8349c2206f9d06adbe4epbos@webrtc.org#include <cassert>
17221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
18221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgtemplate <class CharT>
19221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgstruct testbuf
20221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    : public std::basic_streambuf<CharT>
21221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org{
22221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    typedef std::basic_string<CharT> string_type;
23221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    typedef std::basic_streambuf<CharT> base;
24221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgprivate:
25221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    string_type str_;
26221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgpublic:
27221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
28221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    testbuf() {}
29221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    testbuf(const string_type& str)
30221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        : str_(str)
31221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    {
32221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        base::setg(const_cast<CharT*>(str_.data()),
33221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org                   const_cast<CharT*>(str_.data()),
34221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org                   const_cast<CharT*>(str_.data()) + str_.size());
35221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    }
36221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
37221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    CharT* eback() const {return base::eback();}
38221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    CharT* gptr() const {return base::gptr();}
39221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    CharT* egptr() const {return base::egptr();}
40221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org};
41221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org
42221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgint main()
43221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org{
44221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    {
45221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        testbuf<char> sb("   abcdefghijk    ");
46221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        std::istream is(&sb);
47221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        signed char s[20];
48221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is >> s;
49221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.eof());
50221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.fail());
51221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(std::string((char*)s) == "abcdefghijk");
52221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    }
53221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    {
54221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        testbuf<char> sb("   abcdefghijk    ");
55221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        std::istream is(&sb);
56221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is.width(4);
57221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        signed char s[20];
58221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is >> s;
59221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.eof());
60221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.fail());
61221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(std::string((char*)s) == "abc");
62221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(is.width() == 0);
63221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    }
64221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    {
65221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        testbuf<char> sb("   abcdefghijk");
66221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        std::istream is(&sb);
67221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        signed char s[20];
68221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is >> s;
69221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert( is.eof());
70221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.fail());
71221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(std::string((char*)s) == "abcdefghijk");
72221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(is.width() == 0);
73221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    }
74221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    {
75221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        testbuf<char> sb("   abcdefghijk");
76221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        std::istream is(&sb);
77221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        signed char s[20];
78221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is.width(1);
79221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        is >> s;
80221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(!is.eof());
81221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert( is.fail());
82221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(std::string((char*)s) == "");
83221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org        assert(is.width() == 0);
84221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org    }
85221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org}
86221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org