//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -D_LIBCPP_ENABLE_CXX26_REMOVED_STRSTREAM

// <strstream>

// class strstreambuf

// int_type pbackfail(int_type c = EOF);

#include <strstream>
#include <cassert>

#include "test_macros.h"

struct test
    : public std::strstreambuf
{
    typedef std::strstreambuf base;
    test(char* gnext_arg, std::streamsize n, char* pbeg_arg = 0)
        : base(gnext_arg, n, pbeg_arg) {}
    test(const char* gnext_arg, std::streamsize n)
        : base(gnext_arg, n) {}

    virtual int_type pbackfail(int_type c = EOF) {return base::pbackfail(c);}
};

int main(int, char**)
{
    {
        const char buf[] = "123";
        test sb(buf, 0);
        assert(sb.sgetc() == '1');
        assert(sb.snextc() == '2');
        assert(sb.snextc() == '3');
        assert(sb.sgetc() == '3');
        assert(sb.snextc() == EOF);
        assert(sb.pbackfail('3') == '3');
        assert(sb.pbackfail('3') == EOF);
        assert(sb.pbackfail('2') == '2');
        assert(sb.pbackfail(EOF) != EOF);
        assert(sb.pbackfail(EOF) == EOF);
        assert(sb.str() == std::string("123"));
    }
    {
        char buf[] = "123";
        test sb(buf, 0);
        assert(sb.sgetc() == '1');
        assert(sb.snextc() == '2');
        assert(sb.snextc() == '3');
        assert(sb.sgetc() == '3');
        assert(sb.snextc() == EOF);
        assert(sb.pbackfail('3') == '3');
        assert(sb.pbackfail('3') == '3');
        assert(sb.pbackfail(EOF) != EOF);
        assert(sb.pbackfail(EOF) == EOF);
        assert(sb.str() == std::string("133"));
    }

  return 0;
}
