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-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)
10
11 // <string_view>
12
13 // constexpr size_type find(const charT* s, size_type pos, size_type n) const;
14
15 #include <string_view>
16 #include <cassert>
17
18 #include "test_macros.h"
19 #include "constexpr_char_traits.h"
20
21 template <class S>
test(const S & s,const typename S::value_type * str,typename S::size_type pos,typename S::size_type n,typename S::size_type x)22 void test(const S& s,
23 const typename S::value_type* str,
24 typename S::size_type pos,
25 typename S::size_type n,
26 typename S::size_type x) {
27 LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos, n));
28 assert(s.find(str, pos, n) == x);
29 if (x != S::npos)
30 assert(pos <= x && x + n <= s.size());
31 }
32
33 template <class S>
test0()34 void test0() {
35 test(S(""), "", 0, 0, 0);
36 test(S(""), "abcde", 0, 0, 0);
37 test(S(""), "abcde", 0, 1, S::npos);
38 test(S(""), "abcde", 0, 2, S::npos);
39 test(S(""), "abcde", 0, 4, S::npos);
40 test(S(""), "abcde", 0, 5, S::npos);
41 test(S(""), "abcdeabcde", 0, 0, 0);
42 test(S(""), "abcdeabcde", 0, 1, S::npos);
43 test(S(""), "abcdeabcde", 0, 5, S::npos);
44 test(S(""), "abcdeabcde", 0, 9, S::npos);
45 test(S(""), "abcdeabcde", 0, 10, S::npos);
46 test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
47 test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
48 test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
49 test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
50 test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
51 test(S(""), "", 1, 0, S::npos);
52 test(S(""), "abcde", 1, 0, S::npos);
53 test(S(""), "abcde", 1, 1, S::npos);
54 test(S(""), "abcde", 1, 2, S::npos);
55 test(S(""), "abcde", 1, 4, S::npos);
56 test(S(""), "abcde", 1, 5, S::npos);
57 test(S(""), "abcdeabcde", 1, 0, S::npos);
58 test(S(""), "abcdeabcde", 1, 1, S::npos);
59 test(S(""), "abcdeabcde", 1, 5, S::npos);
60 test(S(""), "abcdeabcde", 1, 9, S::npos);
61 test(S(""), "abcdeabcde", 1, 10, S::npos);
62 test(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos);
63 test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
64 test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
65 test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
66 test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
67 test(S("abcde"), "", 0, 0, 0);
68 test(S("abcde"), "abcde", 0, 0, 0);
69 test(S("abcde"), "abcde", 0, 1, 0);
70 test(S("abcde"), "abcde", 0, 2, 0);
71 test(S("abcde"), "abcde", 0, 4, 0);
72 test(S("abcde"), "abcde", 0, 5, 0);
73 test(S("abcde"), "abcdeabcde", 0, 0, 0);
74 test(S("abcde"), "abcdeabcde", 0, 1, 0);
75 test(S("abcde"), "abcdeabcde", 0, 5, 0);
76 test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
77 test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
78 test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
79 test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
80 test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
81 test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
82 test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
83 test(S("abcde"), "", 1, 0, 1);
84 test(S("abcde"), "abcde", 1, 0, 1);
85 test(S("abcde"), "abcde", 1, 1, S::npos);
86 test(S("abcde"), "abcde", 1, 2, S::npos);
87 test(S("abcde"), "abcde", 1, 4, S::npos);
88 test(S("abcde"), "abcde", 1, 5, S::npos);
89 test(S("abcde"), "abcdeabcde", 1, 0, 1);
90 test(S("abcde"), "abcdeabcde", 1, 1, S::npos);
91 test(S("abcde"), "abcdeabcde", 1, 5, S::npos);
92 test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
93 test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
94 test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
95 test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
96 test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
97 test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
98 test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
99 test(S("abcde"), "", 2, 0, 2);
100 test(S("abcde"), "abcde", 2, 0, 2);
101 test(S("abcde"), "abcde", 2, 1, S::npos);
102 test(S("abcde"), "abcde", 2, 2, S::npos);
103 test(S("abcde"), "abcde", 2, 4, S::npos);
104 test(S("abcde"), "abcde", 2, 5, S::npos);
105 test(S("abcde"), "abcdeabcde", 2, 0, 2);
106 test(S("abcde"), "abcdeabcde", 2, 1, S::npos);
107 test(S("abcde"), "abcdeabcde", 2, 5, S::npos);
108 test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
109 test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
110 test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
111 test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos);
112 test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
113 test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
114 test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
115 test(S("abcde"), "", 4, 0, 4);
116 test(S("abcde"), "abcde", 4, 0, 4);
117 test(S("abcde"), "abcde", 4, 1, S::npos);
118 test(S("abcde"), "abcde", 4, 2, S::npos);
119 test(S("abcde"), "abcde", 4, 4, S::npos);
120 test(S("abcde"), "abcde", 4, 5, S::npos);
121 test(S("abcde"), "abcdeabcde", 4, 0, 4);
122 test(S("abcde"), "abcdeabcde", 4, 1, S::npos);
123 test(S("abcde"), "abcdeabcde", 4, 5, S::npos);
124 test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
125 test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
126 test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
127 test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos);
128 test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
129 test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
130 test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
131 test(S("abcde"), "", 5, 0, 5);
132 test(S("abcde"), "abcde", 5, 0, 5);
133 test(S("abcde"), "abcde", 5, 1, S::npos);
134 test(S("abcde"), "abcde", 5, 2, S::npos);
135 }
136
137 template <class S>
test1()138 void test1() {
139 test(S("abcde"), "abcde", 5, 4, S::npos);
140 test(S("abcde"), "abcde", 5, 5, S::npos);
141 test(S("abcde"), "abcdeabcde", 5, 0, 5);
142 test(S("abcde"), "abcdeabcde", 5, 1, S::npos);
143 test(S("abcde"), "abcdeabcde", 5, 5, S::npos);
144 test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
145 test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
146 test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
147 test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos);
148 test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
149 test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
150 test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
151 test(S("abcde"), "", 6, 0, S::npos);
152 test(S("abcde"), "abcde", 6, 0, S::npos);
153 test(S("abcde"), "abcde", 6, 1, S::npos);
154 test(S("abcde"), "abcde", 6, 2, S::npos);
155 test(S("abcde"), "abcde", 6, 4, S::npos);
156 test(S("abcde"), "abcde", 6, 5, S::npos);
157 test(S("abcde"), "abcdeabcde", 6, 0, S::npos);
158 test(S("abcde"), "abcdeabcde", 6, 1, S::npos);
159 test(S("abcde"), "abcdeabcde", 6, 5, S::npos);
160 test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
161 test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
162 test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos);
163 test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos);
164 test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
165 test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
166 test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
167 test(S("abcdeabcde"), "", 0, 0, 0);
168 test(S("abcdeabcde"), "abcde", 0, 0, 0);
169 test(S("abcdeabcde"), "abcde", 0, 1, 0);
170 test(S("abcdeabcde"), "abcde", 0, 2, 0);
171 test(S("abcdeabcde"), "abcde", 0, 4, 0);
172 test(S("abcdeabcde"), "abcde", 0, 5, 0);
173 test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
174 test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
175 test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
176 test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
177 test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
178 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
179 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
180 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
181 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
182 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
183 test(S("abcdeabcde"), "", 1, 0, 1);
184 test(S("abcdeabcde"), "abcde", 1, 0, 1);
185 test(S("abcdeabcde"), "abcde", 1, 1, 5);
186 test(S("abcdeabcde"), "abcde", 1, 2, 5);
187 test(S("abcdeabcde"), "abcde", 1, 4, 5);
188 test(S("abcdeabcde"), "abcde", 1, 5, 5);
189 test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
190 test(S("abcdeabcde"), "abcdeabcde", 1, 1, 5);
191 test(S("abcdeabcde"), "abcdeabcde", 1, 5, 5);
192 test(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos);
193 test(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos);
194 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
195 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
196 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
197 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
198 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
199 test(S("abcdeabcde"), "", 5, 0, 5);
200 test(S("abcdeabcde"), "abcde", 5, 0, 5);
201 test(S("abcdeabcde"), "abcde", 5, 1, 5);
202 test(S("abcdeabcde"), "abcde", 5, 2, 5);
203 test(S("abcdeabcde"), "abcde", 5, 4, 5);
204 test(S("abcdeabcde"), "abcde", 5, 5, 5);
205 test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
206 test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
207 test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
208 test(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos);
209 test(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos);
210 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
211 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
212 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
213 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
214 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
215 test(S("abcdeabcde"), "", 9, 0, 9);
216 test(S("abcdeabcde"), "abcde", 9, 0, 9);
217 test(S("abcdeabcde"), "abcde", 9, 1, S::npos);
218 test(S("abcdeabcde"), "abcde", 9, 2, S::npos);
219 test(S("abcdeabcde"), "abcde", 9, 4, S::npos);
220 test(S("abcdeabcde"), "abcde", 9, 5, S::npos);
221 test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
222 test(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos);
223 test(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos);
224 test(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos);
225 test(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos);
226 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
227 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos);
228 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos);
229 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
230 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
231 test(S("abcdeabcde"), "", 10, 0, 10);
232 test(S("abcdeabcde"), "abcde", 10, 0, 10);
233 test(S("abcdeabcde"), "abcde", 10, 1, S::npos);
234 test(S("abcdeabcde"), "abcde", 10, 2, S::npos);
235 test(S("abcdeabcde"), "abcde", 10, 4, S::npos);
236 test(S("abcdeabcde"), "abcde", 10, 5, S::npos);
237 test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
238 test(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos);
239 }
240
241 template <class S>
test2()242 void test2() {
243 test(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos);
244 test(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos);
245 test(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos);
246 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
247 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos);
248 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos);
249 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
250 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
251 test(S("abcdeabcde"), "", 11, 0, S::npos);
252 test(S("abcdeabcde"), "abcde", 11, 0, S::npos);
253 test(S("abcdeabcde"), "abcde", 11, 1, S::npos);
254 test(S("abcdeabcde"), "abcde", 11, 2, S::npos);
255 test(S("abcdeabcde"), "abcde", 11, 4, S::npos);
256 test(S("abcdeabcde"), "abcde", 11, 5, S::npos);
257 test(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos);
258 test(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos);
259 test(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos);
260 test(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos);
261 test(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos);
262 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos);
263 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos);
264 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos);
265 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
266 test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
267 test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
268 test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
269 test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
270 test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
271 test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
272 test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
273 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
274 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
275 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
276 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
277 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
278 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
279 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
280 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
281 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
282 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
283 test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
284 test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
285 test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5);
286 test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5);
287 test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5);
288 test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5);
289 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
290 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5);
291 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5);
292 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5);
293 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5);
294 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
295 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
296 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5);
297 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
298 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
299 test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
300 test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
301 test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
302 test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
303 test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
304 test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
305 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
306 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
307 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
308 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
309 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
310 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
311 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
312 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
313 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
314 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
315 test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
316 test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
317 test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos);
318 test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos);
319 test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos);
320 test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos);
321 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
322 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos);
323 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos);
324 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos);
325 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos);
326 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
327 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos);
328 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos);
329 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos);
330 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos);
331 test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
332 test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
333 test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos);
334 test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos);
335 test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos);
336 test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos);
337 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
338 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos);
339 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos);
340 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos);
341 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos);
342 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
343 }
344
345 template <class S>
test3()346 void test3() {
347 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, S::npos);
348 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, S::npos);
349 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, S::npos);
350 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, S::npos);
351 test(S("abcdeabcdeabcdeabcde"), "", 21, 0, S::npos);
352 test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, S::npos);
353 test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, S::npos);
354 test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, S::npos);
355 test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, S::npos);
356 test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, S::npos);
357 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, S::npos);
358 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, S::npos);
359 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, S::npos);
360 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, S::npos);
361 test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, S::npos);
362 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, S::npos);
363 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, S::npos);
364 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, S::npos);
365 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, S::npos);
366 test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, S::npos);
367 }
368
main(int,char **)369 int main(int, char**) {
370 {
371 typedef std::string_view S;
372 test0<S>();
373 test1<S>();
374 test2<S>();
375 test3<S>();
376 }
377
378 #if TEST_STD_VER > 11
379 {
380 typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
381 constexpr SV sv1;
382 constexpr SV sv2{"abcde", 5};
383
384 static_assert(sv1.find("", 0, 0) == 0, "");
385 static_assert(sv1.find("abcde", 0, 0) == 0, "");
386 static_assert(sv1.find("abcde", 0, 1) == SV::npos, "");
387 static_assert(sv2.find("", 0, 0) == 0, "");
388 static_assert(sv2.find("abcde", 0, 0) == 0, "");
389 static_assert(sv2.find("abcde", 0, 1) == 0, "");
390 }
391 #endif
392
393 return 0;
394 }
395