106 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// <string_view>12 13// constexpr bool ends_with(string_view x) const noexcept;14 15#include <string_view>16#include <cassert>17 18#include "test_macros.h"19#include "constexpr_char_traits.h"20 21int main(int, char**) {22 {23 typedef std::string_view SV;24 const char* s = "abcde";25 SV sv0;26 SV sv1{s + 4, 1};27 SV sv2{s + 3, 2};28 SV sv3{s + 2, 3};29 SV sv4{s + 1, 4};30 SV sv5{s, 5};31 SV svNot{"def", 3};32 33 ASSERT_NOEXCEPT(sv0.ends_with(sv0));34 35 assert(sv0.ends_with(sv0));36 assert(!sv0.ends_with(sv1));37 38 assert(sv1.ends_with(sv0));39 assert(sv1.ends_with(sv1));40 assert(!sv1.ends_with(sv2));41 assert(!sv1.ends_with(sv3));42 assert(!sv1.ends_with(sv4));43 assert(!sv1.ends_with(sv5));44 assert(!sv1.ends_with(svNot));45 46 assert(sv2.ends_with(sv0));47 assert(sv2.ends_with(sv1));48 assert(sv2.ends_with(sv2));49 assert(!sv2.ends_with(sv3));50 assert(!sv2.ends_with(sv4));51 assert(!sv2.ends_with(sv5));52 assert(!sv2.ends_with(svNot));53 54 assert(svNot.ends_with(sv0));55 assert(!svNot.ends_with(sv1));56 assert(!svNot.ends_with(sv2));57 assert(!svNot.ends_with(sv3));58 assert(!svNot.ends_with(sv4));59 assert(!svNot.ends_with(sv5));60 assert(svNot.ends_with(svNot));61 }62 63#if TEST_STD_VER > 1164 {65 typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;66 constexpr const char* s = "abcde";67 constexpr SV sv0{};68 constexpr SV sv1{s + 4, 1};69 constexpr SV sv2{s + 3, 2};70 constexpr SV sv3{s + 2, 3};71 constexpr SV sv4{s + 1, 4};72 constexpr SV sv5{s, 5};73 constexpr SV svNot{"def", 3};74 75 static_assert(sv0.ends_with(sv0), "");76 static_assert(!sv0.ends_with(sv1), "");77 78 static_assert(sv1.ends_with(sv0), "");79 static_assert(sv1.ends_with(sv1), "");80 static_assert(!sv1.ends_with(sv2), "");81 static_assert(!sv1.ends_with(sv3), "");82 static_assert(!sv1.ends_with(sv4), "");83 static_assert(!sv1.ends_with(sv5), "");84 static_assert(!sv1.ends_with(svNot), "");85 86 static_assert(sv2.ends_with(sv0), "");87 static_assert(sv2.ends_with(sv1), "");88 static_assert(sv2.ends_with(sv2), "");89 static_assert(!sv2.ends_with(sv3), "");90 static_assert(!sv2.ends_with(sv4), "");91 static_assert(!sv2.ends_with(sv5), "");92 static_assert(!sv2.ends_with(svNot), "");93 94 static_assert(svNot.ends_with(sv0), "");95 static_assert(!svNot.ends_with(sv1), "");96 static_assert(!svNot.ends_with(sv2), "");97 static_assert(!svNot.ends_with(sv3), "");98 static_assert(!svNot.ends_with(sv4), "");99 static_assert(!svNot.ends_with(sv5), "");100 static_assert(svNot.ends_with(svNot), "");101 }102#endif103 104 return 0;105}106