brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · c743609 Raw
76 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// <sstream>10 11// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >12// class basic_stringbuf13 14// int_type underflow();15 16#include <sstream>17#include <cassert>18 19#include "test_macros.h"20 21template <class CharT>22struct testbuf23    : public std::basic_stringbuf<CharT>24{25    typedef std::basic_stringbuf<CharT> base;26    explicit testbuf(const std::basic_string<CharT>& str)27        : base(str) {}28 29    typename base::int_type underflow() {return base::underflow();}30    void pbump(int n) {base::pbump(n);}31};32 33int main(int, char**)34{35    {36        testbuf<char> sb("123");37        sb.pbump(3);38        assert(sb.underflow() == '1');39        assert(sb.underflow() == '1');40        assert(sb.snextc() == '2');41        assert(sb.underflow() == '2');42        assert(sb.underflow() == '2');43        assert(sb.snextc() == '3');44        assert(sb.underflow() == '3');45        assert(sb.underflow() == '3');46        assert(sb.snextc() == std::char_traits<char>::eof());47        assert(sb.underflow() == std::char_traits<char>::eof());48        assert(sb.underflow() == std::char_traits<char>::eof());49        sb.sputc('4');50        assert(sb.underflow() == '4');51        assert(sb.underflow() == '4');52    }53#ifndef TEST_HAS_NO_WIDE_CHARACTERS54    {55        testbuf<wchar_t> sb(L"123");56        sb.pbump(3);57        assert(sb.underflow() == L'1');58        assert(sb.underflow() == L'1');59        assert(sb.snextc() == L'2');60        assert(sb.underflow() == L'2');61        assert(sb.underflow() == L'2');62        assert(sb.snextc() == L'3');63        assert(sb.underflow() == L'3');64        assert(sb.underflow() == L'3');65        assert(sb.snextc() == std::char_traits<wchar_t>::eof());66        assert(sb.underflow() == std::char_traits<wchar_t>::eof());67        assert(sb.underflow() == std::char_traits<wchar_t>::eof());68        sb.sputc(L'4');69        assert(sb.underflow() == L'4');70        assert(sb.underflow() == L'4');71    }72#endif // TEST_HAS_NO_WIDE_CHARACTERS73 74  return 0;75}76