1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
14 // is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
15 // ForwardIterator2 first2, BinaryPredicate pred);
21 #include "test_macros.h"
22 #include "test_iterators.h"
24 int comparison_count = 0;
26 bool counting_equals ( const T &a, const T &b ) {
37 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
38 assert(std::is_permutation(forward_iterator<const int*>(ia),
39 forward_iterator<const int*>(ia + 0),
40 forward_iterator<const int*>(ib),
41 std::equal_to<const int>()) == true);
42 assert(std::is_permutation(forward_iterator<const int*>(ia),
43 forward_iterator<const int*>(ia + sa),
44 forward_iterator<const int*>(ib),
45 std::equal_to<const int>()) == true);
46 #if TEST_STD_VER >= 14
47 assert(std::is_permutation(forward_iterator<const int*>(ia),
48 forward_iterator<const int*>(ia + sa),
49 forward_iterator<const int*>(ib),
50 forward_iterator<const int*>(ib + sa),
51 std::equal_to<const int>()) == true);
52 assert(std::is_permutation(forward_iterator<const int*>(ia),
53 forward_iterator<const int*>(ia + sa),
54 forward_iterator<const int*>(ib),
55 forward_iterator<const int*>(ib + sa - 1),
56 std::equal_to<const int>()) == false);
62 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
63 assert(std::is_permutation(forward_iterator<const int*>(ia),
64 forward_iterator<const int*>(ia + sa),
65 forward_iterator<const int*>(ib),
66 std::equal_to<const int>()) == false);
67 #if TEST_STD_VER >= 14
68 assert(std::is_permutation(forward_iterator<const int*>(ia),
69 forward_iterator<const int*>(ia + sa),
70 forward_iterator<const int*>(ib),
71 forward_iterator<const int*>(ib + sa),
72 std::equal_to<const int>()) == false);
77 const int ia[] = {0, 0};
78 const int ib[] = {0, 0};
79 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
80 assert(std::is_permutation(forward_iterator<const int*>(ia),
81 forward_iterator<const int*>(ia + sa),
82 forward_iterator<const int*>(ib),
83 std::equal_to<const int>()) == true);
84 #if TEST_STD_VER >= 14
85 assert(std::is_permutation(forward_iterator<const int*>(ia),
86 forward_iterator<const int*>(ia + sa),
87 forward_iterator<const int*>(ib),
88 forward_iterator<const int*>(ib + sa),
89 std::equal_to<const int>()) == true);
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 - 1),
94 std::equal_to<const int>()) == false);
98 const int ia[] = {0, 0};
99 const int ib[] = {0, 1};
100 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
101 assert(std::is_permutation(forward_iterator<const int*>(ia),
102 forward_iterator<const int*>(ia + sa),
103 forward_iterator<const int*>(ib),
104 std::equal_to<const int>()) == false);
105 #if TEST_STD_VER >= 14
106 assert(std::is_permutation(forward_iterator<const int*>(ia),
107 forward_iterator<const int*>(ia + sa),
108 forward_iterator<const int*>(ib),
109 forward_iterator<const int*>(ib + sa),
110 std::equal_to<const int>()) == false);
114 const int ia[] = {0, 0};
115 const int ib[] = {1, 0};
116 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
117 assert(std::is_permutation(forward_iterator<const int*>(ia),
118 forward_iterator<const int*>(ia + sa),
119 forward_iterator<const int*>(ib),
120 std::equal_to<const int>()) == 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),
126 std::equal_to<const int>()) == false);
130 const int ia[] = {0, 0};
131 const int ib[] = {1, 1};
132 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
133 assert(std::is_permutation(forward_iterator<const int*>(ia),
134 forward_iterator<const int*>(ia + sa),
135 forward_iterator<const int*>(ib),
136 std::equal_to<const int>()) == false);
137 #if TEST_STD_VER >= 14
138 assert(std::is_permutation(forward_iterator<const int*>(ia),
139 forward_iterator<const int*>(ia + sa),
140 forward_iterator<const int*>(ib),
141 forward_iterator<const int*>(ib + sa),
142 std::equal_to<const int>()) == false);
146 const int ia[] = {0, 1};
147 const int ib[] = {0, 0};
148 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
149 assert(std::is_permutation(forward_iterator<const int*>(ia),
150 forward_iterator<const int*>(ia + sa),
151 forward_iterator<const int*>(ib),
152 std::equal_to<const int>()) == false);
153 #if TEST_STD_VER >= 14
154 assert(std::is_permutation(forward_iterator<const int*>(ia),
155 forward_iterator<const int*>(ia + sa),
156 forward_iterator<const int*>(ib),
157 forward_iterator<const int*>(ib + sa),
158 std::equal_to<const int>()) == false);
162 const int ia[] = {0, 1};
163 const int ib[] = {0, 1};
164 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
165 assert(std::is_permutation(forward_iterator<const int*>(ia),
166 forward_iterator<const int*>(ia + sa),
167 forward_iterator<const int*>(ib),
168 std::equal_to<const int>()) == true);
169 #if TEST_STD_VER >= 14
170 assert(std::is_permutation(forward_iterator<const int*>(ia),
171 forward_iterator<const int*>(ia + sa),
172 forward_iterator<const int*>(ib),
173 forward_iterator<const int*>(ib + sa),
174 std::equal_to<const int>()) == true);
175 assert(std::is_permutation(forward_iterator<const int*>(ia),
176 forward_iterator<const int*>(ia + sa),
177 forward_iterator<const int*>(ib),
178 forward_iterator<const int*>(ib + sa - 1),
179 std::equal_to<const int>()) == false);
183 const int ia[] = {0, 1};
184 const int ib[] = {1, 0};
185 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
186 assert(std::is_permutation(forward_iterator<const int*>(ia),
187 forward_iterator<const int*>(ia + sa),
188 forward_iterator<const int*>(ib),
189 std::equal_to<const int>()) == true);
190 #if TEST_STD_VER >= 14
191 assert(std::is_permutation(forward_iterator<const int*>(ia),
192 forward_iterator<const int*>(ia + sa),
193 forward_iterator<const int*>(ib),
194 forward_iterator<const int*>(ib + sa),
195 std::equal_to<const int>()) == true);
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 - 1),
200 std::equal_to<const int>()) == false);
204 const int ia[] = {0, 1};
205 const int ib[] = {1, 1};
206 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
207 assert(std::is_permutation(forward_iterator<const int*>(ia),
208 forward_iterator<const int*>(ia + sa),
209 forward_iterator<const int*>(ib),
210 std::equal_to<const int>()) == false);
211 #if TEST_STD_VER >= 14
212 assert(std::is_permutation(forward_iterator<const int*>(ia),
213 forward_iterator<const int*>(ia + sa),
214 forward_iterator<const int*>(ib),
215 forward_iterator<const int*>(ib + sa),
216 std::equal_to<const int>()) == false);
220 const int ia[] = {1, 0};
221 const int ib[] = {0, 0};
222 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
223 assert(std::is_permutation(forward_iterator<const int*>(ia),
224 forward_iterator<const int*>(ia + sa),
225 forward_iterator<const int*>(ib),
226 std::equal_to<const int>()) == false);
227 #if TEST_STD_VER >= 14
228 assert(std::is_permutation(forward_iterator<const int*>(ia),
229 forward_iterator<const int*>(ia + sa),
230 forward_iterator<const int*>(ib),
231 forward_iterator<const int*>(ib + sa),
232 std::equal_to<const int>()) == false);
236 const int ia[] = {1, 0};
237 const int ib[] = {0, 1};
238 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
239 assert(std::is_permutation(forward_iterator<const int*>(ia),
240 forward_iterator<const int*>(ia + sa),
241 forward_iterator<const int*>(ib),
242 std::equal_to<const int>()) == true);
243 #if TEST_STD_VER >= 14
244 assert(std::is_permutation(forward_iterator<const int*>(ia),
245 forward_iterator<const int*>(ia + sa),
246 forward_iterator<const int*>(ib),
247 forward_iterator<const int*>(ib + sa),
248 std::equal_to<const int>()) == true);
249 assert(std::is_permutation(forward_iterator<const int*>(ia),
250 forward_iterator<const int*>(ia + sa),
251 forward_iterator<const int*>(ib),
252 forward_iterator<const int*>(ib + sa - 1),
253 std::equal_to<const int>()) == false);
257 const int ia[] = {1, 0};
258 const int ib[] = {1, 0};
259 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
260 assert(std::is_permutation(forward_iterator<const int*>(ia),
261 forward_iterator<const int*>(ia + sa),
262 forward_iterator<const int*>(ib),
263 std::equal_to<const int>()) == true);
264 #if TEST_STD_VER >= 14
265 assert(std::is_permutation(forward_iterator<const int*>(ia),
266 forward_iterator<const int*>(ia + sa),
267 forward_iterator<const int*>(ib),
268 forward_iterator<const int*>(ib + sa),
269 std::equal_to<const int>()) == true);
270 assert(std::is_permutation(forward_iterator<const int*>(ia),
271 forward_iterator<const int*>(ia + sa),
272 forward_iterator<const int*>(ib),
273 forward_iterator<const int*>(ib + sa - 1),
274 std::equal_to<const int>()) == false);
278 const int ia[] = {1, 0};
279 const int ib[] = {1, 1};
280 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
281 assert(std::is_permutation(forward_iterator<const int*>(ia),
282 forward_iterator<const int*>(ia + sa),
283 forward_iterator<const int*>(ib),
284 std::equal_to<const int>()) == false);
285 #if TEST_STD_VER >= 14
286 assert(std::is_permutation(forward_iterator<const int*>(ia),
287 forward_iterator<const int*>(ia + sa),
288 forward_iterator<const int*>(ib),
289 forward_iterator<const int*>(ib + sa),
290 std::equal_to<const int>()) == false);
294 const int ia[] = {1, 1};
295 const int ib[] = {0, 0};
296 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
297 assert(std::is_permutation(forward_iterator<const int*>(ia),
298 forward_iterator<const int*>(ia + sa),
299 forward_iterator<const int*>(ib),
300 std::equal_to<const int>()) == false);
301 #if TEST_STD_VER >= 14
302 assert(std::is_permutation(forward_iterator<const int*>(ia),
303 forward_iterator<const int*>(ia + sa),
304 forward_iterator<const int*>(ib),
305 forward_iterator<const int*>(ib + sa),
306 std::equal_to<const int>()) == false);
310 const int ia[] = {1, 1};
311 const int ib[] = {0, 1};
312 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
313 assert(std::is_permutation(forward_iterator<const int*>(ia),
314 forward_iterator<const int*>(ia + sa),
315 forward_iterator<const int*>(ib),
316 std::equal_to<const int>()) == false);
317 #if TEST_STD_VER >= 14
318 assert(std::is_permutation(forward_iterator<const int*>(ia),
319 forward_iterator<const int*>(ia + sa),
320 forward_iterator<const int*>(ib),
321 forward_iterator<const int*>(ib + sa),
322 std::equal_to<const int>()) == false);
326 const int ia[] = {1, 1};
327 const int ib[] = {1, 0};
328 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
329 assert(std::is_permutation(forward_iterator<const int*>(ia),
330 forward_iterator<const int*>(ia + sa),
331 forward_iterator<const int*>(ib),
332 std::equal_to<const int>()) == false);
333 #if TEST_STD_VER >= 14
334 assert(std::is_permutation(forward_iterator<const int*>(ia),
335 forward_iterator<const int*>(ia + sa),
336 forward_iterator<const int*>(ib),
337 forward_iterator<const int*>(ib + sa),
338 std::equal_to<const int>()) == false);
342 const int ia[] = {1, 1};
343 const int ib[] = {1, 1};
344 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
345 assert(std::is_permutation(forward_iterator<const int*>(ia),
346 forward_iterator<const int*>(ia + sa),
347 forward_iterator<const int*>(ib),
348 std::equal_to<const int>()) == true);
349 #if TEST_STD_VER >= 14
350 assert(std::is_permutation(forward_iterator<const int*>(ia),
351 forward_iterator<const int*>(ia + sa),
352 forward_iterator<const int*>(ib),
353 forward_iterator<const int*>(ib + sa),
354 std::equal_to<const int>()) == true);
355 assert(std::is_permutation(forward_iterator<const int*>(ia),
356 forward_iterator<const int*>(ia + sa),
357 forward_iterator<const int*>(ib),
358 forward_iterator<const int*>(ib + sa - 1),
359 std::equal_to<const int>()) == false);
364 const int ia[] = {0, 0, 0};
365 const int ib[] = {1, 0, 0};
366 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
367 assert(std::is_permutation(forward_iterator<const int*>(ia),
368 forward_iterator<const int*>(ia + sa),
369 forward_iterator<const int*>(ib),
370 std::equal_to<const int>()) == false);
371 #if TEST_STD_VER >= 14
372 assert(std::is_permutation(forward_iterator<const int*>(ia),
373 forward_iterator<const int*>(ia + sa),
374 forward_iterator<const int*>(ib),
375 forward_iterator<const int*>(ib + sa),
376 std::equal_to<const int>()) == false);
380 const int ia[] = {0, 0, 0};
381 const int ib[] = {1, 0, 1};
382 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
383 assert(std::is_permutation(forward_iterator<const int*>(ia),
384 forward_iterator<const int*>(ia + sa),
385 forward_iterator<const int*>(ib),
386 std::equal_to<const int>()) == false);
387 #if TEST_STD_VER >= 14
388 assert(std::is_permutation(forward_iterator<const int*>(ia),
389 forward_iterator<const int*>(ia + sa),
390 forward_iterator<const int*>(ib),
391 forward_iterator<const int*>(ib + sa),
392 std::equal_to<const int>()) == false);
396 const int ia[] = {0, 0, 0};
397 const int ib[] = {1, 0, 2};
398 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
399 assert(std::is_permutation(forward_iterator<const int*>(ia),
400 forward_iterator<const int*>(ia + sa),
401 forward_iterator<const int*>(ib),
402 std::equal_to<const int>()) == false);
403 #if TEST_STD_VER >= 14
404 assert(std::is_permutation(forward_iterator<const int*>(ia),
405 forward_iterator<const int*>(ia + sa),
406 forward_iterator<const int*>(ib),
407 forward_iterator<const int*>(ib + sa),
408 std::equal_to<const int>()) == false);
412 const int ia[] = {0, 0, 0};
413 const int ib[] = {1, 1, 0};
414 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
415 assert(std::is_permutation(forward_iterator<const int*>(ia),
416 forward_iterator<const int*>(ia + sa),
417 forward_iterator<const int*>(ib),
418 std::equal_to<const int>()) == false);
419 #if TEST_STD_VER >= 14
420 assert(std::is_permutation(forward_iterator<const int*>(ia),
421 forward_iterator<const int*>(ia + sa),
422 forward_iterator<const int*>(ib),
423 forward_iterator<const int*>(ib + sa),
424 std::equal_to<const int>()) == false);
428 const int ia[] = {0, 0, 0};
429 const int ib[] = {1, 1, 1};
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),
434 std::equal_to<const int>()) == false);
435 #if TEST_STD_VER >= 14
436 assert(std::is_permutation(forward_iterator<const int*>(ia),
437 forward_iterator<const int*>(ia + sa),
438 forward_iterator<const int*>(ib),
439 forward_iterator<const int*>(ib + sa),
440 std::equal_to<const int>()) == false);
444 const int ia[] = {0, 0, 0};
445 const int ib[] = {1, 1, 2};
446 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
447 assert(std::is_permutation(forward_iterator<const int*>(ia),
448 forward_iterator<const int*>(ia + sa),
449 forward_iterator<const int*>(ib),
450 std::equal_to<const int>()) == false);
451 #if TEST_STD_VER >= 14
452 assert(std::is_permutation(forward_iterator<const int*>(ia),
453 forward_iterator<const int*>(ia + sa),
454 forward_iterator<const int*>(ib),
455 forward_iterator<const int*>(ib + sa),
456 std::equal_to<const int>()) == false);
460 const int ia[] = {0, 0, 0};
461 const int ib[] = {1, 2, 0};
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),
466 std::equal_to<const int>()) == false);
467 #if TEST_STD_VER >= 14
468 assert(std::is_permutation(forward_iterator<const int*>(ia),
469 forward_iterator<const int*>(ia + sa),
470 forward_iterator<const int*>(ib),
471 forward_iterator<const int*>(ib + sa),
472 std::equal_to<const int>()) == false);
476 const int ia[] = {0, 0, 0};
477 const int ib[] = {1, 2, 1};
478 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
479 assert(std::is_permutation(forward_iterator<const int*>(ia),
480 forward_iterator<const int*>(ia + sa),
481 forward_iterator<const int*>(ib),
482 std::equal_to<const int>()) == false);
483 #if TEST_STD_VER >= 14
484 assert(std::is_permutation(forward_iterator<const int*>(ia),
485 forward_iterator<const int*>(ia + sa),
486 forward_iterator<const int*>(ib),
487 forward_iterator<const int*>(ib + sa),
488 std::equal_to<const int>()) == false);
492 const int ia[] = {0, 0, 0};
493 const int ib[] = {1, 2, 2};
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),
498 std::equal_to<const int>()) == false);
499 #if TEST_STD_VER >= 14
500 assert(std::is_permutation(forward_iterator<const int*>(ia),
501 forward_iterator<const int*>(ia + sa),
502 forward_iterator<const int*>(ib),
503 forward_iterator<const int*>(ib + sa),
504 std::equal_to<const int>()) == false);
508 const int ia[] = {0, 0, 1};
509 const int ib[] = {1, 0, 0};
510 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
511 assert(std::is_permutation(forward_iterator<const int*>(ia),
512 forward_iterator<const int*>(ia + sa),
513 forward_iterator<const int*>(ib),
514 std::equal_to<const int>()) == true);
515 #if TEST_STD_VER >= 14
516 assert(std::is_permutation(forward_iterator<const int*>(ia),
517 forward_iterator<const int*>(ia + sa),
518 forward_iterator<const int*>(ib),
519 forward_iterator<const int*>(ib + sa),
520 std::equal_to<const int>()) == 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),
525 std::equal_to<const int>()) == false);
529 const int ia[] = {0, 0, 1};
530 const int ib[] = {1, 0, 1};
531 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
532 assert(std::is_permutation(forward_iterator<const int*>(ia),
533 forward_iterator<const int*>(ia + sa),
534 forward_iterator<const int*>(ib),
535 std::equal_to<const int>()) == false);
536 #if TEST_STD_VER >= 14
537 assert(std::is_permutation(forward_iterator<const int*>(ia),
538 forward_iterator<const int*>(ia + sa),
539 forward_iterator<const int*>(ib),
540 forward_iterator<const int*>(ib + sa),
541 std::equal_to<const int>()) == false);
545 const int ia[] = {0, 1, 2};
546 const int ib[] = {1, 0, 2};
547 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
548 assert(std::is_permutation(forward_iterator<const int*>(ia),
549 forward_iterator<const int*>(ia + sa),
550 forward_iterator<const int*>(ib),
551 std::equal_to<const int>()) == true);
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),
557 std::equal_to<const int>()) == true);
558 assert(std::is_permutation(forward_iterator<const int*>(ia),
559 forward_iterator<const int*>(ia + sa),
560 forward_iterator<const int*>(ib),
561 forward_iterator<const int*>(ib + sa - 1),
562 std::equal_to<const int>()) == false);
566 const int ia[] = {0, 1, 2};
567 const int ib[] = {1, 2, 0};
568 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
569 assert(std::is_permutation(forward_iterator<const int*>(ia),
570 forward_iterator<const int*>(ia + sa),
571 forward_iterator<const int*>(ib),
572 std::equal_to<const int>()) == true);
573 #if TEST_STD_VER >= 14
574 assert(std::is_permutation(forward_iterator<const int*>(ia),
575 forward_iterator<const int*>(ia + sa),
576 forward_iterator<const int*>(ib),
577 forward_iterator<const int*>(ib + sa),
578 std::equal_to<const int>()) == true);
579 assert(std::is_permutation(forward_iterator<const int*>(ia),
580 forward_iterator<const int*>(ia + sa),
581 forward_iterator<const int*>(ib),
582 forward_iterator<const int*>(ib + sa - 1),
583 std::equal_to<const int>()) == false);
587 const int ia[] = {0, 1, 2};
588 const int ib[] = {2, 1, 0};
589 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
590 assert(std::is_permutation(forward_iterator<const int*>(ia),
591 forward_iterator<const int*>(ia + sa),
592 forward_iterator<const int*>(ib),
593 std::equal_to<const int>()) == true);
594 #if TEST_STD_VER >= 14
595 assert(std::is_permutation(forward_iterator<const int*>(ia),
596 forward_iterator<const int*>(ia + sa),
597 forward_iterator<const int*>(ib),
598 forward_iterator<const int*>(ib + sa),
599 std::equal_to<const int>()) == true);
600 assert(std::is_permutation(forward_iterator<const int*>(ia),
601 forward_iterator<const int*>(ia + sa),
602 forward_iterator<const int*>(ib),
603 forward_iterator<const int*>(ib + sa - 1),
604 std::equal_to<const int>()) == false);
608 const int ia[] = {0, 1, 2};
609 const int ib[] = {2, 0, 1};
610 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
611 assert(std::is_permutation(forward_iterator<const int*>(ia),
612 forward_iterator<const int*>(ia + sa),
613 forward_iterator<const int*>(ib),
614 std::equal_to<const int>()) == true);
615 #if TEST_STD_VER >= 14
616 assert(std::is_permutation(forward_iterator<const int*>(ia),
617 forward_iterator<const int*>(ia + sa),
618 forward_iterator<const int*>(ib),
619 forward_iterator<const int*>(ib + sa),
620 std::equal_to<const int>()) == true);
621 assert(std::is_permutation(forward_iterator<const int*>(ia),
622 forward_iterator<const int*>(ia + sa),
623 forward_iterator<const int*>(ib),
624 forward_iterator<const int*>(ib + sa - 1),
625 std::equal_to<const int>()) == false);
629 const int ia[] = {0, 0, 1};
630 const int ib[] = {1, 0, 1};
631 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
632 assert(std::is_permutation(forward_iterator<const int*>(ia),
633 forward_iterator<const int*>(ia + sa),
634 forward_iterator<const int*>(ib),
635 std::equal_to<const int>()) == false);
636 #if TEST_STD_VER >= 14
637 assert(std::is_permutation(forward_iterator<const int*>(ia),
638 forward_iterator<const int*>(ia + sa),
639 forward_iterator<const int*>(ib),
640 forward_iterator<const int*>(ib + sa),
641 std::equal_to<const int>()) == false);
645 const int ia[] = {0, 0, 1};
646 const int ib[] = {1, 0, 0};
647 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
648 assert(std::is_permutation(forward_iterator<const int*>(ia),
649 forward_iterator<const int*>(ia + sa),
650 forward_iterator<const int*>(ib),
651 std::equal_to<const int>()) == true);
652 #if TEST_STD_VER >= 14
653 assert(std::is_permutation(forward_iterator<const int*>(ia),
654 forward_iterator<const int*>(ia + sa),
655 forward_iterator<const int*>(ib),
656 forward_iterator<const int*>(ib + sa),
657 std::equal_to<const int>()) == true);
658 assert(std::is_permutation(forward_iterator<const int*>(ia),
659 forward_iterator<const int*>(ia + sa),
660 forward_iterator<const int*>(ib + 1),
661 forward_iterator<const int*>(ib + sa),
662 std::equal_to<const int>()) == false);
663 assert(std::is_permutation(forward_iterator<const int*>(ia),
664 forward_iterator<const int*>(ia + sa),
665 forward_iterator<const int*>(ib),
666 forward_iterator<const int*>(ib + sa - 1),
667 std::equal_to<const int>()) == false);
671 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4};
672 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 2};
673 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
674 assert(std::is_permutation(forward_iterator<const int*>(ia),
675 forward_iterator<const int*>(ia + sa),
676 forward_iterator<const int*>(ib),
677 std::equal_to<const int>()) == true);
678 #if TEST_STD_VER >= 14
679 assert(std::is_permutation(forward_iterator<const int*>(ia),
680 forward_iterator<const int*>(ia + sa),
681 forward_iterator<const int*>(ib),
682 forward_iterator<const int*>(ib + sa),
683 std::equal_to<const int>()) == true);
684 assert(std::is_permutation(forward_iterator<const int*>(ia),
685 forward_iterator<const int*>(ia + sa),
686 forward_iterator<const int*>(ib + 1),
687 forward_iterator<const int*>(ib + sa),
688 std::equal_to<const int>()) == false);
689 assert(std::is_permutation(forward_iterator<const int*>(ia),
690 forward_iterator<const int*>(ia + sa),
691 forward_iterator<const int*>(ib),
692 forward_iterator<const int*>(ib + sa - 1),
693 std::equal_to<const int>()) == false);
694 comparison_count = 0;
695 assert(std::is_permutation(forward_iterator<const int*>(ia),
696 forward_iterator<const int*>(ia + sa),
697 forward_iterator<const int*>(ib),
698 forward_iterator<const int*>(ib + sa - 1),
699 counting_equals<const int>) == false);
700 assert ( comparison_count > 0 );
701 comparison_count = 0;
702 assert(std::is_permutation(random_access_iterator<const int*>(ia),
703 random_access_iterator<const int*>(ia + sa),
704 random_access_iterator<const int*>(ib),
705 random_access_iterator<const int*>(ib + sa - 1),
706 counting_equals<const int>) == false);
707 assert ( comparison_count == 0 );
711 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4};
712 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 0};
713 const unsigned sa = sizeof(ia)/sizeof(ia[0]);
714 assert(std::is_permutation(forward_iterator<const int*>(ia),
715 forward_iterator<const int*>(ia + sa),
716 forward_iterator<const int*>(ib),
717 std::equal_to<const int>()) == false);
718 #if TEST_STD_VER >= 14
719 assert(std::is_permutation(forward_iterator<const int*>(ia),
720 forward_iterator<const int*>(ia + sa),
721 forward_iterator<const int*>(ib),
722 forward_iterator<const int*>(ib + sa),
723 std::equal_to<const int>()) == false);