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