CharT.pass.cpp revision 256813f4e7915d64776a4edd5f4765d893b9f062
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//===----------------------------------------------------------------------===// 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// The LLVM Compiler Infrastructure 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// This file is distributed under the University of Illinois Open Source 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// License. See LICENSE.TXT for details. 79ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein// 8be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com//===----------------------------------------------------------------------===// 99ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein 10be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com// <ostream> 11be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 12be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com// template <class charT, class traits = char_traits<charT> > 13be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com// class basic_ostream; 14be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 15fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com// template<class charT, class traits> 16be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com// basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out, charT c); 17be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 18be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com#include <ostream> 199ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein#include <cassert> 209ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein 219ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleintemplate <class CharT> 22be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.comclass testbuf 23be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com : public std::basic_streambuf<CharT> 24be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com{ 25fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com typedef std::basic_streambuf<CharT> base; 26be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com std::basic_string<CharT> str_; 27be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.compublic: 28be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com testbuf() 29be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com { 309ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein } 31be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 32be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com std::basic_string<CharT> str() const 339ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein {return std::basic_string<CharT>(base::pbase(), base::pptr());} 349ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein 35be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.comprotected: 369ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein 379ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein virtual typename base::int_type 38be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com overflow(typename base::int_type __c = base::traits_type::eof()) 39be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com { 40be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com if (__c != base::traits_type::eof()) 41be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com { 429ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein int n = str_.size(); 439ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein str_.push_back(__c); 44be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com str_.resize(str_.capacity()); 459ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein base::setp(const_cast<CharT*>(str_.data()), 469ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein const_cast<CharT*>(str_.data() + str_.size())); 479ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein base::pbump(n+1); 48be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 49be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com return __c; 509ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein } 519ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein}; 529ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein 53be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.comint main() 549ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein{ 559ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein { 56be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com std::wostream os((std::wstreambuf*)0); 57fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com wchar_t c = L'a'; 589ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein os << c; 59be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com assert(os.bad()); 60be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com assert(os.fail()); 61be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 62be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com { 639ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein testbuf<wchar_t> sb; 644c07b6b58f58bc4bcf7b7749076b38a4de843590mtklein std::wostream os(&sb); 65be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com wchar_t c = L'a'; 66be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com os << c; 67 assert(sb.str() == L"a"); 68 } 69 { 70 testbuf<wchar_t> sb; 71 std::wostream os(&sb); 72 os.width(5); 73 wchar_t c = L'a'; 74 os << c; 75 assert(sb.str() == L" a"); 76 assert(os.width() == 0); 77 } 78 { 79 testbuf<wchar_t> sb; 80 std::wostream os(&sb); 81 os.width(5); 82 left(os); 83 wchar_t c = L'a'; 84 os << c; 85 assert(sb.str() == L"a "); 86 assert(os.width() == 0); 87 } 88} 89