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