//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

// UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)

// <string_view>

// void remove_suffix(size_type _n)

#include <cassert>
#include <cstddef>
#include <string_view>

#include "test_macros.h"

template <typename CharT>
void test(const CharT* s, std::size_t len) {
  typedef std::basic_string_view<CharT> SV;
  {
    SV sv1(s);
    assert(sv1.size() == len);
    assert(sv1.data() == s);

    if (len > 0) {
      sv1.remove_suffix(1);
      assert(sv1.size() == (len - 1));
      assert(sv1.data() == s);
      sv1.remove_suffix(len - 1);
    }

    assert(sv1.size() == 0);
    sv1.remove_suffix(0);
    assert(sv1.size() == 0);
  }
}

#if TEST_STD_VER > 11
constexpr std::size_t test_ce(size_t n, size_t k) {
  typedef std::basic_string_view<char> SV;
  SV sv1{"ABCDEFGHIJKL", n};
  sv1.remove_suffix(k);
  return sv1.size();
}
#endif

int main(int, char**) {
  test("ABCDE", 5);
  test("a", 1);
  test("", 0);

#ifndef TEST_HAS_NO_WIDE_CHARACTERS
  test(L"ABCDE", 5);
  test(L"a", 1);
  test(L"", 0);
#endif

#if TEST_STD_VER >= 11
  test(u"ABCDE", 5);
  test(u"a", 1);
  test(u"", 0);

  test(U"ABCDE", 5);
  test(U"a", 1);
  test(U"", 0);
#endif

#if TEST_STD_VER > 11
  {
    static_assert(test_ce(5, 0) == 5, "");
    static_assert(test_ce(5, 1) == 4, "");
    static_assert(test_ce(5, 5) == 0, "");
    static_assert(test_ce(9, 3) == 6, "");
  }
#endif

  return 0;
}
