overflow.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com//===----------------------------------------------------------------------===//
207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com//
307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// ��������������������The LLVM Compiler Infrastructure
407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com//
507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// This file is distributed under the University of Illinois Open Source
607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// License. See LICENSE.TXT for details.
707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com//
807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com//===----------------------------------------------------------------------===//
907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// <sstream>
1107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >
1307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// class basic_stringbuf
1407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com// int_type overflow(int_type c = traits::eof());
1607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include <sstream>
1807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include <cassert>
1907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
2007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comint overflow_called = 0;
2107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
2207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comtemplate <class CharT>
2307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstruct testbuf
2407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    : public std::basic_stringbuf<CharT>
2507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com{
2607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    typedef std::basic_stringbuf<CharT> base;
2707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    explicit testbuf(const std::basic_string<CharT>& str,
2807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com                     std::ios_base::openmode which = std::ios_base::in | std::ios_base::out)
2907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        : base(str, which) {}
3007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    typename base::int_type
3207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        overflow(typename base::int_type c = base::type_traits::eof())
3307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        {++overflow_called; return base::overflow(c);}
3407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    void pbump(int n) {base::pbump(n);}
3607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com};
3707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comint main()
3907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com{
4007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {
4107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        testbuf<char> sb("abc");
4207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('1') == '1');
4307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "1bc");
4407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('2') == '2');
4507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "12c");
4607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('3') == '3');
4707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "123");
4807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('4') == '4');
4907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "1234");
5007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('5') == '5');
5107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "12345");
5207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('6') == '6');
5307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "123456");
5407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('7') == '7');
5507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "1234567");
5607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('8') == '8');
5707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "12345678");
5807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('9') == '9');
5907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "123456789");
6007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('0') == '0');
6107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "1234567890");
6207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('1') == '1');
6307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "12345678901");
6407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
6507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {
6607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        testbuf<wchar_t> sb(L"abc");
6707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'1') == L'1');
6807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"1bc");
6907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'2') == L'2');
7007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"12c");
7107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'3') == L'3');
7207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"123");
7307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'4') == L'4');
7407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"1234");
7507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'5') == L'5');
7607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"12345");
7707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'6') == L'6');
7807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"123456");
7907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'7') == L'7');
8007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"1234567");
8107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'8') == L'8');
8207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"12345678");
8307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'9') == L'9');
8407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"123456789");
8507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'0') == L'0');
8607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"1234567890");
8707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc(L'1') == L'1');
8807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == L"12345678901");
8907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
9007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {
9107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        testbuf<char> sb("abc", std::ios_base::app | std::ios_base::out);
9207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('1') == '1');
9307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "abc1");
9407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.sputc('2') == '2');
9507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        assert(sb.str() == "abc12");
9607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
9707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}
9807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com