1064028bbSMarshall Clow //===----------------------------------------------------------------------===//
2064028bbSMarshall Clow //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6064028bbSMarshall Clow //
7064028bbSMarshall Clow //===----------------------------------------------------------------------===//
8064028bbSMarshall Clow
9064028bbSMarshall Clow // <string>
10064028bbSMarshall Clow
11*425620ccSNikolas Klauser // int compare(const basic_string_view sv) const // constexpr since C++20
12064028bbSMarshall Clow
13064028bbSMarshall Clow #include <string>
14064028bbSMarshall Clow #include <cassert>
15064028bbSMarshall Clow
167fc6a556SMarshall Clow #include "test_macros.h"
17064028bbSMarshall Clow #include "min_allocator.h"
18064028bbSMarshall Clow
sign(int x)19ccc74035SNikolas Klauser TEST_CONSTEXPR_CXX20 int sign(int x)
20064028bbSMarshall Clow {
21064028bbSMarshall Clow if (x == 0)
22064028bbSMarshall Clow return 0;
23064028bbSMarshall Clow if (x < 0)
24064028bbSMarshall Clow return -1;
25064028bbSMarshall Clow return 1;
26064028bbSMarshall Clow }
27064028bbSMarshall Clow
28064028bbSMarshall Clow template <class S, class SV>
29ccc74035SNikolas Klauser TEST_CONSTEXPR_CXX20 void
test(const S & s,SV sv,int x)30064028bbSMarshall Clow test(const S& s, SV sv, int x)
31064028bbSMarshall Clow {
32dea74b28Szoecarver LIBCPP_ASSERT_NOEXCEPT(s.compare(sv));
33064028bbSMarshall Clow assert(sign(s.compare(sv)) == sign(x));
34064028bbSMarshall Clow }
35064028bbSMarshall Clow
test()36*425620ccSNikolas Klauser TEST_CONSTEXPR_CXX20 bool test() {
37064028bbSMarshall Clow {
38064028bbSMarshall Clow typedef std::string S;
39064028bbSMarshall Clow typedef std::string_view SV;
40064028bbSMarshall Clow test(S(""), SV(""), 0);
41064028bbSMarshall Clow test(S(""), SV("abcde"), -5);
42064028bbSMarshall Clow test(S(""), SV("abcdefghij"), -10);
43064028bbSMarshall Clow test(S(""), SV("abcdefghijklmnopqrst"), -20);
44064028bbSMarshall Clow test(S("abcde"), SV(""), 5);
45064028bbSMarshall Clow test(S("abcde"), SV("abcde"), 0);
46064028bbSMarshall Clow test(S("abcde"), SV("abcdefghij"), -5);
47064028bbSMarshall Clow test(S("abcde"), SV("abcdefghijklmnopqrst"), -15);
48064028bbSMarshall Clow test(S("abcdefghij"), SV(""), 10);
49064028bbSMarshall Clow test(S("abcdefghij"), SV("abcde"), 5);
50064028bbSMarshall Clow test(S("abcdefghij"), SV("abcdefghij"), 0);
51064028bbSMarshall Clow test(S("abcdefghij"), SV("abcdefghijklmnopqrst"), -10);
52064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV(""), 20);
53064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcde"), 15);
54064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcdefghij"), 10);
55064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcdefghijklmnopqrst"), 0);
56064028bbSMarshall Clow }
57064028bbSMarshall Clow #if TEST_STD_VER >= 11
58064028bbSMarshall Clow {
59064028bbSMarshall Clow typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
60064028bbSMarshall Clow typedef std::string_view SV;
61064028bbSMarshall Clow test(S(""), SV(""), 0);
62064028bbSMarshall Clow test(S(""), SV("abcde"), -5);
63064028bbSMarshall Clow test(S(""), SV("abcdefghij"), -10);
64064028bbSMarshall Clow test(S(""), SV("abcdefghijklmnopqrst"), -20);
65064028bbSMarshall Clow test(S("abcde"), SV(""), 5);
66064028bbSMarshall Clow test(S("abcde"), SV("abcde"), 0);
67064028bbSMarshall Clow test(S("abcde"), SV("abcdefghij"), -5);
68064028bbSMarshall Clow test(S("abcde"), SV("abcdefghijklmnopqrst"), -15);
69064028bbSMarshall Clow test(S("abcdefghij"), SV(""), 10);
70064028bbSMarshall Clow test(S("abcdefghij"), SV("abcde"), 5);
71064028bbSMarshall Clow test(S("abcdefghij"), SV("abcdefghij"), 0);
72064028bbSMarshall Clow test(S("abcdefghij"), SV("abcdefghijklmnopqrst"), -10);
73064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV(""), 20);
74064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcde"), 15);
75064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcdefghij"), 10);
76064028bbSMarshall Clow test(S("abcdefghijklmnopqrst"), SV("abcdefghijklmnopqrst"), 0);
77064028bbSMarshall Clow }
78064028bbSMarshall Clow #endif
792df59c50SJF Bastien
80ccc74035SNikolas Klauser return true;
81ccc74035SNikolas Klauser }
82ccc74035SNikolas Klauser
main(int,char **)83ccc74035SNikolas Klauser int main(int, char**)
84ccc74035SNikolas Klauser {
85ccc74035SNikolas Klauser test();
86ccc74035SNikolas Klauser #if TEST_STD_VER > 17
87*425620ccSNikolas Klauser static_assert(test());
88ccc74035SNikolas Klauser #endif
89ccc74035SNikolas Klauser
902df59c50SJF Bastien return 0;
91064028bbSMarshall Clow }
92