//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// NetBSD does not support LC_COLLATE at the moment
// XFAIL: netbsd

// XFAIL: LIBCXX-AIX-FIXME
// XFAIL: LIBCXX-FREEBSD-FIXME

// REQUIRES: locale.cs_CZ.ISO8859-2

// <regex>

// template <class charT> struct regex_traits;

// template <class ForwardIterator>
//   string_type
//   lookup_collatename(ForwardIterator first, ForwardIterator last) const;

// TODO: investigation needed
// XFAIL: target={{.*}}-linux-gnu{{.*}}

#include <regex>
#include <iterator>
#include <cassert>

#include "test_macros.h"
#include "test_iterators.h"
#include "platform_support.h" // locale name macros

template <class char_type>
void
test(const char_type* A, const std::basic_string<char_type>& expected)
{
    std::regex_traits<char_type> t;
    typedef forward_iterator<const char_type*> F;
    assert(t.lookup_collatename(F(A), F(A + t.length(A))) == expected);
}

int main(int, char**)
{
    test("NUL", std::string("\x00", 1));
    test("alert", std::string("\x07"));
    test("backspace", std::string("\x08"));
    test("tab", std::string("\x09"));
    test("carriage-return", std::string("\x0D"));
    test("newline", std::string("\x0A"));
    test("vertical-tab", std::string("\x0B"));
    test("form-feed", std::string("\x0C"));
    test("space", std::string(" "));
    test("exclamation-mark", std::string("!"));
    test("quotation-mark", std::string("\""));
    test("number-sign", std::string("#"));
    test("dollar-sign", std::string("$"));
    test("percent-sign", std::string("%"));
    test("ampersand", std::string("&"));
    test("apostrophe", std::string("\'"));
    test("left-parenthesis", std::string("("));
    test("right-parenthesis", std::string(")"));
    test("asterisk", std::string("*"));
    test("plus-sign", std::string("+"));
    test("comma", std::string(","));
    test("hyphen-minus", std::string("-"));
    test("hyphen", std::string("-"));
    test("full-stop", std::string("."));
    test("period", std::string("."));
    test("slash", std::string("/"));
    test("solidus", std::string("/"));
    test("zero", std::string("0"));
    test("one", std::string("1"));
    test("two", std::string("2"));
    test("three", std::string("3"));
    test("four", std::string("4"));
    test("five", std::string("5"));
    test("six", std::string("6"));
    test("seven", std::string("7"));
    test("eight", std::string("8"));
    test("nine", std::string("9"));
    test("colon", std::string(":"));
    test("semicolon", std::string(";"));
    test("less-than-sign", std::string("<"));
    test("equals-sign", std::string("="));
    test("greater-than-sign", std::string(">"));
    test("question-mark", std::string("?"));
    test("commercial-at", std::string("@"));
    for (char c = 'A'; c <= 'Z'; ++c)
    {
        const char a[2] = {c};
        test(a, std::string(a));
    }
    test("left-square-bracket", std::string("["));
    test("backslash", std::string("\\"));
    test("reverse-solidus", std::string("\\"));
    test("right-square-bracket", std::string("]"));
    test("circumflex-accent", std::string("^"));
    test("circumflex", std::string("^"));
    test("low-line", std::string("_"));
    test("underscore", std::string("_"));
    test("grave-accent", std::string("`"));
    for (char c = 'a'; c <= 'z'; ++c)
    {
        const char a[2] = {c};
        test(a, std::string(a));
    }
    test("left-brace", std::string("{"));
    test("left-curly-bracket", std::string("{"));
    test("vertical-line", std::string("|"));
    test("right-brace", std::string("}"));
    test("right-curly-bracket", std::string("}"));
    test("tilde", std::string("~"));

    test("tild", std::string(""));
    test("ch", std::string(""));
    std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
    test("ch", std::string("ch"));
    std::locale::global(std::locale("C"));

#ifndef TEST_HAS_NO_WIDE_CHARACTERS
    test(L"NUL", std::wstring(L"\x00", 1));
    test(L"alert", std::wstring(L"\x07"));
    test(L"backspace", std::wstring(L"\x08"));
    test(L"tab", std::wstring(L"\x09"));
    test(L"carriage-return", std::wstring(L"\x0D"));
    test(L"newline", std::wstring(L"\x0A"));
    test(L"vertical-tab", std::wstring(L"\x0B"));
    test(L"form-feed", std::wstring(L"\x0C"));
    test(L"space", std::wstring(L" "));
    test(L"exclamation-mark", std::wstring(L"!"));
    test(L"quotation-mark", std::wstring(L"\""));
    test(L"number-sign", std::wstring(L"#"));
    test(L"dollar-sign", std::wstring(L"$"));
    test(L"percent-sign", std::wstring(L"%"));
    test(L"ampersand", std::wstring(L"&"));
    test(L"apostrophe", std::wstring(L"\'"));
    test(L"left-parenthesis", std::wstring(L"("));
    test(L"right-parenthesis", std::wstring(L")"));
    test(L"asterisk", std::wstring(L"*"));
    test(L"plus-sign", std::wstring(L"+"));
    test(L"comma", std::wstring(L","));
    test(L"hyphen-minus", std::wstring(L"-"));
    test(L"hyphen", std::wstring(L"-"));
    test(L"full-stop", std::wstring(L"."));
    test(L"period", std::wstring(L"."));
    test(L"slash", std::wstring(L"/"));
    test(L"solidus", std::wstring(L"/"));
    test(L"zero", std::wstring(L"0"));
    test(L"one", std::wstring(L"1"));
    test(L"two", std::wstring(L"2"));
    test(L"three", std::wstring(L"3"));
    test(L"four", std::wstring(L"4"));
    test(L"five", std::wstring(L"5"));
    test(L"six", std::wstring(L"6"));
    test(L"seven", std::wstring(L"7"));
    test(L"eight", std::wstring(L"8"));
    test(L"nine", std::wstring(L"9"));
    test(L"colon", std::wstring(L":"));
    test(L"semicolon", std::wstring(L";"));
    test(L"less-than-sign", std::wstring(L"<"));
    test(L"equals-sign", std::wstring(L"="));
    test(L"greater-than-sign", std::wstring(L">"));
    test(L"question-mark", std::wstring(L"?"));
    test(L"commercial-at", std::wstring(L"@"));
    for (wchar_t c = L'A'; c <= L'Z'; ++c)
    {
        const wchar_t a[2] = {c};
        test(a, std::wstring(a));
    }
    test(L"left-square-bracket", std::wstring(L"["));
    test(L"backslash", std::wstring(L"\\"));
    test(L"reverse-solidus", std::wstring(L"\\"));
    test(L"right-square-bracket", std::wstring(L"]"));
    test(L"circumflex-accent", std::wstring(L"^"));
    test(L"circumflex", std::wstring(L"^"));
    test(L"low-line", std::wstring(L"_"));
    test(L"underscore", std::wstring(L"_"));
    test(L"grave-accent", std::wstring(L"`"));
    for (wchar_t c = L'a'; c <= L'z'; ++c)
    {
        const wchar_t a[2] = {c};
        test(a, std::wstring(a));
    }
    test(L"left-brace", std::wstring(L"{"));
    test(L"left-curly-bracket", std::wstring(L"{"));
    test(L"vertical-line", std::wstring(L"|"));
    test(L"right-brace", std::wstring(L"}"));
    test(L"right-curly-bracket", std::wstring(L"}"));
    test(L"tilde", std::wstring(L"~"));

    test(L"tild", std::wstring(L""));
    test(L"ch", std::wstring(L""));
    std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
    test(L"ch", std::wstring(L"ch"));
    std::locale::global(std::locale("C"));
#endif // TEST_HAS_NO_WIDE_CHARACTERS

  return 0;
}
