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