1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <algorithm> 11 12 // template<class ForwardIterator1, class ForwardIterator2> 13 // bool 14 // is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 15 // ForwardIterator2 first2); 16 17 #include <algorithm> 18 #include <cassert> 19 20 #include "test_iterators.h" 21 22 #include "test_macros.h" 23 24 int main() 25 { 26 { 27 const int ia[] = {0}; 28 const int ib[] = {0}; 29 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 30 assert(std::is_permutation(forward_iterator<const int*>(ia), 31 forward_iterator<const int*>(ia + 0), 32 forward_iterator<const int*>(ib)) == true); 33 #if TEST_STD_VER >= 14 34 assert(std::is_permutation(forward_iterator<const int*>(ia), 35 forward_iterator<const int*>(ia + 0), 36 forward_iterator<const int*>(ib), 37 forward_iterator<const int*>(ib + 0)) == true); 38 #endif 39 assert(std::is_permutation(forward_iterator<const int*>(ia), 40 forward_iterator<const int*>(ia + sa), 41 forward_iterator<const int*>(ib)) == true); 42 #if TEST_STD_VER >= 14 43 assert(std::is_permutation(forward_iterator<const int*>(ia), 44 forward_iterator<const int*>(ia + sa), 45 forward_iterator<const int*>(ib), 46 forward_iterator<const int*>(ib + sa)) == true); 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 - 1)) == false); 51 #endif 52 } 53 { 54 const int ia[] = {0}; 55 const int ib[] = {1}; 56 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 57 assert(std::is_permutation(forward_iterator<const int*>(ia), 58 forward_iterator<const int*>(ia + sa), 59 forward_iterator<const int*>(ib)) == false); 60 #if TEST_STD_VER >= 14 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)) == false); 65 #endif 66 } 67 68 { 69 const int ia[] = {0, 0}; 70 const int ib[] = {0, 0}; 71 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 72 assert(std::is_permutation(forward_iterator<const int*>(ia), 73 forward_iterator<const int*>(ia + sa), 74 forward_iterator<const int*>(ib)) == true); 75 #if TEST_STD_VER >= 14 76 assert(std::is_permutation(forward_iterator<const int*>(ia), 77 forward_iterator<const int*>(ia + sa), 78 forward_iterator<const int*>(ib), 79 forward_iterator<const int*>(ib + sa)) == true); 80 assert(std::is_permutation(forward_iterator<const int*>(ia), 81 forward_iterator<const int*>(ia + sa), 82 forward_iterator<const int*>(ib), 83 forward_iterator<const int*>(ib + sa - 1)) == false); 84 #endif 85 } 86 { 87 const int ia[] = {0, 0}; 88 const int ib[] = {0, 1}; 89 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 90 assert(std::is_permutation(forward_iterator<const int*>(ia), 91 forward_iterator<const int*>(ia + sa), 92 forward_iterator<const int*>(ib)) == false); 93 #if TEST_STD_VER >= 14 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)) == false); 98 #endif 99 } 100 { 101 const int ia[] = {0, 0}; 102 const int ib[] = {1, 0}; 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 113 } 114 { 115 const int ia[] = {0, 0}; 116 const int ib[] = {1, 1}; 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 127 } 128 { 129 const int ia[] = {0, 1}; 130 const int ib[] = {0, 0}; 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 141 } 142 { 143 const int ia[] = {0, 1}; 144 const int ib[] = {0, 1}; 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)) == true); 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)) == true); 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 - 1)) == false); 158 #endif 159 } 160 { 161 const int ia[] = {0, 1}; 162 const int ib[] = {1, 0}; 163 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 164 assert(std::is_permutation(forward_iterator<const int*>(ia), 165 forward_iterator<const int*>(ia + sa), 166 forward_iterator<const int*>(ib)) == true); 167 #if TEST_STD_VER >= 14 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)) == true); 172 #endif 173 } 174 { 175 const int ia[] = {0, 1}; 176 const int ib[] = {1, 1}; 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)) == false); 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)) == false); 186 #endif 187 } 188 { 189 const int ia[] = {1, 0}; 190 const int ib[] = {0, 0}; 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 201 } 202 { 203 const int ia[] = {1, 0}; 204 const int ib[] = {0, 1}; 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)) == true); 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)) == true); 214 #endif 215 } 216 { 217 const int ia[] = {1, 0}; 218 const int ib[] = {1, 0}; 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 229 } 230 { 231 const int ia[] = {1, 0}; 232 const int ib[] = {1, 1}; 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)) == false); 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)) == false); 242 #endif 243 } 244 { 245 const int ia[] = {1, 1}; 246 const int ib[] = {0, 0}; 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 257 } 258 { 259 const int ia[] = {1, 1}; 260 const int ib[] = {0, 1}; 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 271 } 272 { 273 const int ia[] = {1, 1}; 274 const int ib[] = {1, 0}; 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 285 } 286 { 287 const int ia[] = {1, 1}; 288 const int ib[] = {1, 1}; 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)) == true); 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)) == true); 298 #endif 299 } 300 301 { 302 const int ia[] = {0, 0, 0}; 303 const int ib[] = {1, 0, 0}; 304 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 305 assert(std::is_permutation(forward_iterator<const int*>(ia), 306 forward_iterator<const int*>(ia + sa), 307 forward_iterator<const int*>(ib)) == false); 308 #if TEST_STD_VER >= 14 309 assert(std::is_permutation(forward_iterator<const int*>(ia), 310 forward_iterator<const int*>(ia + sa), 311 forward_iterator<const int*>(ib), 312 forward_iterator<const int*>(ib + sa)) == false); 313 #endif 314 } 315 { 316 const int ia[] = {0, 0, 0}; 317 const int ib[] = {1, 0, 1}; 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 328 } 329 { 330 const int ia[] = {0, 0, 0}; 331 const int ib[] = {1, 0, 2}; 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 342 } 343 { 344 const int ia[] = {0, 0, 0}; 345 const int ib[] = {1, 1, 0}; 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 356 } 357 { 358 const int ia[] = {0, 0, 0}; 359 const int ib[] = {1, 1, 1}; 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 370 } 371 { 372 const int ia[] = {0, 0, 0}; 373 const int ib[] = {1, 1, 2}; 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 384 } 385 { 386 const int ia[] = {0, 0, 0}; 387 const int ib[] = {1, 2, 0}; 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 398 } 399 { 400 const int ia[] = {0, 0, 0}; 401 const int ib[] = {1, 2, 1}; 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 412 } 413 { 414 const int ia[] = {0, 0, 0}; 415 const int ib[] = {1, 2, 2}; 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 426 } 427 { 428 const int ia[] = {0, 0, 1}; 429 const int ib[] = {1, 0, 0}; 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)) == true); 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)) == true); 439 assert(std::is_permutation(forward_iterator<const int*>(ia), 440 forward_iterator<const int*>(ia + sa), 441 forward_iterator<const int*>(ib), 442 forward_iterator<const int*>(ib + sa - 1)) == false); 443 #endif 444 } 445 { 446 const int ia[] = {0, 0, 1}; 447 const int ib[] = {1, 0, 1}; 448 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 449 assert(std::is_permutation(forward_iterator<const int*>(ia), 450 forward_iterator<const int*>(ia + sa), 451 forward_iterator<const int*>(ib)) == false); 452 #if TEST_STD_VER >= 14 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)) == false); 457 #endif 458 } 459 { 460 const int ia[] = {0, 1, 2}; 461 const int ib[] = {1, 0, 2}; 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)) == true); 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)) == true); 471 assert(std::is_permutation(forward_iterator<const int*>(ia), 472 forward_iterator<const int*>(ia + sa), 473 forward_iterator<const int*>(ib), 474 forward_iterator<const int*>(ib + sa - 1)) == false); 475 #endif 476 } 477 { 478 const int ia[] = {0, 1, 2}; 479 const int ib[] = {1, 2, 0}; 480 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 481 assert(std::is_permutation(forward_iterator<const int*>(ia), 482 forward_iterator<const int*>(ia + sa), 483 forward_iterator<const int*>(ib)) == true); 484 #if TEST_STD_VER >= 14 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)) == true); 489 assert(std::is_permutation(forward_iterator<const int*>(ia), 490 forward_iterator<const int*>(ia + sa), 491 forward_iterator<const int*>(ib), 492 forward_iterator<const int*>(ib + sa - 1)) == false); 493 #endif 494 } 495 { 496 const int ia[] = {0, 1, 2}; 497 const int ib[] = {2, 1, 0}; 498 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 499 assert(std::is_permutation(forward_iterator<const int*>(ia), 500 forward_iterator<const int*>(ia + sa), 501 forward_iterator<const int*>(ib)) == true); 502 #if TEST_STD_VER >= 14 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)) == true); 507 assert(std::is_permutation(forward_iterator<const int*>(ia), 508 forward_iterator<const int*>(ia + sa), 509 forward_iterator<const int*>(ib), 510 forward_iterator<const int*>(ib + sa - 1)) == false); 511 #endif 512 } 513 { 514 const int ia[] = {0, 1, 2}; 515 const int ib[] = {2, 0, 1}; 516 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 517 assert(std::is_permutation(forward_iterator<const int*>(ia), 518 forward_iterator<const int*>(ia + sa), 519 forward_iterator<const int*>(ib)) == true); 520 #if TEST_STD_VER >= 14 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)) == true); 525 assert(std::is_permutation(forward_iterator<const int*>(ia), 526 forward_iterator<const int*>(ia + sa), 527 forward_iterator<const int*>(ib), 528 forward_iterator<const int*>(ib + sa - 1)) == false); 529 #endif 530 } 531 { 532 const int ia[] = {0, 0, 1}; 533 const int ib[] = {1, 0, 1}; 534 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 535 assert(std::is_permutation(forward_iterator<const int*>(ia), 536 forward_iterator<const int*>(ia + sa), 537 forward_iterator<const int*>(ib)) == false); 538 #if TEST_STD_VER >= 14 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)) == false); 543 #endif 544 } 545 { 546 const int ia[] = {0, 0, 1}; 547 const int ib[] = {1, 0, 0}; 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)) == 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)) == true); 557 assert(std::is_permutation(forward_iterator<const int*>(ia), 558 forward_iterator<const int*>(ia + sa), 559 forward_iterator<const int*>(ib + 1), 560 forward_iterator<const int*>(ib + sa)) == false); 561 assert(std::is_permutation(forward_iterator<const int*>(ia), 562 forward_iterator<const int*>(ia + sa), 563 forward_iterator<const int*>(ib), 564 forward_iterator<const int*>(ib + sa - 1)) == false); 565 #endif 566 } 567 { 568 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 569 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 2}; 570 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 571 assert(std::is_permutation(forward_iterator<const int*>(ia), 572 forward_iterator<const int*>(ia + sa), 573 forward_iterator<const int*>(ib)) == true); 574 #if TEST_STD_VER >= 14 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)) == true); 579 assert(std::is_permutation(forward_iterator<const int*>(ia), 580 forward_iterator<const int*>(ia + sa), 581 forward_iterator<const int*>(ib + 1 ), 582 forward_iterator<const int*>(ib + sa)) == false); 583 assert(std::is_permutation(forward_iterator<const int*>(ia), 584 forward_iterator<const int*>(ia + sa), 585 forward_iterator<const int*>(ib), 586 forward_iterator<const int*>(ib + sa - 1)) == false); 587 #endif 588 } 589 { 590 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 591 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 0}; 592 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 593 assert(std::is_permutation(forward_iterator<const int*>(ia), 594 forward_iterator<const int*>(ia + sa), 595 forward_iterator<const int*>(ib)) == false); 596 #if TEST_STD_VER >= 14 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)) == false); 601 #endif 602 } 603 } 604