brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · fb32602 Raw
103 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 pbackfail(int_type c = traits::eof());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                     std::ios_base::openmode which = std::ios_base::in | std::ios_base::out)28        : base(str, which) {}29 30    typename base::int_type31        pbackfail(typename base::int_type c = base::traits_type::eof())32        {return base::pbackfail(c);}33 34    void pbump(int n) {base::pbump(n);}35};36 37int main(int, char**)38{39    // check pbackfail40    {41        testbuf<char> tb("");42        tb.pbackfail();43    }44    {45        testbuf<char> sb("123", std::ios_base::in);46        assert(sb.sgetc() == '1');47        assert(sb.snextc() == '2');48        assert(sb.snextc() == '3');49        assert(sb.sgetc() == '3');50        assert(sb.snextc() == std::char_traits<char>::eof());51        assert(sb.pbackfail('3') == '3');52        assert(sb.pbackfail('3') == std::char_traits<char>::eof());53        assert(sb.pbackfail('2') == '2');54        assert(sb.pbackfail(std::char_traits<char>::eof()) != std::char_traits<char>::eof());55        assert(sb.pbackfail(std::char_traits<char>::eof()) == std::char_traits<char>::eof());56        assert(sb.str() == "123");57    }58    {59        testbuf<char> sb("123");60        assert(sb.sgetc() == '1');61        assert(sb.snextc() == '2');62        assert(sb.snextc() == '3');63        assert(sb.sgetc() == '3');64        assert(sb.snextc() == std::char_traits<char>::eof());65        assert(sb.pbackfail('3') == '3');66        assert(sb.pbackfail('3') == '3');67        assert(sb.pbackfail(std::char_traits<char>::eof()) != std::char_traits<char>::eof());68        assert(sb.pbackfail(std::char_traits<char>::eof()) == std::char_traits<char>::eof());69        assert(sb.str() == "133");70    }71#ifndef TEST_HAS_NO_WIDE_CHARACTERS72    {73        testbuf<wchar_t> sb(L"123", std::ios_base::in);74        assert(sb.sgetc() == L'1');75        assert(sb.snextc() == L'2');76        assert(sb.snextc() == L'3');77        assert(sb.sgetc() == L'3');78        assert(sb.snextc() == std::char_traits<wchar_t>::eof());79        assert(sb.pbackfail(L'3') == L'3');80        assert(sb.pbackfail(L'3') == std::char_traits<wchar_t>::eof());81        assert(sb.pbackfail(L'2') == L'2');82        assert(sb.pbackfail(std::char_traits<wchar_t>::eof()) != std::char_traits<wchar_t>::eof());83        assert(sb.pbackfail(std::char_traits<wchar_t>::eof()) == std::char_traits<wchar_t>::eof());84        assert(sb.str() == L"123");85    }86    {87        testbuf<wchar_t> sb(L"123");88        assert(sb.sgetc() == L'1');89        assert(sb.snextc() == L'2');90        assert(sb.snextc() == L'3');91        assert(sb.sgetc() == L'3');92        assert(sb.snextc() == std::char_traits<wchar_t>::eof());93        assert(sb.pbackfail(L'3') == L'3');94        assert(sb.pbackfail(L'3') == L'3');95        assert(sb.pbackfail(std::char_traits<wchar_t>::eof()) != std::char_traits<wchar_t>::eof());96        assert(sb.pbackfail(std::char_traits<wchar_t>::eof()) == std::char_traits<wchar_t>::eof());97        assert(sb.str() == L"133");98    }99#endif100 101  return 0;102}103