67 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <streambuf>10 11// template <class charT, class traits = char_traits<charT> >12// class basic_streambuf;13 14// int_type sputc(char_type c);15 16#include <streambuf>17#include <cassert>18 19#include "test_macros.h"20 21int overflow_called = 0;22 23struct test24 : public std::basic_streambuf<char>25{26 typedef std::basic_streambuf<char> base;27 28 test() {}29 30 void setg(char* gbeg, char* gnext, char* gend)31 {32 base::setg(gbeg, gnext, gend);33 }34 void setp(char* pbeg, char* pend)35 {36 base::setp(pbeg, pend);37 }38 39protected:40 int_type overflow(int_type = traits_type::eof())41 {42 ++overflow_called;43 return 'a';44 }45};46 47int main(int, char**)48{49 {50 test t;51 assert(overflow_called == 0);52 assert(t.sputc('A') == 'a');53 assert(overflow_called == 1);54 char out[3] = {0};55 t.setp(out, out+sizeof(out));56 assert(t.sputc('A') == 'A');57 assert(overflow_called == 1);58 assert(out[0] == 'A');59 assert(t.sputc('B') == 'B');60 assert(overflow_called == 1);61 assert(out[0] == 'A');62 assert(out[1] == 'B');63 }64 65 return 0;66}67