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// template<class charT, class traits, class Allocator>
131e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//   constexpr bool operator<=(const charT* lhs, basic_string_wiew<charT,traits> rhs);
141e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow// template<class charT, class traits, class Allocator>
151e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow//   constexpr 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(""), true, true);
361e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcde"), true, false);
371e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcdefghij"), true, false);
381e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("", S("abcdefghijklmnopqrst"), true, false);
391e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S(""), false, true);
401e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcde"), true, true);
411e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcdefghij"), true, false);
421e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcde", S("abcdefghijklmnopqrst"), true, false);
431e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S(""), false, true);
441e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcde"), false, true);
451e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcdefghij"), true, true);
461e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghij", S("abcdefghijklmnopqrst"), true, false);
471e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S(""), false, true);
481e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcde"), false, true);
491e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcdefghij"), false, true);
501e00d6db319aaec6acb6db0eafd059c7fb97bf66Marshall Clow    test("abcdefghijklmnopqrst", S("abcdefghijklmnopqrst"), true, true);
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