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

// constexpr int compare(const charT* s) const;

#include <string_view>
#include <cassert>

#include "test_macros.h"
#include "constexpr_char_traits.h"

int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }

template <typename CharT>
void test1(std::basic_string_view<CharT> sv1, const CharT* s, int expected) {
  assert(sign(sv1.compare(s)) == sign(expected));
}

template <typename CharT>
void test(const CharT* s1, const CharT* s2, int expected) {
  typedef std::basic_string_view<CharT> string_view_t;
  string_view_t sv1(s1);
  test1(sv1, s2, expected);
}

int main(int, char**) {
  {
    test("", "", 0);
    test("", "abcde", -5);
    test("", "abcdefghij", -10);
    test("", "abcdefghijklmnopqrst", -20);
    test("abcde", "", 5);
    test("abcde", "abcde", 0);
    test("abcde", "abcdefghij", -5);
    test("abcde", "abcdefghijklmnopqrst", -15);
    test("abcdefghij", "", 10);
    test("abcdefghij", "abcde", 5);
    test("abcdefghij", "abcdefghij", 0);
    test("abcdefghij", "abcdefghijklmnopqrst", -10);
    test("abcdefghijklmnopqrst", "", 20);
    test("abcdefghijklmnopqrst", "abcde", 15);
    test("abcdefghijklmnopqrst", "abcdefghij", 10);
    test("abcdefghijklmnopqrst", "abcdefghijklmnopqrst", 0);
  }

#ifndef TEST_HAS_NO_WIDE_CHARACTERS
  {
    test(L"", L"", 0);
    test(L"", L"abcde", -5);
    test(L"", L"abcdefghij", -10);
    test(L"", L"abcdefghijklmnopqrst", -20);
    test(L"abcde", L"", 5);
    test(L"abcde", L"abcde", 0);
    test(L"abcde", L"abcdefghij", -5);
    test(L"abcde", L"abcdefghijklmnopqrst", -15);
    test(L"abcdefghij", L"", 10);
    test(L"abcdefghij", L"abcde", 5);
    test(L"abcdefghij", L"abcdefghij", 0);
    test(L"abcdefghij", L"abcdefghijklmnopqrst", -10);
    test(L"abcdefghijklmnopqrst", L"", 20);
    test(L"abcdefghijklmnopqrst", L"abcde", 15);
    test(L"abcdefghijklmnopqrst", L"abcdefghij", 10);
    test(L"abcdefghijklmnopqrst", L"abcdefghijklmnopqrst", 0);
  }
#endif

#if TEST_STD_VER >= 11
  {
    test(U"", U"", 0);
    test(U"", U"abcde", -5);
    test(U"", U"abcdefghij", -10);
    test(U"", U"abcdefghijklmnopqrst", -20);
    test(U"abcde", U"", 5);
    test(U"abcde", U"abcde", 0);
    test(U"abcde", U"abcdefghij", -5);
    test(U"abcde", U"abcdefghijklmnopqrst", -15);
    test(U"abcdefghij", U"", 10);
    test(U"abcdefghij", U"abcde", 5);
    test(U"abcdefghij", U"abcdefghij", 0);
    test(U"abcdefghij", U"abcdefghijklmnopqrst", -10);
    test(U"abcdefghijklmnopqrst", U"", 20);
    test(U"abcdefghijklmnopqrst", U"abcde", 15);
    test(U"abcdefghijklmnopqrst", U"abcdefghij", 10);
    test(U"abcdefghijklmnopqrst", U"abcdefghijklmnopqrst", 0);
  }

  {
    test(u"", u"", 0);
    test(u"", u"abcde", -5);
    test(u"", u"abcdefghij", -10);
    test(u"", u"abcdefghijklmnopqrst", -20);
    test(u"abcde", u"", 5);
    test(u"abcde", u"abcde", 0);
    test(u"abcde", u"abcdefghij", -5);
    test(u"abcde", u"abcdefghijklmnopqrst", -15);
    test(u"abcdefghij", u"", 10);
    test(u"abcdefghij", u"abcde", 5);
    test(u"abcdefghij", u"abcdefghij", 0);
    test(u"abcdefghij", u"abcdefghijklmnopqrst", -10);
    test(u"abcdefghijklmnopqrst", u"", 20);
    test(u"abcdefghijklmnopqrst", u"abcde", 15);
    test(u"abcdefghijklmnopqrst", u"abcdefghij", 10);
    test(u"abcdefghijklmnopqrst", u"abcdefghijklmnopqrst", 0);
  }
#endif

#if TEST_STD_VER > 11
  {
    typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
    constexpr SV sv1;
    constexpr SV sv2{"abcde", 5};
    static_assert(sv1.compare("") == 0, "");
    static_assert(sv1.compare("abcde") < 0, "");
    static_assert(sv2.compare("") > 0, "");
    static_assert(sv2.compare("abcde") == 0, "");
  }
#endif

  return 0;
}
