//===----------------------------------------------------------------------===//
//
// 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(basic_string_view str) const noexcept;

#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,
            std::basic_string_view<CharT> sv2, int expected ) {
    assert ( sign( sv1.compare(sv2)) == 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 );
    string_view_t sv2 ( s2 );
    test1(sv1, sv2, 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 { "abcde", 5 };
    constexpr SV  sv2 { "abcde", 5 };
    constexpr SV  sv3 { "edcba0", 6 };
    static_assert ( sv1.compare(sv2) == 0, "" );
    static_assert ( sv2.compare(sv1) == 0, "" );
    static_assert ( sv3.compare(sv2)  > 0, "" );
    static_assert ( sv2.compare(sv3)  < 0, "" );
    }
#endif

  return 0;
}
