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