1 //===----------------------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
11 // template<class ForwardIterator1, class ForwardIterator2>
12 // constexpr bool // constexpr after C++17
13 // is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
14 // ForwardIterator2 first2);
19 #include "test_iterators.h"
21 #include "test_macros.h"
24 TEST_CONSTEXPR
bool test_constexpr() {
29 return !std::is_permutation(std::begin(ia
), std::end(ia
), std::begin(ib
))
30 && !std::is_permutation(std::begin(ia
), std::end(ia
), std::begin(ib
), std::end(ib
))
31 && std::is_permutation(std::begin(ib
), std::end(ib
), std::begin(ic
))
32 && std::is_permutation(std::begin(ib
), std::end(ib
), std::begin(ic
), std::end(ic
))
33 && !std::is_permutation(std::begin(ic
), std::end(ic
), std::begin(id
), std::end(id
))
43 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
44 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
45 forward_iterator
<const int*>(ia
+ 0),
46 forward_iterator
<const int*>(ib
)) == true);
47 #if TEST_STD_VER >= 14
48 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
49 forward_iterator
<const int*>(ia
+ 0),
50 forward_iterator
<const int*>(ib
),
51 forward_iterator
<const int*>(ib
+ 0)) == true);
53 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
54 forward_iterator
<const int*>(ia
+ sa
),
55 forward_iterator
<const int*>(ib
)) == true);
56 #if TEST_STD_VER >= 14
57 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
58 forward_iterator
<const int*>(ia
+ sa
),
59 forward_iterator
<const int*>(ib
),
60 forward_iterator
<const int*>(ib
+ sa
)) == true);
61 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
62 forward_iterator
<const int*>(ia
+ sa
),
63 forward_iterator
<const int*>(ib
),
64 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
70 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
71 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
72 forward_iterator
<const int*>(ia
+ sa
),
73 forward_iterator
<const int*>(ib
)) == false);
74 #if TEST_STD_VER >= 14
75 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
76 forward_iterator
<const int*>(ia
+ sa
),
77 forward_iterator
<const int*>(ib
),
78 forward_iterator
<const int*>(ib
+ sa
)) == false);
83 const int ia
[] = {0, 0};
84 const int ib
[] = {0, 0};
85 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
86 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
87 forward_iterator
<const int*>(ia
+ sa
),
88 forward_iterator
<const int*>(ib
)) == true);
89 #if TEST_STD_VER >= 14
90 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
91 forward_iterator
<const int*>(ia
+ sa
),
92 forward_iterator
<const int*>(ib
),
93 forward_iterator
<const int*>(ib
+ sa
)) == true);
94 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
95 forward_iterator
<const int*>(ia
+ sa
),
96 forward_iterator
<const int*>(ib
),
97 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
101 const int ia
[] = {0, 0};
102 const int ib
[] = {0, 1};
103 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
104 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
105 forward_iterator
<const int*>(ia
+ sa
),
106 forward_iterator
<const int*>(ib
)) == false);
107 #if TEST_STD_VER >= 14
108 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
109 forward_iterator
<const int*>(ia
+ sa
),
110 forward_iterator
<const int*>(ib
),
111 forward_iterator
<const int*>(ib
+ sa
)) == false);
115 const int ia
[] = {0, 0};
116 const int ib
[] = {1, 0};
117 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
118 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
119 forward_iterator
<const int*>(ia
+ sa
),
120 forward_iterator
<const int*>(ib
)) == false);
121 #if TEST_STD_VER >= 14
122 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
123 forward_iterator
<const int*>(ia
+ sa
),
124 forward_iterator
<const int*>(ib
),
125 forward_iterator
<const int*>(ib
+ sa
)) == false);
129 const int ia
[] = {0, 0};
130 const int ib
[] = {1, 1};
131 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
132 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
133 forward_iterator
<const int*>(ia
+ sa
),
134 forward_iterator
<const int*>(ib
)) == false);
135 #if TEST_STD_VER >= 14
136 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
137 forward_iterator
<const int*>(ia
+ sa
),
138 forward_iterator
<const int*>(ib
),
139 forward_iterator
<const int*>(ib
+ sa
)) == false);
143 const int ia
[] = {0, 1};
144 const int ib
[] = {0, 0};
145 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
146 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
147 forward_iterator
<const int*>(ia
+ sa
),
148 forward_iterator
<const int*>(ib
)) == false);
149 #if TEST_STD_VER >= 14
150 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
151 forward_iterator
<const int*>(ia
+ sa
),
152 forward_iterator
<const int*>(ib
),
153 forward_iterator
<const int*>(ib
+ sa
)) == false);
157 const int ia
[] = {0, 1};
158 const int ib
[] = {0, 1};
159 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
160 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
161 forward_iterator
<const int*>(ia
+ sa
),
162 forward_iterator
<const int*>(ib
)) == true);
163 #if TEST_STD_VER >= 14
164 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
165 forward_iterator
<const int*>(ia
+ sa
),
166 forward_iterator
<const int*>(ib
),
167 forward_iterator
<const int*>(ib
+ sa
)) == true);
168 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
169 forward_iterator
<const int*>(ia
+ sa
),
170 forward_iterator
<const int*>(ib
),
171 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
175 const int ia
[] = {0, 1};
176 const int ib
[] = {1, 0};
177 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
178 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
179 forward_iterator
<const int*>(ia
+ sa
),
180 forward_iterator
<const int*>(ib
)) == true);
181 #if TEST_STD_VER >= 14
182 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
183 forward_iterator
<const int*>(ia
+ sa
),
184 forward_iterator
<const int*>(ib
),
185 forward_iterator
<const int*>(ib
+ sa
)) == true);
189 const int ia
[] = {0, 1};
190 const int ib
[] = {1, 1};
191 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
192 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
193 forward_iterator
<const int*>(ia
+ sa
),
194 forward_iterator
<const int*>(ib
)) == false);
195 #if TEST_STD_VER >= 14
196 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
197 forward_iterator
<const int*>(ia
+ sa
),
198 forward_iterator
<const int*>(ib
),
199 forward_iterator
<const int*>(ib
+ sa
)) == false);
203 const int ia
[] = {1, 0};
204 const int ib
[] = {0, 0};
205 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
206 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
207 forward_iterator
<const int*>(ia
+ sa
),
208 forward_iterator
<const int*>(ib
)) == false);
209 #if TEST_STD_VER >= 14
210 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
211 forward_iterator
<const int*>(ia
+ sa
),
212 forward_iterator
<const int*>(ib
),
213 forward_iterator
<const int*>(ib
+ sa
)) == false);
217 const int ia
[] = {1, 0};
218 const int ib
[] = {0, 1};
219 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
220 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
221 forward_iterator
<const int*>(ia
+ sa
),
222 forward_iterator
<const int*>(ib
)) == true);
223 #if TEST_STD_VER >= 14
224 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
225 forward_iterator
<const int*>(ia
+ sa
),
226 forward_iterator
<const int*>(ib
),
227 forward_iterator
<const int*>(ib
+ sa
)) == true);
231 const int ia
[] = {1, 0};
232 const int ib
[] = {1, 0};
233 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
234 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
235 forward_iterator
<const int*>(ia
+ sa
),
236 forward_iterator
<const int*>(ib
)) == true);
237 #if TEST_STD_VER >= 14
238 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
239 forward_iterator
<const int*>(ia
+ sa
),
240 forward_iterator
<const int*>(ib
),
241 forward_iterator
<const int*>(ib
+ sa
)) == true);
245 const int ia
[] = {1, 0};
246 const int ib
[] = {1, 1};
247 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
248 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
249 forward_iterator
<const int*>(ia
+ sa
),
250 forward_iterator
<const int*>(ib
)) == false);
251 #if TEST_STD_VER >= 14
252 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
253 forward_iterator
<const int*>(ia
+ sa
),
254 forward_iterator
<const int*>(ib
),
255 forward_iterator
<const int*>(ib
+ sa
)) == false);
259 const int ia
[] = {1, 1};
260 const int ib
[] = {0, 0};
261 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
262 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
263 forward_iterator
<const int*>(ia
+ sa
),
264 forward_iterator
<const int*>(ib
)) == false);
265 #if TEST_STD_VER >= 14
266 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
267 forward_iterator
<const int*>(ia
+ sa
),
268 forward_iterator
<const int*>(ib
),
269 forward_iterator
<const int*>(ib
+ sa
)) == false);
273 const int ia
[] = {1, 1};
274 const int ib
[] = {0, 1};
275 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
276 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
277 forward_iterator
<const int*>(ia
+ sa
),
278 forward_iterator
<const int*>(ib
)) == false);
279 #if TEST_STD_VER >= 14
280 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
281 forward_iterator
<const int*>(ia
+ sa
),
282 forward_iterator
<const int*>(ib
),
283 forward_iterator
<const int*>(ib
+ sa
)) == false);
287 const int ia
[] = {1, 1};
288 const int ib
[] = {1, 0};
289 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
290 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
291 forward_iterator
<const int*>(ia
+ sa
),
292 forward_iterator
<const int*>(ib
)) == false);
293 #if TEST_STD_VER >= 14
294 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
295 forward_iterator
<const int*>(ia
+ sa
),
296 forward_iterator
<const int*>(ib
),
297 forward_iterator
<const int*>(ib
+ sa
)) == false);
301 const int ia
[] = {1, 1};
302 const int ib
[] = {1, 1};
303 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
304 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
305 forward_iterator
<const int*>(ia
+ sa
),
306 forward_iterator
<const int*>(ib
)) == true);
307 #if TEST_STD_VER >= 14
308 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
309 forward_iterator
<const int*>(ia
+ sa
),
310 forward_iterator
<const int*>(ib
),
311 forward_iterator
<const int*>(ib
+ sa
)) == true);
316 const int ia
[] = {0, 0, 0};
317 const int ib
[] = {1, 0, 0};
318 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
319 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
320 forward_iterator
<const int*>(ia
+ sa
),
321 forward_iterator
<const int*>(ib
)) == false);
322 #if TEST_STD_VER >= 14
323 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
324 forward_iterator
<const int*>(ia
+ sa
),
325 forward_iterator
<const int*>(ib
),
326 forward_iterator
<const int*>(ib
+ sa
)) == false);
330 const int ia
[] = {0, 0, 0};
331 const int ib
[] = {1, 0, 1};
332 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
333 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
334 forward_iterator
<const int*>(ia
+ sa
),
335 forward_iterator
<const int*>(ib
)) == false);
336 #if TEST_STD_VER >= 14
337 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
338 forward_iterator
<const int*>(ia
+ sa
),
339 forward_iterator
<const int*>(ib
),
340 forward_iterator
<const int*>(ib
+ sa
)) == false);
344 const int ia
[] = {0, 0, 0};
345 const int ib
[] = {1, 0, 2};
346 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
347 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
348 forward_iterator
<const int*>(ia
+ sa
),
349 forward_iterator
<const int*>(ib
)) == false);
350 #if TEST_STD_VER >= 14
351 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
352 forward_iterator
<const int*>(ia
+ sa
),
353 forward_iterator
<const int*>(ib
),
354 forward_iterator
<const int*>(ib
+ sa
)) == false);
358 const int ia
[] = {0, 0, 0};
359 const int ib
[] = {1, 1, 0};
360 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
361 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
362 forward_iterator
<const int*>(ia
+ sa
),
363 forward_iterator
<const int*>(ib
)) == false);
364 #if TEST_STD_VER >= 14
365 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
366 forward_iterator
<const int*>(ia
+ sa
),
367 forward_iterator
<const int*>(ib
),
368 forward_iterator
<const int*>(ib
+ sa
)) == false);
372 const int ia
[] = {0, 0, 0};
373 const int ib
[] = {1, 1, 1};
374 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
375 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
376 forward_iterator
<const int*>(ia
+ sa
),
377 forward_iterator
<const int*>(ib
)) == false);
378 #if TEST_STD_VER >= 14
379 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
380 forward_iterator
<const int*>(ia
+ sa
),
381 forward_iterator
<const int*>(ib
),
382 forward_iterator
<const int*>(ib
+ sa
)) == false);
386 const int ia
[] = {0, 0, 0};
387 const int ib
[] = {1, 1, 2};
388 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
389 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
390 forward_iterator
<const int*>(ia
+ sa
),
391 forward_iterator
<const int*>(ib
)) == false);
392 #if TEST_STD_VER >= 14
393 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
394 forward_iterator
<const int*>(ia
+ sa
),
395 forward_iterator
<const int*>(ib
),
396 forward_iterator
<const int*>(ib
+ sa
)) == false);
400 const int ia
[] = {0, 0, 0};
401 const int ib
[] = {1, 2, 0};
402 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
403 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
404 forward_iterator
<const int*>(ia
+ sa
),
405 forward_iterator
<const int*>(ib
)) == false);
406 #if TEST_STD_VER >= 14
407 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
408 forward_iterator
<const int*>(ia
+ sa
),
409 forward_iterator
<const int*>(ib
),
410 forward_iterator
<const int*>(ib
+ sa
)) == false);
414 const int ia
[] = {0, 0, 0};
415 const int ib
[] = {1, 2, 1};
416 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
417 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
418 forward_iterator
<const int*>(ia
+ sa
),
419 forward_iterator
<const int*>(ib
)) == false);
420 #if TEST_STD_VER >= 14
421 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
422 forward_iterator
<const int*>(ia
+ sa
),
423 forward_iterator
<const int*>(ib
),
424 forward_iterator
<const int*>(ib
+ sa
)) == false);
428 const int ia
[] = {0, 0, 0};
429 const int ib
[] = {1, 2, 2};
430 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
431 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
432 forward_iterator
<const int*>(ia
+ sa
),
433 forward_iterator
<const int*>(ib
)) == false);
434 #if TEST_STD_VER >= 14
435 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
436 forward_iterator
<const int*>(ia
+ sa
),
437 forward_iterator
<const int*>(ib
),
438 forward_iterator
<const int*>(ib
+ sa
)) == false);
442 const int ia
[] = {0, 0, 1};
443 const int ib
[] = {1, 0, 0};
444 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
445 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
446 forward_iterator
<const int*>(ia
+ sa
),
447 forward_iterator
<const int*>(ib
)) == true);
448 #if TEST_STD_VER >= 14
449 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
450 forward_iterator
<const int*>(ia
+ sa
),
451 forward_iterator
<const int*>(ib
),
452 forward_iterator
<const int*>(ib
+ sa
)) == true);
453 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
454 forward_iterator
<const int*>(ia
+ sa
),
455 forward_iterator
<const int*>(ib
),
456 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
460 const int ia
[] = {0, 0, 1};
461 const int ib
[] = {1, 0, 1};
462 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
463 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
464 forward_iterator
<const int*>(ia
+ sa
),
465 forward_iterator
<const int*>(ib
)) == false);
466 #if TEST_STD_VER >= 14
467 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
468 forward_iterator
<const int*>(ia
+ sa
),
469 forward_iterator
<const int*>(ib
),
470 forward_iterator
<const int*>(ib
+ sa
)) == false);
474 const int ia
[] = {0, 1, 2};
475 const int ib
[] = {1, 0, 2};
476 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
477 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
478 forward_iterator
<const int*>(ia
+ sa
),
479 forward_iterator
<const int*>(ib
)) == true);
480 #if TEST_STD_VER >= 14
481 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
482 forward_iterator
<const int*>(ia
+ sa
),
483 forward_iterator
<const int*>(ib
),
484 forward_iterator
<const int*>(ib
+ sa
)) == true);
485 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
486 forward_iterator
<const int*>(ia
+ sa
),
487 forward_iterator
<const int*>(ib
),
488 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
492 const int ia
[] = {0, 1, 2};
493 const int ib
[] = {1, 2, 0};
494 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
495 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
496 forward_iterator
<const int*>(ia
+ sa
),
497 forward_iterator
<const int*>(ib
)) == true);
498 #if TEST_STD_VER >= 14
499 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
500 forward_iterator
<const int*>(ia
+ sa
),
501 forward_iterator
<const int*>(ib
),
502 forward_iterator
<const int*>(ib
+ sa
)) == true);
503 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
504 forward_iterator
<const int*>(ia
+ sa
),
505 forward_iterator
<const int*>(ib
),
506 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
510 const int ia
[] = {0, 1, 2};
511 const int ib
[] = {2, 1, 0};
512 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
513 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
514 forward_iterator
<const int*>(ia
+ sa
),
515 forward_iterator
<const int*>(ib
)) == true);
516 #if TEST_STD_VER >= 14
517 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
518 forward_iterator
<const int*>(ia
+ sa
),
519 forward_iterator
<const int*>(ib
),
520 forward_iterator
<const int*>(ib
+ sa
)) == true);
521 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
522 forward_iterator
<const int*>(ia
+ sa
),
523 forward_iterator
<const int*>(ib
),
524 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
528 const int ia
[] = {0, 1, 2};
529 const int ib
[] = {2, 0, 1};
530 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
531 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
532 forward_iterator
<const int*>(ia
+ sa
),
533 forward_iterator
<const int*>(ib
)) == true);
534 #if TEST_STD_VER >= 14
535 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
536 forward_iterator
<const int*>(ia
+ sa
),
537 forward_iterator
<const int*>(ib
),
538 forward_iterator
<const int*>(ib
+ sa
)) == true);
539 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
540 forward_iterator
<const int*>(ia
+ sa
),
541 forward_iterator
<const int*>(ib
),
542 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
546 const int ia
[] = {0, 0, 1};
547 const int ib
[] = {1, 0, 1};
548 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
549 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
550 forward_iterator
<const int*>(ia
+ sa
),
551 forward_iterator
<const int*>(ib
)) == false);
552 #if TEST_STD_VER >= 14
553 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
554 forward_iterator
<const int*>(ia
+ sa
),
555 forward_iterator
<const int*>(ib
),
556 forward_iterator
<const int*>(ib
+ sa
)) == false);
560 const int ia
[] = {0, 0, 1};
561 const int ib
[] = {1, 0, 0};
562 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
563 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
564 forward_iterator
<const int*>(ia
+ sa
),
565 forward_iterator
<const int*>(ib
)) == true);
566 #if TEST_STD_VER >= 14
567 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
568 forward_iterator
<const int*>(ia
+ sa
),
569 forward_iterator
<const int*>(ib
),
570 forward_iterator
<const int*>(ib
+ sa
)) == true);
571 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
572 forward_iterator
<const int*>(ia
+ sa
),
573 forward_iterator
<const int*>(ib
+ 1),
574 forward_iterator
<const int*>(ib
+ sa
)) == false);
575 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
576 forward_iterator
<const int*>(ia
+ sa
),
577 forward_iterator
<const int*>(ib
),
578 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
582 const int ia
[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4};
583 const int ib
[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 2};
584 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
585 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
586 forward_iterator
<const int*>(ia
+ sa
),
587 forward_iterator
<const int*>(ib
)) == true);
588 #if TEST_STD_VER >= 14
589 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
590 forward_iterator
<const int*>(ia
+ sa
),
591 forward_iterator
<const int*>(ib
),
592 forward_iterator
<const int*>(ib
+ sa
)) == true);
593 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
594 forward_iterator
<const int*>(ia
+ sa
),
595 forward_iterator
<const int*>(ib
+ 1 ),
596 forward_iterator
<const int*>(ib
+ sa
)) == false);
597 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
598 forward_iterator
<const int*>(ia
+ sa
),
599 forward_iterator
<const int*>(ib
),
600 forward_iterator
<const int*>(ib
+ sa
- 1)) == false);
604 const int ia
[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4};
605 const int ib
[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 0};
606 const unsigned sa
= sizeof(ia
)/sizeof(ia
[0]);
607 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
608 forward_iterator
<const int*>(ia
+ sa
),
609 forward_iterator
<const int*>(ib
)) == false);
610 #if TEST_STD_VER >= 14
611 assert(std::is_permutation(forward_iterator
<const int*>(ia
),
612 forward_iterator
<const int*>(ia
+ sa
),
613 forward_iterator
<const int*>(ib
),
614 forward_iterator
<const int*>(ib
+ sa
)) == false);
618 #if TEST_STD_VER > 17
619 static_assert(test_constexpr());