double.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//===----------------------------------------------------------------------===//
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//                     The LLVM Compiler Infrastructure
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang// This file is dual licensed under the MIT and the University of Illinois Open
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// Source Licenses. See LICENSE.TXT for details.
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//===----------------------------------------------------------------------===//
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// <istream>
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// template <class charT, class traits = char_traits<charT> >
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//   class basic_istream;
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// operator>>(double& val);
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <istream>
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <cassert>
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratotemplate <class CharT>
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratostruct testbuf
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    : public std::basic_streambuf<CharT>
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    typedef std::basic_string<CharT> string_type;
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    typedef std::basic_streambuf<CharT> base;
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoprivate:
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    string_type str_;
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic:
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    testbuf() {}
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    testbuf(const string_type& str)
32b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        : str_(str)
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        base::setg(const_cast<CharT*>(str_.data()),
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                   const_cast<CharT*>(str_.data()),
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                   const_cast<CharT*>(str_.data()) + str_.size());
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
39b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    CharT* eback() const {return base::eback();}
40b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    CharT* gptr() const {return base::gptr();}
41b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    CharT* egptr() const {return base::egptr();}
42b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang};
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoint main()
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        std::istream is((std::streambuf*)0);
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        double n = 0;
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        is >> n;
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        assert(is.fail());
51b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    }
52b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    {
53b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        testbuf<char> sb("0");
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        std::istream is(&sb);
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        double n = 10;
56        is >> n;
57        assert(n == 0);
58        assert( is.eof());
59        assert(!is.fail());
60    }
61    {
62        testbuf<char> sb(" 123 ");
63        std::istream is(&sb);
64        double n = 10;
65        is >> n;
66        assert(n == 123);
67        assert(!is.eof());
68        assert(!is.fail());
69    }
70    {
71        testbuf<wchar_t> sb(L" -123.5 ");
72        std::wistream is(&sb);
73        double n = 10;
74        is >> n;
75        assert(n == -123.5);
76        assert(!is.eof());
77        assert(!is.fail());
78    }
79}
80