unsigned_long_long.pass.cpp revision 12f7f5d2475908f3553b2039b418f71036721878
129d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//===----------------------------------------------------------------------===//
23f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song//
329d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//                     The LLVM Compiler Infrastructure
429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//
529d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung// This file is dual licensed under the MIT and the University of Illinois Open
629d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung// Source Licenses. See LICENSE.TXT for details.
729d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//
829d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//===----------------------------------------------------------------------===//
929d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
1029d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung// <ostream>
1129d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
1229d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung// template <class charT, class traits = char_traits<charT> >
1329d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung//   class basic_ostream;
1429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
1529d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung// operator<<(unsigned long long val);
1629d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
173f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song#include <ostream>
1829d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung#include <cassert>
1929d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
2029d6fea296ebecb607525c8245a54696ad7c5db7Winson Chungtemplate <class CharT>
2129d6fea296ebecb607525c8245a54696ad7c5db7Winson Chungclass testbuf
2259e1f9a07eef87b1d287956d21b8d9c5b27faf9cWinson Chung    : public std::basic_streambuf<CharT>
235b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal{
2429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    typedef std::basic_streambuf<CharT> base;
253f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    std::basic_string<CharT> str_;
26ed66b2bac7447febe2e405b4ce725cae4f6b5988Adam Cohenpublic:
275b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal    testbuf()
2829d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    {
2929d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    }
3029d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
313f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    std::basic_string<CharT> str() const
322e6da1539bc7286336b3c24d96ab76434939ce4dAdam Cohen        {return std::basic_string<CharT>(base::pbase(), base::pptr());}
333f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song
342e6da1539bc7286336b3c24d96ab76434939ce4dAdam Cohenprotected:
353f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song
363f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    virtual typename base::int_type
373f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song        overflow(typename base::int_type __c = base::traits_type::eof())
383f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song        {
395b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal            if (__c != base::traits_type::eof())
40ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal            {
41ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal                int n = str_.size();
4229d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung                str_.push_back(__c);
43f52abd7758b8f245522936e941336e574debabf5Sunny Goyal                str_.resize(str_.capacity());
44f52abd7758b8f245522936e941336e574debabf5Sunny Goyal                base::setp(const_cast<CharT*>(str_.data()),
45f52abd7758b8f245522936e941336e574debabf5Sunny Goyal                           const_cast<CharT*>(str_.data() + str_.size()));
46f52abd7758b8f245522936e941336e574debabf5Sunny Goyal                base::pbump(n+1);
47f52abd7758b8f245522936e941336e574debabf5Sunny Goyal            }
48f52abd7758b8f245522936e941336e574debabf5Sunny Goyal            return __c;
49f52abd7758b8f245522936e941336e574debabf5Sunny Goyal        }
5029d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung};
513f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song
5229d6fea296ebecb607525c8245a54696ad7c5db7Winson Chungint main()
534e8fb91cf19b7d621de8cbed2bde2c8dac734121Hyunyoung Song{
543f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    {
553f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song        std::ostream os((std::streambuf*)0);
56f17a1c9ad99d46a65de797422fd439382114b348Hyunyoung Song        unsigned long long n = 0;
574b69f2ca91d63a59dfa921ba965b92de7f604f5aHyunyoung Song        os << n;
584b69f2ca91d63a59dfa921ba965b92de7f604f5aHyunyoung Song        assert(os.bad());
595cd1d92f6c40b47eff12859d4e13b6431aa778c0Hyunyoung Song        assert(os.fail());
604b69f2ca91d63a59dfa921ba965b92de7f604f5aHyunyoung Song    }
614b69f2ca91d63a59dfa921ba965b92de7f604f5aHyunyoung Song    {
625cd1d92f6c40b47eff12859d4e13b6431aa778c0Hyunyoung Song        testbuf<char> sb;
634b69f2ca91d63a59dfa921ba965b92de7f604f5aHyunyoung Song        std::ostream os(&sb);
645cd1d92f6c40b47eff12859d4e13b6431aa778c0Hyunyoung Song        unsigned long long n = 0;
655cd1d92f6c40b47eff12859d4e13b6431aa778c0Hyunyoung Song        os << n;
663f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song        assert(sb.str() == "0");
67f52abd7758b8f245522936e941336e574debabf5Sunny Goyal    }
68b99ff3e83270e113f6182e337c4f7b0223bad92bHyunyoung Song    {
69b99ff3e83270e113f6182e337c4f7b0223bad92bHyunyoung Song        testbuf<char> sb;
705b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal        std::ostream os(&sb);
715b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal        unsigned long long n = 10;
7205713af127d765cc28a8b2fd548a90347c90d6cbMichael Jurka        os << n;
735b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal        assert(sb.str() == "10");
743f4e070aa58d51dd136885b4d3e2e6c5d9f93ea0Michael Jurka    }
755b0e669169ea2c951bf2f6f71faf793b24db3c23Sunny Goyal    {
760499834db3f9dc6fb0f5f57b5876b8503bce5189Winson Chung        testbuf<char> sb;
772e6da1539bc7286336b3c24d96ab76434939ce4dAdam Cohen        std::ostream os(&sb);
782e6da1539bc7286336b3c24d96ab76434939ce4dAdam Cohen        hex(os);
793f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song        unsigned long long n = static_cast<unsigned long long>(-10);
8029d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung        os << n;
8129d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung        assert(sb.str() == "fffffffffffffff6");
8229d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    }
833f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song}
8429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung