192487d7cSLouis Dionne //===----------------------------------------------------------------------===//
292487d7cSLouis Dionne //
392487d7cSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
492487d7cSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
592487d7cSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
692487d7cSLouis Dionne //
792487d7cSLouis Dionne //===----------------------------------------------------------------------===//
892487d7cSLouis Dionne
992487d7cSLouis Dionne // <string>
1092487d7cSLouis Dionne
1192487d7cSLouis Dionne // template<> struct char_traits<wchar_t>
1292487d7cSLouis Dionne
1392487d7cSLouis Dionne // static int compare(const char_type* s1, const char_type* s2, size_t n);
1492487d7cSLouis Dionne // constexpr in C++17
1592487d7cSLouis Dionne
1692487d7cSLouis Dionne // UNSUPPORTED: no-wide-characters
1792487d7cSLouis Dionne
1892487d7cSLouis Dionne #include <string>
1992487d7cSLouis Dionne #include <cassert>
2092487d7cSLouis Dionne
2192487d7cSLouis Dionne #include "test_macros.h"
2292487d7cSLouis Dionne
2392487d7cSLouis Dionne #if TEST_STD_VER > 14
test_constexpr()24*a40bada9SBrendan Emery constexpr bool test_constexpr() {
25*a40bada9SBrendan Emery return std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0 &&
26*a40bada9SBrendan Emery std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0 &&
27*a40bada9SBrendan Emery std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0;
2892487d7cSLouis Dionne }
2992487d7cSLouis Dionne #endif
3092487d7cSLouis Dionne
main(int,char **)31*a40bada9SBrendan Emery int main(int, char**) {
3292487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"", L"", 0) == 0);
3392487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(NULL, NULL, 0) == 0);
3492487d7cSLouis Dionne
3592487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"1", L"1", 1) == 0);
3692487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"1", L"2", 1) < 0);
3792487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"2", L"1", 1) > 0);
3892487d7cSLouis Dionne
3992487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"12", L"12", 2) == 0);
4092487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"12", L"13", 2) < 0);
4192487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"12", L"22", 2) < 0);
4292487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"13", L"12", 2) > 0);
4392487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"22", L"12", 2) > 0);
4492487d7cSLouis Dionne
4592487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0);
4692487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0);
4792487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"123", L"133", 3) < 0);
4892487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"123", L"124", 3) < 0);
4992487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0);
5092487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"133", L"123", 3) > 0);
5192487d7cSLouis Dionne assert(std::char_traits<wchar_t>::compare(L"124", L"123", 3) > 0);
5292487d7cSLouis Dionne
5392487d7cSLouis Dionne #if TEST_STD_VER > 14
5492487d7cSLouis Dionne static_assert(test_constexpr(), "");
5592487d7cSLouis Dionne #endif
5692487d7cSLouis Dionne
5792487d7cSLouis Dionne return 0;
5892487d7cSLouis Dionne }
59