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 // constexpr bool // constexpr after C++17 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 #if TEST_STD_VER > 17 25 TEST_CONSTEXPR bool test_constexpr() { 26 int ia[] = {0, 0, 0}; 27 int ib[] = {1, 1, 0}; 28 int ic[] = {1, 0, 1}; 29 int id[] = {1}; 30 return !std::is_permutation(std::begin(ia), std::end(ia), std::begin(ib)) 31 && !std::is_permutation(std::begin(ia), std::end(ia), std::begin(ib), std::end(ib)) 32 && std::is_permutation(std::begin(ib), std::end(ib), std::begin(ic)) 33 && std::is_permutation(std::begin(ib), std::end(ib), std::begin(ic), std::end(ic)) 34 && !std::is_permutation(std::begin(ic), std::end(ic), std::begin(id), std::end(id)) 35 ; 36 } 37 #endif 38 39 int main() 40 { 41 { 42 const int ia[] = {0}; 43 const int ib[] = {0}; 44 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 45 assert(std::is_permutation(forward_iterator<const int*>(ia), 46 forward_iterator<const int*>(ia + 0), 47 forward_iterator<const int*>(ib)) == true); 48 #if TEST_STD_VER >= 14 49 assert(std::is_permutation(forward_iterator<const int*>(ia), 50 forward_iterator<const int*>(ia + 0), 51 forward_iterator<const int*>(ib), 52 forward_iterator<const int*>(ib + 0)) == true); 53 #endif 54 assert(std::is_permutation(forward_iterator<const int*>(ia), 55 forward_iterator<const int*>(ia + sa), 56 forward_iterator<const int*>(ib)) == true); 57 #if TEST_STD_VER >= 14 58 assert(std::is_permutation(forward_iterator<const int*>(ia), 59 forward_iterator<const int*>(ia + sa), 60 forward_iterator<const int*>(ib), 61 forward_iterator<const int*>(ib + sa)) == true); 62 assert(std::is_permutation(forward_iterator<const int*>(ia), 63 forward_iterator<const int*>(ia + sa), 64 forward_iterator<const int*>(ib), 65 forward_iterator<const int*>(ib + sa - 1)) == false); 66 #endif 67 } 68 { 69 const int ia[] = {0}; 70 const int ib[] = {1}; 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)) == false); 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)) == false); 80 #endif 81 } 82 83 { 84 const int ia[] = {0, 0}; 85 const int ib[] = {0, 0}; 86 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 87 assert(std::is_permutation(forward_iterator<const int*>(ia), 88 forward_iterator<const int*>(ia + sa), 89 forward_iterator<const int*>(ib)) == true); 90 #if TEST_STD_VER >= 14 91 assert(std::is_permutation(forward_iterator<const int*>(ia), 92 forward_iterator<const int*>(ia + sa), 93 forward_iterator<const int*>(ib), 94 forward_iterator<const int*>(ib + sa)) == true); 95 assert(std::is_permutation(forward_iterator<const int*>(ia), 96 forward_iterator<const int*>(ia + sa), 97 forward_iterator<const int*>(ib), 98 forward_iterator<const int*>(ib + sa - 1)) == false); 99 #endif 100 } 101 { 102 const int ia[] = {0, 0}; 103 const int ib[] = {0, 1}; 104 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 105 assert(std::is_permutation(forward_iterator<const int*>(ia), 106 forward_iterator<const int*>(ia + sa), 107 forward_iterator<const int*>(ib)) == false); 108 #if TEST_STD_VER >= 14 109 assert(std::is_permutation(forward_iterator<const int*>(ia), 110 forward_iterator<const int*>(ia + sa), 111 forward_iterator<const int*>(ib), 112 forward_iterator<const int*>(ib + sa)) == false); 113 #endif 114 } 115 { 116 const int ia[] = {0, 0}; 117 const int ib[] = {1, 0}; 118 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 119 assert(std::is_permutation(forward_iterator<const int*>(ia), 120 forward_iterator<const int*>(ia + sa), 121 forward_iterator<const int*>(ib)) == false); 122 #if TEST_STD_VER >= 14 123 assert(std::is_permutation(forward_iterator<const int*>(ia), 124 forward_iterator<const int*>(ia + sa), 125 forward_iterator<const int*>(ib), 126 forward_iterator<const int*>(ib + sa)) == false); 127 #endif 128 } 129 { 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)) == false); 136 #if TEST_STD_VER >= 14 137 assert(std::is_permutation(forward_iterator<const int*>(ia), 138 forward_iterator<const int*>(ia + sa), 139 forward_iterator<const int*>(ib), 140 forward_iterator<const int*>(ib + sa)) == false); 141 #endif 142 } 143 { 144 const int ia[] = {0, 1}; 145 const int ib[] = {0, 0}; 146 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 147 assert(std::is_permutation(forward_iterator<const int*>(ia), 148 forward_iterator<const int*>(ia + sa), 149 forward_iterator<const int*>(ib)) == false); 150 #if TEST_STD_VER >= 14 151 assert(std::is_permutation(forward_iterator<const int*>(ia), 152 forward_iterator<const int*>(ia + sa), 153 forward_iterator<const int*>(ib), 154 forward_iterator<const int*>(ib + sa)) == false); 155 #endif 156 } 157 { 158 const int ia[] = {0, 1}; 159 const int ib[] = {0, 1}; 160 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 161 assert(std::is_permutation(forward_iterator<const int*>(ia), 162 forward_iterator<const int*>(ia + sa), 163 forward_iterator<const int*>(ib)) == true); 164 #if TEST_STD_VER >= 14 165 assert(std::is_permutation(forward_iterator<const int*>(ia), 166 forward_iterator<const int*>(ia + sa), 167 forward_iterator<const int*>(ib), 168 forward_iterator<const int*>(ib + sa)) == true); 169 assert(std::is_permutation(forward_iterator<const int*>(ia), 170 forward_iterator<const int*>(ia + sa), 171 forward_iterator<const int*>(ib), 172 forward_iterator<const int*>(ib + sa - 1)) == false); 173 #endif 174 } 175 { 176 const int ia[] = {0, 1}; 177 const int ib[] = {1, 0}; 178 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 179 assert(std::is_permutation(forward_iterator<const int*>(ia), 180 forward_iterator<const int*>(ia + sa), 181 forward_iterator<const int*>(ib)) == true); 182 #if TEST_STD_VER >= 14 183 assert(std::is_permutation(forward_iterator<const int*>(ia), 184 forward_iterator<const int*>(ia + sa), 185 forward_iterator<const int*>(ib), 186 forward_iterator<const int*>(ib + sa)) == true); 187 #endif 188 } 189 { 190 const int ia[] = {0, 1}; 191 const int ib[] = {1, 1}; 192 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 193 assert(std::is_permutation(forward_iterator<const int*>(ia), 194 forward_iterator<const int*>(ia + sa), 195 forward_iterator<const int*>(ib)) == false); 196 #if TEST_STD_VER >= 14 197 assert(std::is_permutation(forward_iterator<const int*>(ia), 198 forward_iterator<const int*>(ia + sa), 199 forward_iterator<const int*>(ib), 200 forward_iterator<const int*>(ib + sa)) == false); 201 #endif 202 } 203 { 204 const int ia[] = {1, 0}; 205 const int ib[] = {0, 0}; 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)) == false); 210 #if TEST_STD_VER >= 14 211 assert(std::is_permutation(forward_iterator<const int*>(ia), 212 forward_iterator<const int*>(ia + sa), 213 forward_iterator<const int*>(ib), 214 forward_iterator<const int*>(ib + sa)) == false); 215 #endif 216 } 217 { 218 const int ia[] = {1, 0}; 219 const int ib[] = {0, 1}; 220 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 221 assert(std::is_permutation(forward_iterator<const int*>(ia), 222 forward_iterator<const int*>(ia + sa), 223 forward_iterator<const int*>(ib)) == true); 224 #if TEST_STD_VER >= 14 225 assert(std::is_permutation(forward_iterator<const int*>(ia), 226 forward_iterator<const int*>(ia + sa), 227 forward_iterator<const int*>(ib), 228 forward_iterator<const int*>(ib + sa)) == true); 229 #endif 230 } 231 { 232 const int ia[] = {1, 0}; 233 const int ib[] = {1, 0}; 234 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 235 assert(std::is_permutation(forward_iterator<const int*>(ia), 236 forward_iterator<const int*>(ia + sa), 237 forward_iterator<const int*>(ib)) == true); 238 #if TEST_STD_VER >= 14 239 assert(std::is_permutation(forward_iterator<const int*>(ia), 240 forward_iterator<const int*>(ia + sa), 241 forward_iterator<const int*>(ib), 242 forward_iterator<const int*>(ib + sa)) == true); 243 #endif 244 } 245 { 246 const int ia[] = {1, 0}; 247 const int ib[] = {1, 1}; 248 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 249 assert(std::is_permutation(forward_iterator<const int*>(ia), 250 forward_iterator<const int*>(ia + sa), 251 forward_iterator<const int*>(ib)) == false); 252 #if TEST_STD_VER >= 14 253 assert(std::is_permutation(forward_iterator<const int*>(ia), 254 forward_iterator<const int*>(ia + sa), 255 forward_iterator<const int*>(ib), 256 forward_iterator<const int*>(ib + sa)) == false); 257 #endif 258 } 259 { 260 const int ia[] = {1, 1}; 261 const int ib[] = {0, 0}; 262 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 263 assert(std::is_permutation(forward_iterator<const int*>(ia), 264 forward_iterator<const int*>(ia + sa), 265 forward_iterator<const int*>(ib)) == false); 266 #if TEST_STD_VER >= 14 267 assert(std::is_permutation(forward_iterator<const int*>(ia), 268 forward_iterator<const int*>(ia + sa), 269 forward_iterator<const int*>(ib), 270 forward_iterator<const int*>(ib + sa)) == false); 271 #endif 272 } 273 { 274 const int ia[] = {1, 1}; 275 const int ib[] = {0, 1}; 276 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 277 assert(std::is_permutation(forward_iterator<const int*>(ia), 278 forward_iterator<const int*>(ia + sa), 279 forward_iterator<const int*>(ib)) == false); 280 #if TEST_STD_VER >= 14 281 assert(std::is_permutation(forward_iterator<const int*>(ia), 282 forward_iterator<const int*>(ia + sa), 283 forward_iterator<const int*>(ib), 284 forward_iterator<const int*>(ib + sa)) == false); 285 #endif 286 } 287 { 288 const int ia[] = {1, 1}; 289 const int ib[] = {1, 0}; 290 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 291 assert(std::is_permutation(forward_iterator<const int*>(ia), 292 forward_iterator<const int*>(ia + sa), 293 forward_iterator<const int*>(ib)) == false); 294 #if TEST_STD_VER >= 14 295 assert(std::is_permutation(forward_iterator<const int*>(ia), 296 forward_iterator<const int*>(ia + sa), 297 forward_iterator<const int*>(ib), 298 forward_iterator<const int*>(ib + sa)) == false); 299 #endif 300 } 301 { 302 const int ia[] = {1, 1}; 303 const int ib[] = {1, 1}; 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)) == true); 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)) == true); 313 #endif 314 } 315 316 { 317 const int ia[] = {0, 0, 0}; 318 const int ib[] = {1, 0, 0}; 319 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 320 assert(std::is_permutation(forward_iterator<const int*>(ia), 321 forward_iterator<const int*>(ia + sa), 322 forward_iterator<const int*>(ib)) == false); 323 #if TEST_STD_VER >= 14 324 assert(std::is_permutation(forward_iterator<const int*>(ia), 325 forward_iterator<const int*>(ia + sa), 326 forward_iterator<const int*>(ib), 327 forward_iterator<const int*>(ib + sa)) == false); 328 #endif 329 } 330 { 331 const int ia[] = {0, 0, 0}; 332 const int ib[] = {1, 0, 1}; 333 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 334 assert(std::is_permutation(forward_iterator<const int*>(ia), 335 forward_iterator<const int*>(ia + sa), 336 forward_iterator<const int*>(ib)) == false); 337 #if TEST_STD_VER >= 14 338 assert(std::is_permutation(forward_iterator<const int*>(ia), 339 forward_iterator<const int*>(ia + sa), 340 forward_iterator<const int*>(ib), 341 forward_iterator<const int*>(ib + sa)) == false); 342 #endif 343 } 344 { 345 const int ia[] = {0, 0, 0}; 346 const int ib[] = {1, 0, 2}; 347 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 348 assert(std::is_permutation(forward_iterator<const int*>(ia), 349 forward_iterator<const int*>(ia + sa), 350 forward_iterator<const int*>(ib)) == false); 351 #if TEST_STD_VER >= 14 352 assert(std::is_permutation(forward_iterator<const int*>(ia), 353 forward_iterator<const int*>(ia + sa), 354 forward_iterator<const int*>(ib), 355 forward_iterator<const int*>(ib + sa)) == false); 356 #endif 357 } 358 { 359 const int ia[] = {0, 0, 0}; 360 const int ib[] = {1, 1, 0}; 361 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 362 assert(std::is_permutation(forward_iterator<const int*>(ia), 363 forward_iterator<const int*>(ia + sa), 364 forward_iterator<const int*>(ib)) == false); 365 #if TEST_STD_VER >= 14 366 assert(std::is_permutation(forward_iterator<const int*>(ia), 367 forward_iterator<const int*>(ia + sa), 368 forward_iterator<const int*>(ib), 369 forward_iterator<const int*>(ib + sa)) == false); 370 #endif 371 } 372 { 373 const int ia[] = {0, 0, 0}; 374 const int ib[] = {1, 1, 1}; 375 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 376 assert(std::is_permutation(forward_iterator<const int*>(ia), 377 forward_iterator<const int*>(ia + sa), 378 forward_iterator<const int*>(ib)) == false); 379 #if TEST_STD_VER >= 14 380 assert(std::is_permutation(forward_iterator<const int*>(ia), 381 forward_iterator<const int*>(ia + sa), 382 forward_iterator<const int*>(ib), 383 forward_iterator<const int*>(ib + sa)) == false); 384 #endif 385 } 386 { 387 const int ia[] = {0, 0, 0}; 388 const int ib[] = {1, 1, 2}; 389 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 390 assert(std::is_permutation(forward_iterator<const int*>(ia), 391 forward_iterator<const int*>(ia + sa), 392 forward_iterator<const int*>(ib)) == false); 393 #if TEST_STD_VER >= 14 394 assert(std::is_permutation(forward_iterator<const int*>(ia), 395 forward_iterator<const int*>(ia + sa), 396 forward_iterator<const int*>(ib), 397 forward_iterator<const int*>(ib + sa)) == false); 398 #endif 399 } 400 { 401 const int ia[] = {0, 0, 0}; 402 const int ib[] = {1, 2, 0}; 403 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 404 assert(std::is_permutation(forward_iterator<const int*>(ia), 405 forward_iterator<const int*>(ia + sa), 406 forward_iterator<const int*>(ib)) == false); 407 #if TEST_STD_VER >= 14 408 assert(std::is_permutation(forward_iterator<const int*>(ia), 409 forward_iterator<const int*>(ia + sa), 410 forward_iterator<const int*>(ib), 411 forward_iterator<const int*>(ib + sa)) == false); 412 #endif 413 } 414 { 415 const int ia[] = {0, 0, 0}; 416 const int ib[] = {1, 2, 1}; 417 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 418 assert(std::is_permutation(forward_iterator<const int*>(ia), 419 forward_iterator<const int*>(ia + sa), 420 forward_iterator<const int*>(ib)) == false); 421 #if TEST_STD_VER >= 14 422 assert(std::is_permutation(forward_iterator<const int*>(ia), 423 forward_iterator<const int*>(ia + sa), 424 forward_iterator<const int*>(ib), 425 forward_iterator<const int*>(ib + sa)) == false); 426 #endif 427 } 428 { 429 const int ia[] = {0, 0, 0}; 430 const int ib[] = {1, 2, 2}; 431 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 432 assert(std::is_permutation(forward_iterator<const int*>(ia), 433 forward_iterator<const int*>(ia + sa), 434 forward_iterator<const int*>(ib)) == 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)) == false); 440 #endif 441 } 442 { 443 const int ia[] = {0, 0, 1}; 444 const int ib[] = {1, 0, 0}; 445 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 446 assert(std::is_permutation(forward_iterator<const int*>(ia), 447 forward_iterator<const int*>(ia + sa), 448 forward_iterator<const int*>(ib)) == true); 449 #if TEST_STD_VER >= 14 450 assert(std::is_permutation(forward_iterator<const int*>(ia), 451 forward_iterator<const int*>(ia + sa), 452 forward_iterator<const int*>(ib), 453 forward_iterator<const int*>(ib + sa)) == true); 454 assert(std::is_permutation(forward_iterator<const int*>(ia), 455 forward_iterator<const int*>(ia + sa), 456 forward_iterator<const int*>(ib), 457 forward_iterator<const int*>(ib + sa - 1)) == false); 458 #endif 459 } 460 { 461 const int ia[] = {0, 0, 1}; 462 const int ib[] = {1, 0, 1}; 463 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 464 assert(std::is_permutation(forward_iterator<const int*>(ia), 465 forward_iterator<const int*>(ia + sa), 466 forward_iterator<const int*>(ib)) == 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)) == false); 472 #endif 473 } 474 { 475 const int ia[] = {0, 1, 2}; 476 const int ib[] = {1, 0, 2}; 477 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 478 assert(std::is_permutation(forward_iterator<const int*>(ia), 479 forward_iterator<const int*>(ia + sa), 480 forward_iterator<const int*>(ib)) == true); 481 #if TEST_STD_VER >= 14 482 assert(std::is_permutation(forward_iterator<const int*>(ia), 483 forward_iterator<const int*>(ia + sa), 484 forward_iterator<const int*>(ib), 485 forward_iterator<const int*>(ib + sa)) == true); 486 assert(std::is_permutation(forward_iterator<const int*>(ia), 487 forward_iterator<const int*>(ia + sa), 488 forward_iterator<const int*>(ib), 489 forward_iterator<const int*>(ib + sa - 1)) == false); 490 #endif 491 } 492 { 493 const int ia[] = {0, 1, 2}; 494 const int ib[] = {1, 2, 0}; 495 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 496 assert(std::is_permutation(forward_iterator<const int*>(ia), 497 forward_iterator<const int*>(ia + sa), 498 forward_iterator<const int*>(ib)) == true); 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)) == true); 504 assert(std::is_permutation(forward_iterator<const int*>(ia), 505 forward_iterator<const int*>(ia + sa), 506 forward_iterator<const int*>(ib), 507 forward_iterator<const int*>(ib + sa - 1)) == false); 508 #endif 509 } 510 { 511 const int ia[] = {0, 1, 2}; 512 const int ib[] = {2, 1, 0}; 513 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 514 assert(std::is_permutation(forward_iterator<const int*>(ia), 515 forward_iterator<const int*>(ia + sa), 516 forward_iterator<const int*>(ib)) == true); 517 #if TEST_STD_VER >= 14 518 assert(std::is_permutation(forward_iterator<const int*>(ia), 519 forward_iterator<const int*>(ia + sa), 520 forward_iterator<const int*>(ib), 521 forward_iterator<const int*>(ib + sa)) == true); 522 assert(std::is_permutation(forward_iterator<const int*>(ia), 523 forward_iterator<const int*>(ia + sa), 524 forward_iterator<const int*>(ib), 525 forward_iterator<const int*>(ib + sa - 1)) == false); 526 #endif 527 } 528 { 529 const int ia[] = {0, 1, 2}; 530 const int ib[] = {2, 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)) == true); 535 #if TEST_STD_VER >= 14 536 assert(std::is_permutation(forward_iterator<const int*>(ia), 537 forward_iterator<const int*>(ia + sa), 538 forward_iterator<const int*>(ib), 539 forward_iterator<const int*>(ib + sa)) == true); 540 assert(std::is_permutation(forward_iterator<const int*>(ia), 541 forward_iterator<const int*>(ia + sa), 542 forward_iterator<const int*>(ib), 543 forward_iterator<const int*>(ib + sa - 1)) == false); 544 #endif 545 } 546 { 547 const int ia[] = {0, 0, 1}; 548 const int ib[] = {1, 0, 1}; 549 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 550 assert(std::is_permutation(forward_iterator<const int*>(ia), 551 forward_iterator<const int*>(ia + sa), 552 forward_iterator<const int*>(ib)) == false); 553 #if TEST_STD_VER >= 14 554 assert(std::is_permutation(forward_iterator<const int*>(ia), 555 forward_iterator<const int*>(ia + sa), 556 forward_iterator<const int*>(ib), 557 forward_iterator<const int*>(ib + sa)) == false); 558 #endif 559 } 560 { 561 const int ia[] = {0, 0, 1}; 562 const int ib[] = {1, 0, 0}; 563 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 564 assert(std::is_permutation(forward_iterator<const int*>(ia), 565 forward_iterator<const int*>(ia + sa), 566 forward_iterator<const int*>(ib)) == true); 567 #if TEST_STD_VER >= 14 568 assert(std::is_permutation(forward_iterator<const int*>(ia), 569 forward_iterator<const int*>(ia + sa), 570 forward_iterator<const int*>(ib), 571 forward_iterator<const int*>(ib + sa)) == true); 572 assert(std::is_permutation(forward_iterator<const int*>(ia), 573 forward_iterator<const int*>(ia + sa), 574 forward_iterator<const int*>(ib + 1), 575 forward_iterator<const int*>(ib + sa)) == false); 576 assert(std::is_permutation(forward_iterator<const int*>(ia), 577 forward_iterator<const int*>(ia + sa), 578 forward_iterator<const int*>(ib), 579 forward_iterator<const int*>(ib + sa - 1)) == false); 580 #endif 581 } 582 { 583 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 584 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 2}; 585 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 586 assert(std::is_permutation(forward_iterator<const int*>(ia), 587 forward_iterator<const int*>(ia + sa), 588 forward_iterator<const int*>(ib)) == true); 589 #if TEST_STD_VER >= 14 590 assert(std::is_permutation(forward_iterator<const int*>(ia), 591 forward_iterator<const int*>(ia + sa), 592 forward_iterator<const int*>(ib), 593 forward_iterator<const int*>(ib + sa)) == true); 594 assert(std::is_permutation(forward_iterator<const int*>(ia), 595 forward_iterator<const int*>(ia + sa), 596 forward_iterator<const int*>(ib + 1 ), 597 forward_iterator<const int*>(ib + sa)) == false); 598 assert(std::is_permutation(forward_iterator<const int*>(ia), 599 forward_iterator<const int*>(ia + sa), 600 forward_iterator<const int*>(ib), 601 forward_iterator<const int*>(ib + sa - 1)) == false); 602 #endif 603 } 604 { 605 const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 606 const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 0}; 607 const unsigned sa = sizeof(ia)/sizeof(ia[0]); 608 assert(std::is_permutation(forward_iterator<const int*>(ia), 609 forward_iterator<const int*>(ia + sa), 610 forward_iterator<const int*>(ib)) == false); 611 #if TEST_STD_VER >= 14 612 assert(std::is_permutation(forward_iterator<const int*>(ia), 613 forward_iterator<const int*>(ia + sa), 614 forward_iterator<const int*>(ib), 615 forward_iterator<const int*>(ib + sa)) == false); 616 #endif 617 } 618 619 #if TEST_STD_VER > 17 620 static_assert(test_constexpr()); 621 #endif 622 } 623