xref: /llvm-project/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp (revision 6e1dcc9335116f650d68cdbed12bbb34a99b2d9b)
1800259c9SMarshall Clow //===----------------------------------------------------------------------===//
2800259c9SMarshall 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
6800259c9SMarshall Clow //
7800259c9SMarshall Clow //===----------------------------------------------------------------------===//
831cbe0f2SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17
9800259c9SMarshall Clow 
10800259c9SMarshall Clow // <string>
11800259c9SMarshall Clow 
12425620ccSNikolas Klauser // constexpr bool starts_with(const CharT *x) const;
13800259c9SMarshall Clow 
14800259c9SMarshall Clow #include <string>
15800259c9SMarshall Clow #include <cassert>
16800259c9SMarshall Clow 
17800259c9SMarshall Clow #include "test_macros.h"
18800259c9SMarshall Clow 
19*6e1dcc93SLouis Dionne template <class S>
test_string()20*6e1dcc93SLouis Dionne constexpr void test_string() {
21800259c9SMarshall Clow   const char* s = "abcde";
22800259c9SMarshall Clow   S s0{};
23800259c9SMarshall Clow   S s1{s, 1};
24800259c9SMarshall Clow   S s2{s, 2};
25800259c9SMarshall Clow   //     S  s3 { s, 3 };
26800259c9SMarshall Clow   //     S  s4 { s, 4 };
27800259c9SMarshall Clow   //     S  s5 { s, 5 };
28800259c9SMarshall Clow   S sNot{"def", 3};
29800259c9SMarshall Clow 
30800259c9SMarshall Clow   LIBCPP_ASSERT_NOEXCEPT(s0.starts_with(""));
31800259c9SMarshall Clow 
32800259c9SMarshall Clow   assert(s0.starts_with(""));
33800259c9SMarshall Clow   assert(!s0.starts_with("a"));
34800259c9SMarshall Clow 
35800259c9SMarshall Clow   assert(s1.starts_with(""));
36800259c9SMarshall Clow   assert(s1.starts_with("a"));
37800259c9SMarshall Clow   assert(!s1.starts_with("ab"));
38800259c9SMarshall Clow   assert(!s1.starts_with("abc"));
39800259c9SMarshall Clow   assert(!s1.starts_with("abcd"));
40800259c9SMarshall Clow   assert(!s1.starts_with("abcde"));
41800259c9SMarshall Clow   assert(!s1.starts_with("def"));
42800259c9SMarshall Clow 
43800259c9SMarshall Clow   assert(s2.starts_with(""));
44800259c9SMarshall Clow   assert(s2.starts_with("a"));
45800259c9SMarshall Clow   assert(s2.starts_with("ab"));
46800259c9SMarshall Clow   assert(!s2.starts_with("abc"));
47800259c9SMarshall Clow   assert(!s2.starts_with("abcd"));
48800259c9SMarshall Clow   assert(!s2.starts_with("abcde"));
49800259c9SMarshall Clow   assert(!s2.starts_with("def"));
50800259c9SMarshall Clow 
51800259c9SMarshall Clow   assert(sNot.starts_with(""));
52800259c9SMarshall Clow   assert(!sNot.starts_with("a"));
53800259c9SMarshall Clow   assert(!sNot.starts_with("ab"));
54800259c9SMarshall Clow   assert(!sNot.starts_with("abc"));
55800259c9SMarshall Clow   assert(!sNot.starts_with("abcd"));
56800259c9SMarshall Clow   assert(!sNot.starts_with("abcde"));
57800259c9SMarshall Clow   assert(sNot.starts_with("def"));
58800259c9SMarshall Clow }
592df59c50SJF Bastien 
test()60*6e1dcc93SLouis Dionne constexpr bool test() {
61*6e1dcc93SLouis Dionne   test_string<std::string>();
62*6e1dcc93SLouis Dionne 
63c515b652SNikolas Klauser   return true;
64c515b652SNikolas Klauser }
65c515b652SNikolas Klauser 
main(int,char **)66a40bada9SBrendan Emery int main(int, char**) {
67c515b652SNikolas Klauser   test();
68425620ccSNikolas Klauser   static_assert(test());
69c515b652SNikolas Klauser 
702df59c50SJF Bastien   return 0;
71800259c9SMarshall Clow }
72