is_permutation.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ��������������������The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// This file is distributed under the University of Illinois Open Source 6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// License. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <algorithm> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template<class ForwardIterator1, class ForwardIterator2> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// bool 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ForwardIterator2 first2); 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <algorithm> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../iterators.h" 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0}; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0}; 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + 0), 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0}; 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1}; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0}; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 0}; 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0}; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 1}; 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0}; 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0}; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0}; 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1}; 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1}; 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 0}; 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1}; 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 1}; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1}; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0}; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1}; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1}; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 0}; 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 0}; 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 0}; 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 1}; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 0}; 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0}; 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 0}; 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1}; 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 1}; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 0}; 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 1}; 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {0, 1}; 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 1}; 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0}; 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {1, 1}; 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1}; 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 0}; 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 1}; 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 2}; 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1, 0}; 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1, 1}; 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 1, 2}; 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 2, 0}; 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 2, 1}; 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 0}; 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 2, 2}; 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 1}; 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 0}; 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 1}; 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 1}; 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2}; 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 2}; 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2}; 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 2, 0}; 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2}; 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {2, 1, 0}; 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2}; 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {2, 0, 1}; 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 1}; 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 1}; 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 0, 1}; 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {1, 0, 0}; 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 2}; 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == true); 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ia[] = {0, 1, 2, 3, 0, 5, 6, 2, 4, 4}; 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int ib[] = {4, 2, 3, 0, 1, 4, 0, 5, 6, 0}; 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const unsigned sa = sizeof(ia)/sizeof(ia[0]); 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::is_permutation(forward_iterator<const int*>(ia), 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ia + sa), 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant forward_iterator<const int*>(ib)) == false); 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 326