unsigned_short.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//===----------------------------------------------------------------------===//
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// License. See LICENSE.TXT for details.
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch//===----------------------------------------------------------------------===//
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// <ostream>
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// template <class charT, class traits = char_traits<charT> >
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//   class basic_ostream;
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// operator<<(unsigned short val);
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <ostream>
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <cassert>
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)template <class CharT>
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class testbuf
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : public std::basic_streambuf<CharT>
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    typedef std::basic_streambuf<CharT> base;
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::basic_string<CharT> str_;
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public:
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    testbuf()
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    {
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::basic_string<CharT> str() const
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        {return std::basic_string<CharT>(base::pbase(), base::pptr());}
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)protected:
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    virtual typename base::int_type
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        overflow(typename base::int_type __c = base::traits_type::eof())
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        {
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            if (__c != base::traits_type::eof())
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            {
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                int n = str_.size();
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                str_.push_back(__c);
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                str_.resize(str_.capacity());
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                base::setp(const_cast<CharT*>(str_.data()),
45                           const_cast<CharT*>(str_.data() + str_.size()));
46                base::pbump(n+1);
47            }
48            return __c;
49        }
50};
51
52int main()
53{
54    {
55        std::ostream os((std::streambuf*)0);
56        unsigned short n = 0;
57        os << n;
58        assert(os.bad());
59        assert(os.fail());
60    }
61    {
62        testbuf<char> sb;
63        std::ostream os(&sb);
64        unsigned short n = 0;
65        os << n;
66        assert(sb.str() == "0");
67    }
68    {
69        testbuf<char> sb;
70        std::ostream os(&sb);
71        unsigned short n = 10;
72        os << n;
73        assert(sb.str() == "10");
74    }
75    {
76        testbuf<char> sb;
77        std::ostream os(&sb);
78        hex(os);
79        unsigned short n = 0xFFF6;
80        os << n;
81        assert(sb.str() == "fff6");
82    }
83}
84