[debug] Use poison instead of undef to set a killed dbg.assign address [NFC] (#119760)
[llvm-project.git] / libcxx / test / std / algorithms / alg.nonmodifying / alg.is_permutation / is_permutation.pass.cpp
blob2a2c796caac01d7bf3ee6a6dc428ef94e8ec66a5
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 //===----------------------------------------------------------------------===//
9 // <algorithm>
11 // template<class ForwardIterator1, class ForwardIterator2>
12 // constexpr bool // constexpr after C++17
13 // is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
14 // ForwardIterator2 first2);
16 #include <algorithm>
17 #include <cassert>
19 #include "test_iterators.h"
21 #include "test_macros.h"
23 #if TEST_STD_VER > 17
24 TEST_CONSTEXPR bool test_constexpr() {
25 int ia[] = {0, 0, 0};
26 int ib[] = {1, 1, 0};
27 int ic[] = {1, 0, 1};
28 int id[] = {1};
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))
36 #endif
38 int main(int, char**)
41 const int ia[] = {0};
42 const int ib[] = {0};
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);
52 #endif
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);
65 #endif
68 const int ia[] = {0};
69 const int ib[] = {1};
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);
79 #endif
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);
98 #endif
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);
112 #endif
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);
126 #endif
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);
140 #endif
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);
154 #endif
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);
172 #endif
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);
186 #endif
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);
200 #endif
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);
214 #endif
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);
228 #endif
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);
242 #endif
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);
256 #endif
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);
270 #endif
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);
284 #endif
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);
298 #endif
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);
312 #endif
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);
327 #endif
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);
341 #endif
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);
355 #endif
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);
369 #endif
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);
383 #endif
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);
397 #endif
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);
411 #endif
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);
425 #endif
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);
439 #endif
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);
457 #endif
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);
471 #endif
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);
489 #endif
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);
507 #endif
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);
525 #endif
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);
543 #endif
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);
557 #endif
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);
579 #endif
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);
601 #endif
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);
615 #endif
618 #if TEST_STD_VER > 17
619 static_assert(test_constexpr());
620 #endif
622 return 0;