11e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//===----------------------------------------------------------------------===//
21e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//
31e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//                     The LLVM Compiler Infrastructure
41e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//
51e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
61e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// Source Licenses. See LICENSE.TXT for details.
71e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//
81e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//===----------------------------------------------------------------------===//
91e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
101e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// <string>
111e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
121e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// constexpr template<class charT, class traits, class Allocator>
131e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//   bool operator>(const charT* lhs, basic_string_wiew<charT,traits> rhs);
141e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// constexpr template<class charT, class traits, class Allocator>
151e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//   bool operator>(basic_string_wiew<charT,traits> lhs, const charT* rhs);
161e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
171e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include <string_view>
181e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include <cassert>
191e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
20e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#include "test_macros.h"
211e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#include "constexpr_char_traits.hpp"
221e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
231e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowtemplate <class S>
241e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowvoid
251e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowtest(const typename S::value_type* lhs, const S& rhs, bool x, bool y)
261e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow{
271e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    assert((lhs > rhs) == x);
281e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    assert((rhs > lhs) == y);
291e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow}
301e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
311e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clowint main()
321e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow{
331e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    {
341e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    typedef std::string_view S;
351e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S(""), false, false);
361e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcde"), false, true);
371e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcdefghij"), false, true);
381e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcdefghijklmnopqrst"), false, true);
391e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S(""), true, false);
401e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcde"), false, false);
411e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcdefghij"), false, true);
421e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcdefghijklmnopqrst"), false, true);
431e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S(""), true, false);
441e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcde"), true, false);
451e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcdefghij"), false, false);
461e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcdefghijklmnopqrst"), false, true);
471e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S(""), true, false);
481e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcde"), true, false);
491e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcdefghij"), true, false);
501e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcdefghijklmnopqrst"), false, false);
511e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    }
521e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
53e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#if TEST_STD_VER > 11
541e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    {
551e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
561e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    constexpr SV  sv1;
571e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    constexpr SV  sv2 { "abcde", 5 };
581e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
591e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(sv1     > ""), "" );
601e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(""      > sv1), "" );
611e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(sv1     > "abcde"), "" );
621e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (  "abcde" > sv1, "" );
631e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow
641e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (  sv2      > "", "" );
651e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(""       > sv2), "" );
661e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(sv2      > "abcde"), "" );
671e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!("abcde"  > sv2), "" );
681e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (!(sv2      > "abcde0"), "" );
691e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    static_assert (  "abcde0" > sv2, "" );
701e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    }
711e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow#endif
721e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow}
73