17112dae6acac544a0271a85d95342c583441e2d1Dan Albert//===----------------------------------------------------------------------===//
27112dae6acac544a0271a85d95342c583441e2d1Dan Albert//
37112dae6acac544a0271a85d95342c583441e2d1Dan Albert//                     The LLVM Compiler Infrastructure
47112dae6acac544a0271a85d95342c583441e2d1Dan Albert//
57112dae6acac544a0271a85d95342c583441e2d1Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
67112dae6acac544a0271a85d95342c583441e2d1Dan Albert// Source Licenses. See LICENSE.TXT for details.
77112dae6acac544a0271a85d95342c583441e2d1Dan Albert//
87112dae6acac544a0271a85d95342c583441e2d1Dan Albert//===----------------------------------------------------------------------===//
97112dae6acac544a0271a85d95342c583441e2d1Dan Albert
107112dae6acac544a0271a85d95342c583441e2d1Dan Albert// <string>
117112dae6acac544a0271a85d95342c583441e2d1Dan Albert
127112dae6acac544a0271a85d95342c583441e2d1Dan Albert// template<class charT, class traits>
137112dae6acac544a0271a85d95342c583441e2d1Dan Albert//  constexpr bool operator>(basic_string_view<charT,traits> lhs,
147112dae6acac544a0271a85d95342c583441e2d1Dan Albert//                  basic_string_view<charT,traits> rhs);
157112dae6acac544a0271a85d95342c583441e2d1Dan Albert
167112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include <experimental/string_view>
177112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include <cassert>
187112dae6acac544a0271a85d95342c583441e2d1Dan Albert
197112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include "constexpr_char_traits.hpp"
207112dae6acac544a0271a85d95342c583441e2d1Dan Albert
217112dae6acac544a0271a85d95342c583441e2d1Dan Alberttemplate <class S>
227112dae6acac544a0271a85d95342c583441e2d1Dan Albertvoid
237112dae6acac544a0271a85d95342c583441e2d1Dan Alberttest(const S& lhs, const S& rhs, bool x, bool y)
247112dae6acac544a0271a85d95342c583441e2d1Dan Albert{
257112dae6acac544a0271a85d95342c583441e2d1Dan Albert    assert((lhs > rhs) == x);
267112dae6acac544a0271a85d95342c583441e2d1Dan Albert    assert((rhs > lhs) == y);
277112dae6acac544a0271a85d95342c583441e2d1Dan Albert}
287112dae6acac544a0271a85d95342c583441e2d1Dan Albert
297112dae6acac544a0271a85d95342c583441e2d1Dan Albertint main()
307112dae6acac544a0271a85d95342c583441e2d1Dan Albert{
317112dae6acac544a0271a85d95342c583441e2d1Dan Albert    {
327112dae6acac544a0271a85d95342c583441e2d1Dan Albert    typedef std::experimental::string_view S;
337112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S(""), S(""), false, false);
347112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S(""), S("abcde"), false, true);
357112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S(""), S("abcdefghij"), false, true);
367112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S(""), S("abcdefghijklmnopqrst"), false, true);
377112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcde"), S(""), true, false);
387112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcde"), S("abcde"), false, false);
397112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcde"), S("abcdefghij"), false, true);
407112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcde"), S("abcdefghijklmnopqrst"), false, true);
417112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghij"), S(""), true, false);
427112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghij"), S("abcde"), true, false);
437112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghij"), S("abcdefghij"), false, false);
447112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghij"), S("abcdefghijklmnopqrst"), false, true);
457112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghijklmnopqrst"), S(""), true, false);
467112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghijklmnopqrst"), S("abcde"), true, false);
477112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghijklmnopqrst"), S("abcdefghij"), true, false);
487112dae6acac544a0271a85d95342c583441e2d1Dan Albert    test(S("abcdefghijklmnopqrst"), S("abcdefghijklmnopqrst"), false, false);
497112dae6acac544a0271a85d95342c583441e2d1Dan Albert    }
507112dae6acac544a0271a85d95342c583441e2d1Dan Albert
517112dae6acac544a0271a85d95342c583441e2d1Dan Albert#if _LIBCPP_STD_VER > 11
527112dae6acac544a0271a85d95342c583441e2d1Dan Albert    {
537112dae6acac544a0271a85d95342c583441e2d1Dan Albert    typedef std::experimental::basic_string_view<char, constexpr_char_traits<char>> SV;
547112dae6acac544a0271a85d95342c583441e2d1Dan Albert    constexpr SV  sv1;
557112dae6acac544a0271a85d95342c583441e2d1Dan Albert    constexpr SV  sv2 { "abcde", 5 };
567112dae6acac544a0271a85d95342c583441e2d1Dan Albert
577112dae6acac544a0271a85d95342c583441e2d1Dan Albert    static_assert (!(sv1 > sv1), "" );
587112dae6acac544a0271a85d95342c583441e2d1Dan Albert    static_assert (!(sv2 > sv2), "" );
597112dae6acac544a0271a85d95342c583441e2d1Dan Albert
607112dae6acac544a0271a85d95342c583441e2d1Dan Albert    static_assert (!(sv1 > sv2), "" );
617112dae6acac544a0271a85d95342c583441e2d1Dan Albert    static_assert (  sv2 > sv1, "" );
627112dae6acac544a0271a85d95342c583441e2d1Dan Albert    }
637112dae6acac544a0271a85d95342c583441e2d1Dan Albert#endif
647112dae6acac544a0271a85d95342c583441e2d1Dan Albert}
65