libcxx initial import

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant
2010-05-11 19:42:16 +00:00
commit bc8d3f97eb
3893 changed files with 1209942 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T>
// requires HasLess<T, Iter::value_type>
// && HasLess<Iter::value_type, T>
// bool
// binary_search(Iter first, Iter last, const T& value);
#include <algorithm>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value, bool x)
{
assert(std::binary_search(first, last, value) == x);
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end());
for (x = 0; x < M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x, true);
test(Iter(v.data()), Iter(v.data()+v.size()), -1, false);
test(Iter(v.data()), Iter(v.data()+v.size()), M, false);
}
int main()
{
int d[] = {0, 2, 4, 6};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 7; ++x)
test(d, e, x, (x % 2 == 0) && ((e-d)*2 > x));
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,64 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T, CopyConstructible Compare>
// requires Predicate<Compare, T, Iter::value_type>
// && Predicate<Compare, Iter::value_type, T>
// bool
// binary_search(Iter first, Iter last, const T& value, Compare comp);
#include <algorithm>
#include <vector>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value, bool x)
{
assert(std::binary_search(first, last, value, std::greater<int>()) == x);
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end(), std::greater<int>());
for (x = 0; x < M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x, true);
test(Iter(v.data()), Iter(v.data()+v.size()), -1, false);
test(Iter(v.data()), Iter(v.data()+v.size()), M, false);
}
int main()
{
int d[] = {6, 4, 2, 0};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 7; ++x)
test(d, e, x, (x % 2 == 0) && e != d && (-2*(e-d) + 8 <= x));
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,69 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T>
// requires HasLess<T, Iter::value_type>
// && HasLess<Iter::value_type, T>
// pair<Iter, Iter>
// equal_range(Iter first, Iter last, const T& value);
#include <algorithm>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
std::pair<Iter, Iter> i = std::equal_range(first, last, value);
for (Iter j = first; j != i.first; ++j)
assert(*j < value);
for (Iter j = i.first; j != last; ++j)
assert(!(*j < value));
for (Iter j = first; j != i.second; ++j)
assert(!(value < *j));
for (Iter j = i.second; j != last; ++j)
assert(value < *j);
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {0, 1, 2, 3};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,70 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T, CopyConstructible Compare>
// requires Predicate<Compare, T, Iter::value_type>
// && Predicate<Compare, Iter::value_type, T>
// pair<Iter, Iter>
// equal_range(Iter first, Iter last, const T& value, Compare comp);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
std::pair<Iter, Iter> i = std::equal_range(first, last, value, std::greater<int>());
for (Iter j = first; j != i.first; ++j)
assert(std::greater<int>()(*j, value));
for (Iter j = i.first; j != last; ++j)
assert(!std::greater<int>()(*j, value));
for (Iter j = first; j != i.second; ++j)
assert(!std::greater<int>()(value, *j));
for (Iter j = i.second; j != last; ++j)
assert(std::greater<int>()(value, *j));
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end(), std::greater<int>());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {3, 2, 1, 0};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,64 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T>
// requires HasLess<Iter::value_type, T>
// Iter
// lower_bound(Iter first, Iter last, const T& value);
#include <algorithm>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
Iter i = std::lower_bound(first, last, value);
for (Iter j = first; j != i; ++j)
assert(*j < value);
for (Iter j = i; j != last; ++j)
assert(!(*j < value));
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {0, 1, 2, 3};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,65 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T>
// requires HasLess<Iter::value_type, T>
// Iter
// lower_bound(Iter first, Iter last, const T& value);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
Iter i = std::lower_bound(first, last, value, std::greater<int>());
for (Iter j = first; j != i; ++j)
assert(std::greater<int>()(*j, value));
for (Iter j = i; j != last; ++j)
assert(!std::greater<int>()(*j, value));
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end(), std::greater<int>());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {3, 2, 1, 0};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,12 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
int main()
{
}

View File

@@ -0,0 +1,64 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T>
// requires HasLess<T, Iter::value_type>
// Iter
// upper_bound(Iter first, Iter last, const T& value);
#include <algorithm>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
Iter i = std::upper_bound(first, last, value);
for (Iter j = first; j != i; ++j)
assert(!(value < *j));
for (Iter j = i; j != last; ++j)
assert(value < *j);
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {0, 1, 2, 3};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,65 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, class T, Predicate<auto, T, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// Iter
// upper_bound(Iter first, Iter last, const T& value, Compare comp);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#include "../../../iterators.h"
template <class Iter, class T>
void
test(Iter first, Iter last, const T& value)
{
Iter i = std::upper_bound(first, last, value, std::greater<int>());
for (Iter j = first; j != i; ++j)
assert(!std::greater<int>()(value, *j));
for (Iter j = i; j != last; ++j)
assert(std::greater<int>()(value, *j));
}
template <class Iter>
void
test()
{
const unsigned N = 1000;
const unsigned M = 10;
std::vector<int> v(N);
int x = 0;
for (int i = 0; i < v.size(); ++i)
{
v[i] = x;
if (++x == M)
x = 0;
}
std::sort(v.begin(), v.end(), std::greater<int>());
for (x = 0; x <= M; ++x)
test(Iter(v.data()), Iter(v.data()+v.size()), x);
}
int main()
{
int d[] = {3, 2, 1, 0};
for (int* e = d; e <= d+4; ++e)
for (int x = -1; x <= 4; ++x)
test(d, e, x);
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,522 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires LessThanComparable<Iter::value_type>
// bool
// is_heap(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test()
{
int i1[] = {0, 0};
assert(std::is_heap(i1, i1));
assert(std::is_heap(i1, i1+1) == (std::is_heap_until(i1, i1+1) == i1+1));
int i2[] = {0, 1};
int i3[] = {1, 0};
assert(std::is_heap(i1, i1+2) == (std::is_heap_until(i1, i1+2) == i1+2));
assert(std::is_heap(i2, i2+2) == (std::is_heap_until(i2, i2+2) == i2+2));
assert(std::is_heap(i3, i3+2) == (std::is_heap_until(i3, i3+2) == i3+2));
int i4[] = {0, 0, 0};
int i5[] = {0, 0, 1};
int i6[] = {0, 1, 0};
int i7[] = {0, 1, 1};
int i8[] = {1, 0, 0};
int i9[] = {1, 0, 1};
int i10[] = {1, 1, 0};
assert(std::is_heap(i4, i4+3) == (std::is_heap_until(i4, i4+3) == i4+3));
assert(std::is_heap(i5, i5+3) == (std::is_heap_until(i5, i5+3) == i5+3));
assert(std::is_heap(i6, i6+3) == (std::is_heap_until(i6, i6+3) == i6+3));
assert(std::is_heap(i7, i7+3) == (std::is_heap_until(i7, i7+3) == i7+3));
assert(std::is_heap(i8, i8+3) == (std::is_heap_until(i8, i8+3) == i8+3));
assert(std::is_heap(i9, i9+3) == (std::is_heap_until(i9, i9+3) == i9+3));
assert(std::is_heap(i10, i10+3) == (std::is_heap_until(i10, i10+3) == i10+3));
int i11[] = {0, 0, 0, 0};
int i12[] = {0, 0, 0, 1};
int i13[] = {0, 0, 1, 0};
int i14[] = {0, 0, 1, 1};
int i15[] = {0, 1, 0, 0};
int i16[] = {0, 1, 0, 1};
int i17[] = {0, 1, 1, 0};
int i18[] = {0, 1, 1, 1};
int i19[] = {1, 0, 0, 0};
int i20[] = {1, 0, 0, 1};
int i21[] = {1, 0, 1, 0};
int i22[] = {1, 0, 1, 1};
int i23[] = {1, 1, 0, 0};
int i24[] = {1, 1, 0, 1};
int i25[] = {1, 1, 1, 0};
assert(std::is_heap(i11, i11+4) == (std::is_heap_until(i11, i11+4) == i11+4));
assert(std::is_heap(i12, i12+4) == (std::is_heap_until(i12, i12+4) == i12+4));
assert(std::is_heap(i13, i13+4) == (std::is_heap_until(i13, i13+4) == i13+4));
assert(std::is_heap(i14, i14+4) == (std::is_heap_until(i14, i14+4) == i14+4));
assert(std::is_heap(i15, i15+4) == (std::is_heap_until(i15, i15+4) == i15+4));
assert(std::is_heap(i16, i16+4) == (std::is_heap_until(i16, i16+4) == i16+4));
assert(std::is_heap(i17, i17+4) == (std::is_heap_until(i17, i17+4) == i17+4));
assert(std::is_heap(i18, i18+4) == (std::is_heap_until(i18, i18+4) == i18+4));
assert(std::is_heap(i19, i19+4) == (std::is_heap_until(i19, i19+4) == i19+4));
assert(std::is_heap(i20, i20+4) == (std::is_heap_until(i20, i20+4) == i20+4));
assert(std::is_heap(i21, i21+4) == (std::is_heap_until(i21, i21+4) == i21+4));
assert(std::is_heap(i22, i22+4) == (std::is_heap_until(i22, i22+4) == i22+4));
assert(std::is_heap(i23, i23+4) == (std::is_heap_until(i23, i23+4) == i23+4));
assert(std::is_heap(i24, i24+4) == (std::is_heap_until(i24, i24+4) == i24+4));
assert(std::is_heap(i25, i25+4) == (std::is_heap_until(i25, i25+4) == i25+4));
int i26[] = {0, 0, 0, 0, 0};
int i27[] = {0, 0, 0, 0, 1};
int i28[] = {0, 0, 0, 1, 0};
int i29[] = {0, 0, 0, 1, 1};
int i30[] = {0, 0, 1, 0, 0};
int i31[] = {0, 0, 1, 0, 1};
int i32[] = {0, 0, 1, 1, 0};
int i33[] = {0, 0, 1, 1, 1};
int i34[] = {0, 1, 0, 0, 0};
int i35[] = {0, 1, 0, 0, 1};
int i36[] = {0, 1, 0, 1, 0};
int i37[] = {0, 1, 0, 1, 1};
int i38[] = {0, 1, 1, 0, 0};
int i39[] = {0, 1, 1, 0, 1};
int i40[] = {0, 1, 1, 1, 0};
int i41[] = {0, 1, 1, 1, 1};
int i42[] = {1, 0, 0, 0, 0};
int i43[] = {1, 0, 0, 0, 1};
int i44[] = {1, 0, 0, 1, 0};
int i45[] = {1, 0, 0, 1, 1};
int i46[] = {1, 0, 1, 0, 0};
int i47[] = {1, 0, 1, 0, 1};
int i48[] = {1, 0, 1, 1, 0};
int i49[] = {1, 0, 1, 1, 1};
int i50[] = {1, 1, 0, 0, 0};
int i51[] = {1, 1, 0, 0, 1};
int i52[] = {1, 1, 0, 1, 0};
int i53[] = {1, 1, 0, 1, 1};
int i54[] = {1, 1, 1, 0, 0};
int i55[] = {1, 1, 1, 0, 1};
int i56[] = {1, 1, 1, 1, 0};
assert(std::is_heap(i26, i26+5) == (std::is_heap_until(i26, i26+5) == i26+5));
assert(std::is_heap(i27, i27+5) == (std::is_heap_until(i27, i27+5) == i27+5));
assert(std::is_heap(i28, i28+5) == (std::is_heap_until(i28, i28+5) == i28+5));
assert(std::is_heap(i29, i29+5) == (std::is_heap_until(i29, i29+5) == i29+5));
assert(std::is_heap(i30, i30+5) == (std::is_heap_until(i30, i30+5) == i30+5));
assert(std::is_heap(i31, i31+5) == (std::is_heap_until(i31, i31+5) == i31+5));
assert(std::is_heap(i32, i32+5) == (std::is_heap_until(i32, i32+5) == i32+5));
assert(std::is_heap(i33, i33+5) == (std::is_heap_until(i33, i33+5) == i33+5));
assert(std::is_heap(i34, i34+5) == (std::is_heap_until(i34, i34+5) == i34+5));
assert(std::is_heap(i35, i35+5) == (std::is_heap_until(i35, i35+5) == i35+5));
assert(std::is_heap(i36, i36+5) == (std::is_heap_until(i36, i36+5) == i36+5));
assert(std::is_heap(i37, i37+5) == (std::is_heap_until(i37, i37+5) == i37+5));
assert(std::is_heap(i38, i38+5) == (std::is_heap_until(i38, i38+5) == i38+5));
assert(std::is_heap(i39, i39+5) == (std::is_heap_until(i39, i39+5) == i39+5));
assert(std::is_heap(i40, i40+5) == (std::is_heap_until(i40, i40+5) == i40+5));
assert(std::is_heap(i41, i41+5) == (std::is_heap_until(i41, i41+5) == i41+5));
assert(std::is_heap(i42, i42+5) == (std::is_heap_until(i42, i42+5) == i42+5));
assert(std::is_heap(i43, i43+5) == (std::is_heap_until(i43, i43+5) == i43+5));
assert(std::is_heap(i44, i44+5) == (std::is_heap_until(i44, i44+5) == i44+5));
assert(std::is_heap(i45, i45+5) == (std::is_heap_until(i45, i45+5) == i45+5));
assert(std::is_heap(i46, i46+5) == (std::is_heap_until(i46, i46+5) == i46+5));
assert(std::is_heap(i47, i47+5) == (std::is_heap_until(i47, i47+5) == i47+5));
assert(std::is_heap(i48, i48+5) == (std::is_heap_until(i48, i48+5) == i48+5));
assert(std::is_heap(i49, i49+5) == (std::is_heap_until(i49, i49+5) == i49+5));
assert(std::is_heap(i50, i50+5) == (std::is_heap_until(i50, i50+5) == i50+5));
assert(std::is_heap(i51, i51+5) == (std::is_heap_until(i51, i51+5) == i51+5));
assert(std::is_heap(i52, i52+5) == (std::is_heap_until(i52, i52+5) == i52+5));
assert(std::is_heap(i53, i53+5) == (std::is_heap_until(i53, i53+5) == i53+5));
assert(std::is_heap(i54, i54+5) == (std::is_heap_until(i54, i54+5) == i54+5));
assert(std::is_heap(i55, i55+5) == (std::is_heap_until(i55, i55+5) == i55+5));
assert(std::is_heap(i56, i56+5) == (std::is_heap_until(i56, i56+5) == i56+5));
int i57[] = {0, 0, 0, 0, 0, 0};
int i58[] = {0, 0, 0, 0, 0, 1};
int i59[] = {0, 0, 0, 0, 1, 0};
int i60[] = {0, 0, 0, 0, 1, 1};
int i61[] = {0, 0, 0, 1, 0, 0};
int i62[] = {0, 0, 0, 1, 0, 1};
int i63[] = {0, 0, 0, 1, 1, 0};
int i64[] = {0, 0, 0, 1, 1, 1};
int i65[] = {0, 0, 1, 0, 0, 0};
int i66[] = {0, 0, 1, 0, 0, 1};
int i67[] = {0, 0, 1, 0, 1, 0};
int i68[] = {0, 0, 1, 0, 1, 1};
int i69[] = {0, 0, 1, 1, 0, 0};
int i70[] = {0, 0, 1, 1, 0, 1};
int i71[] = {0, 0, 1, 1, 1, 0};
int i72[] = {0, 0, 1, 1, 1, 1};
int i73[] = {0, 1, 0, 0, 0, 0};
int i74[] = {0, 1, 0, 0, 0, 1};
int i75[] = {0, 1, 0, 0, 1, 0};
int i76[] = {0, 1, 0, 0, 1, 1};
int i77[] = {0, 1, 0, 1, 0, 0};
int i78[] = {0, 1, 0, 1, 0, 1};
int i79[] = {0, 1, 0, 1, 1, 0};
int i80[] = {0, 1, 0, 1, 1, 1};
int i81[] = {0, 1, 1, 0, 0, 0};
int i82[] = {0, 1, 1, 0, 0, 1};
int i83[] = {0, 1, 1, 0, 1, 0};
int i84[] = {0, 1, 1, 0, 1, 1};
int i85[] = {0, 1, 1, 1, 0, 0};
int i86[] = {0, 1, 1, 1, 0, 1};
int i87[] = {0, 1, 1, 1, 1, 0};
int i88[] = {0, 1, 1, 1, 1, 1};
int i89[] = {1, 0, 0, 0, 0, 0};
int i90[] = {1, 0, 0, 0, 0, 1};
int i91[] = {1, 0, 0, 0, 1, 0};
int i92[] = {1, 0, 0, 0, 1, 1};
int i93[] = {1, 0, 0, 1, 0, 0};
int i94[] = {1, 0, 0, 1, 0, 1};
int i95[] = {1, 0, 0, 1, 1, 0};
int i96[] = {1, 0, 0, 1, 1, 1};
int i97[] = {1, 0, 1, 0, 0, 0};
int i98[] = {1, 0, 1, 0, 0, 1};
int i99[] = {1, 0, 1, 0, 1, 0};
int i100[] = {1, 0, 1, 0, 1, 1};
int i101[] = {1, 0, 1, 1, 0, 0};
int i102[] = {1, 0, 1, 1, 0, 1};
int i103[] = {1, 0, 1, 1, 1, 0};
int i104[] = {1, 0, 1, 1, 1, 1};
int i105[] = {1, 1, 0, 0, 0, 0};
int i106[] = {1, 1, 0, 0, 0, 1};
int i107[] = {1, 1, 0, 0, 1, 0};
int i108[] = {1, 1, 0, 0, 1, 1};
int i109[] = {1, 1, 0, 1, 0, 0};
int i110[] = {1, 1, 0, 1, 0, 1};
int i111[] = {1, 1, 0, 1, 1, 0};
int i112[] = {1, 1, 0, 1, 1, 1};
int i113[] = {1, 1, 1, 0, 0, 0};
int i114[] = {1, 1, 1, 0, 0, 1};
int i115[] = {1, 1, 1, 0, 1, 0};
int i116[] = {1, 1, 1, 0, 1, 1};
int i117[] = {1, 1, 1, 1, 0, 0};
int i118[] = {1, 1, 1, 1, 0, 1};
int i119[] = {1, 1, 1, 1, 1, 0};
assert(std::is_heap(i57, i57+6) == (std::is_heap_until(i57, i57+6) == i57+6));
assert(std::is_heap(i58, i58+6) == (std::is_heap_until(i58, i58+6) == i58+6));
assert(std::is_heap(i59, i59+6) == (std::is_heap_until(i59, i59+6) == i59+6));
assert(std::is_heap(i60, i60+6) == (std::is_heap_until(i60, i60+6) == i60+6));
assert(std::is_heap(i61, i61+6) == (std::is_heap_until(i61, i61+6) == i61+6));
assert(std::is_heap(i62, i62+6) == (std::is_heap_until(i62, i62+6) == i62+6));
assert(std::is_heap(i63, i63+6) == (std::is_heap_until(i63, i63+6) == i63+6));
assert(std::is_heap(i64, i64+6) == (std::is_heap_until(i64, i64+6) == i64+6));
assert(std::is_heap(i65, i65+6) == (std::is_heap_until(i65, i65+6) == i65+6));
assert(std::is_heap(i66, i66+6) == (std::is_heap_until(i66, i66+6) == i66+6));
assert(std::is_heap(i67, i67+6) == (std::is_heap_until(i67, i67+6) == i67+6));
assert(std::is_heap(i68, i68+6) == (std::is_heap_until(i68, i68+6) == i68+6));
assert(std::is_heap(i69, i69+6) == (std::is_heap_until(i69, i69+6) == i69+6));
assert(std::is_heap(i70, i70+6) == (std::is_heap_until(i70, i70+6) == i70+6));
assert(std::is_heap(i71, i71+6) == (std::is_heap_until(i71, i71+6) == i71+6));
assert(std::is_heap(i72, i72+6) == (std::is_heap_until(i72, i72+6) == i72+6));
assert(std::is_heap(i73, i73+6) == (std::is_heap_until(i73, i73+6) == i73+6));
assert(std::is_heap(i74, i74+6) == (std::is_heap_until(i74, i74+6) == i74+6));
assert(std::is_heap(i75, i75+6) == (std::is_heap_until(i75, i75+6) == i75+6));
assert(std::is_heap(i76, i76+6) == (std::is_heap_until(i76, i76+6) == i76+6));
assert(std::is_heap(i77, i77+6) == (std::is_heap_until(i77, i77+6) == i77+6));
assert(std::is_heap(i78, i78+6) == (std::is_heap_until(i78, i78+6) == i78+6));
assert(std::is_heap(i79, i79+6) == (std::is_heap_until(i79, i79+6) == i79+6));
assert(std::is_heap(i80, i80+6) == (std::is_heap_until(i80, i80+6) == i80+6));
assert(std::is_heap(i81, i81+6) == (std::is_heap_until(i81, i81+6) == i81+6));
assert(std::is_heap(i82, i82+6) == (std::is_heap_until(i82, i82+6) == i82+6));
assert(std::is_heap(i83, i83+6) == (std::is_heap_until(i83, i83+6) == i83+6));
assert(std::is_heap(i84, i84+6) == (std::is_heap_until(i84, i84+6) == i84+6));
assert(std::is_heap(i85, i85+6) == (std::is_heap_until(i85, i85+6) == i85+6));
assert(std::is_heap(i86, i86+6) == (std::is_heap_until(i86, i86+6) == i86+6));
assert(std::is_heap(i87, i87+6) == (std::is_heap_until(i87, i87+6) == i87+6));
assert(std::is_heap(i88, i88+6) == (std::is_heap_until(i88, i88+6) == i88+6));
assert(std::is_heap(i89, i89+6) == (std::is_heap_until(i89, i89+6) == i89+6));
assert(std::is_heap(i90, i90+6) == (std::is_heap_until(i90, i90+6) == i90+6));
assert(std::is_heap(i91, i91+6) == (std::is_heap_until(i91, i91+6) == i91+6));
assert(std::is_heap(i92, i92+6) == (std::is_heap_until(i92, i92+6) == i92+6));
assert(std::is_heap(i93, i93+6) == (std::is_heap_until(i93, i93+6) == i93+6));
assert(std::is_heap(i94, i94+6) == (std::is_heap_until(i94, i94+6) == i94+6));
assert(std::is_heap(i95, i95+6) == (std::is_heap_until(i95, i95+6) == i95+6));
assert(std::is_heap(i96, i96+6) == (std::is_heap_until(i96, i96+6) == i96+6));
assert(std::is_heap(i97, i97+6) == (std::is_heap_until(i97, i97+6) == i97+6));
assert(std::is_heap(i98, i98+6) == (std::is_heap_until(i98, i98+6) == i98+6));
assert(std::is_heap(i99, i99+6) == (std::is_heap_until(i99, i99+6) == i99+6));
assert(std::is_heap(i100, i100+6) == (std::is_heap_until(i100, i100+6) == i100+6));
assert(std::is_heap(i101, i101+6) == (std::is_heap_until(i101, i101+6) == i101+6));
assert(std::is_heap(i102, i102+6) == (std::is_heap_until(i102, i102+6) == i102+6));
assert(std::is_heap(i103, i103+6) == (std::is_heap_until(i103, i103+6) == i103+6));
assert(std::is_heap(i104, i104+6) == (std::is_heap_until(i104, i104+6) == i104+6));
assert(std::is_heap(i105, i105+6) == (std::is_heap_until(i105, i105+6) == i105+6));
assert(std::is_heap(i106, i106+6) == (std::is_heap_until(i106, i106+6) == i106+6));
assert(std::is_heap(i107, i107+6) == (std::is_heap_until(i107, i107+6) == i107+6));
assert(std::is_heap(i108, i108+6) == (std::is_heap_until(i108, i108+6) == i108+6));
assert(std::is_heap(i109, i109+6) == (std::is_heap_until(i109, i109+6) == i109+6));
assert(std::is_heap(i110, i110+6) == (std::is_heap_until(i110, i110+6) == i110+6));
assert(std::is_heap(i111, i111+6) == (std::is_heap_until(i111, i111+6) == i111+6));
assert(std::is_heap(i112, i112+6) == (std::is_heap_until(i112, i112+6) == i112+6));
assert(std::is_heap(i113, i113+6) == (std::is_heap_until(i113, i113+6) == i113+6));
assert(std::is_heap(i114, i114+6) == (std::is_heap_until(i114, i114+6) == i114+6));
assert(std::is_heap(i115, i115+6) == (std::is_heap_until(i115, i115+6) == i115+6));
assert(std::is_heap(i116, i116+6) == (std::is_heap_until(i116, i116+6) == i116+6));
assert(std::is_heap(i117, i117+6) == (std::is_heap_until(i117, i117+6) == i117+6));
assert(std::is_heap(i118, i118+6) == (std::is_heap_until(i118, i118+6) == i118+6));
assert(std::is_heap(i119, i119+6) == (std::is_heap_until(i119, i119+6) == i119+6));
int i120[] = {0, 0, 0, 0, 0, 0, 0};
int i121[] = {0, 0, 0, 0, 0, 0, 1};
int i122[] = {0, 0, 0, 0, 0, 1, 0};
int i123[] = {0, 0, 0, 0, 0, 1, 1};
int i124[] = {0, 0, 0, 0, 1, 0, 0};
int i125[] = {0, 0, 0, 0, 1, 0, 1};
int i126[] = {0, 0, 0, 0, 1, 1, 0};
int i127[] = {0, 0, 0, 0, 1, 1, 1};
int i128[] = {0, 0, 0, 1, 0, 0, 0};
int i129[] = {0, 0, 0, 1, 0, 0, 1};
int i130[] = {0, 0, 0, 1, 0, 1, 0};
int i131[] = {0, 0, 0, 1, 0, 1, 1};
int i132[] = {0, 0, 0, 1, 1, 0, 0};
int i133[] = {0, 0, 0, 1, 1, 0, 1};
int i134[] = {0, 0, 0, 1, 1, 1, 0};
int i135[] = {0, 0, 0, 1, 1, 1, 1};
int i136[] = {0, 0, 1, 0, 0, 0, 0};
int i137[] = {0, 0, 1, 0, 0, 0, 1};
int i138[] = {0, 0, 1, 0, 0, 1, 0};
int i139[] = {0, 0, 1, 0, 0, 1, 1};
int i140[] = {0, 0, 1, 0, 1, 0, 0};
int i141[] = {0, 0, 1, 0, 1, 0, 1};
int i142[] = {0, 0, 1, 0, 1, 1, 0};
int i143[] = {0, 0, 1, 0, 1, 1, 1};
int i144[] = {0, 0, 1, 1, 0, 0, 0};
int i145[] = {0, 0, 1, 1, 0, 0, 1};
int i146[] = {0, 0, 1, 1, 0, 1, 0};
int i147[] = {0, 0, 1, 1, 0, 1, 1};
int i148[] = {0, 0, 1, 1, 1, 0, 0};
int i149[] = {0, 0, 1, 1, 1, 0, 1};
int i150[] = {0, 0, 1, 1, 1, 1, 0};
int i151[] = {0, 0, 1, 1, 1, 1, 1};
int i152[] = {0, 1, 0, 0, 0, 0, 0};
int i153[] = {0, 1, 0, 0, 0, 0, 1};
int i154[] = {0, 1, 0, 0, 0, 1, 0};
int i155[] = {0, 1, 0, 0, 0, 1, 1};
int i156[] = {0, 1, 0, 0, 1, 0, 0};
int i157[] = {0, 1, 0, 0, 1, 0, 1};
int i158[] = {0, 1, 0, 0, 1, 1, 0};
int i159[] = {0, 1, 0, 0, 1, 1, 1};
int i160[] = {0, 1, 0, 1, 0, 0, 0};
int i161[] = {0, 1, 0, 1, 0, 0, 1};
int i162[] = {0, 1, 0, 1, 0, 1, 0};
int i163[] = {0, 1, 0, 1, 0, 1, 1};
int i164[] = {0, 1, 0, 1, 1, 0, 0};
int i165[] = {0, 1, 0, 1, 1, 0, 1};
int i166[] = {0, 1, 0, 1, 1, 1, 0};
int i167[] = {0, 1, 0, 1, 1, 1, 1};
int i168[] = {0, 1, 1, 0, 0, 0, 0};
int i169[] = {0, 1, 1, 0, 0, 0, 1};
int i170[] = {0, 1, 1, 0, 0, 1, 0};
int i171[] = {0, 1, 1, 0, 0, 1, 1};
int i172[] = {0, 1, 1, 0, 1, 0, 0};
int i173[] = {0, 1, 1, 0, 1, 0, 1};
int i174[] = {0, 1, 1, 0, 1, 1, 0};
int i175[] = {0, 1, 1, 0, 1, 1, 1};
int i176[] = {0, 1, 1, 1, 0, 0, 0};
int i177[] = {0, 1, 1, 1, 0, 0, 1};
int i178[] = {0, 1, 1, 1, 0, 1, 0};
int i179[] = {0, 1, 1, 1, 0, 1, 1};
int i180[] = {0, 1, 1, 1, 1, 0, 0};
int i181[] = {0, 1, 1, 1, 1, 0, 1};
int i182[] = {0, 1, 1, 1, 1, 1, 0};
int i183[] = {0, 1, 1, 1, 1, 1, 1};
int i184[] = {1, 0, 0, 0, 0, 0, 0};
int i185[] = {1, 0, 0, 0, 0, 0, 1};
int i186[] = {1, 0, 0, 0, 0, 1, 0};
int i187[] = {1, 0, 0, 0, 0, 1, 1};
int i188[] = {1, 0, 0, 0, 1, 0, 0};
int i189[] = {1, 0, 0, 0, 1, 0, 1};
int i190[] = {1, 0, 0, 0, 1, 1, 0};
int i191[] = {1, 0, 0, 0, 1, 1, 1};
int i192[] = {1, 0, 0, 1, 0, 0, 0};
int i193[] = {1, 0, 0, 1, 0, 0, 1};
int i194[] = {1, 0, 0, 1, 0, 1, 0};
int i195[] = {1, 0, 0, 1, 0, 1, 1};
int i196[] = {1, 0, 0, 1, 1, 0, 0};
int i197[] = {1, 0, 0, 1, 1, 0, 1};
int i198[] = {1, 0, 0, 1, 1, 1, 0};
int i199[] = {1, 0, 0, 1, 1, 1, 1};
int i200[] = {1, 0, 1, 0, 0, 0, 0};
int i201[] = {1, 0, 1, 0, 0, 0, 1};
int i202[] = {1, 0, 1, 0, 0, 1, 0};
int i203[] = {1, 0, 1, 0, 0, 1, 1};
int i204[] = {1, 0, 1, 0, 1, 0, 0};
int i205[] = {1, 0, 1, 0, 1, 0, 1};
int i206[] = {1, 0, 1, 0, 1, 1, 0};
int i207[] = {1, 0, 1, 0, 1, 1, 1};
int i208[] = {1, 0, 1, 1, 0, 0, 0};
int i209[] = {1, 0, 1, 1, 0, 0, 1};
int i210[] = {1, 0, 1, 1, 0, 1, 0};
int i211[] = {1, 0, 1, 1, 0, 1, 1};
int i212[] = {1, 0, 1, 1, 1, 0, 0};
int i213[] = {1, 0, 1, 1, 1, 0, 1};
int i214[] = {1, 0, 1, 1, 1, 1, 0};
int i215[] = {1, 0, 1, 1, 1, 1, 1};
int i216[] = {1, 1, 0, 0, 0, 0, 0};
int i217[] = {1, 1, 0, 0, 0, 0, 1};
int i218[] = {1, 1, 0, 0, 0, 1, 0};
int i219[] = {1, 1, 0, 0, 0, 1, 1};
int i220[] = {1, 1, 0, 0, 1, 0, 0};
int i221[] = {1, 1, 0, 0, 1, 0, 1};
int i222[] = {1, 1, 0, 0, 1, 1, 0};
int i223[] = {1, 1, 0, 0, 1, 1, 1};
int i224[] = {1, 1, 0, 1, 0, 0, 0};
int i225[] = {1, 1, 0, 1, 0, 0, 1};
int i226[] = {1, 1, 0, 1, 0, 1, 0};
int i227[] = {1, 1, 0, 1, 0, 1, 1};
int i228[] = {1, 1, 0, 1, 1, 0, 0};
int i229[] = {1, 1, 0, 1, 1, 0, 1};
int i230[] = {1, 1, 0, 1, 1, 1, 0};
int i231[] = {1, 1, 0, 1, 1, 1, 1};
int i232[] = {1, 1, 1, 0, 0, 0, 0};
int i233[] = {1, 1, 1, 0, 0, 0, 1};
int i234[] = {1, 1, 1, 0, 0, 1, 0};
int i235[] = {1, 1, 1, 0, 0, 1, 1};
int i236[] = {1, 1, 1, 0, 1, 0, 0};
int i237[] = {1, 1, 1, 0, 1, 0, 1};
int i238[] = {1, 1, 1, 0, 1, 1, 0};
int i239[] = {1, 1, 1, 0, 1, 1, 1};
int i240[] = {1, 1, 1, 1, 0, 0, 0};
int i241[] = {1, 1, 1, 1, 0, 0, 1};
int i242[] = {1, 1, 1, 1, 0, 1, 0};
int i243[] = {1, 1, 1, 1, 0, 1, 1};
int i244[] = {1, 1, 1, 1, 1, 0, 0};
int i245[] = {1, 1, 1, 1, 1, 0, 1};
int i246[] = {1, 1, 1, 1, 1, 1, 0};
assert(std::is_heap(i120, i120+7) == (std::is_heap_until(i120, i120+7) == i120+7));
assert(std::is_heap(i121, i121+7) == (std::is_heap_until(i121, i121+7) == i121+7));
assert(std::is_heap(i122, i122+7) == (std::is_heap_until(i122, i122+7) == i122+7));
assert(std::is_heap(i123, i123+7) == (std::is_heap_until(i123, i123+7) == i123+7));
assert(std::is_heap(i124, i124+7) == (std::is_heap_until(i124, i124+7) == i124+7));
assert(std::is_heap(i125, i125+7) == (std::is_heap_until(i125, i125+7) == i125+7));
assert(std::is_heap(i126, i126+7) == (std::is_heap_until(i126, i126+7) == i126+7));
assert(std::is_heap(i127, i127+7) == (std::is_heap_until(i127, i127+7) == i127+7));
assert(std::is_heap(i128, i128+7) == (std::is_heap_until(i128, i128+7) == i128+7));
assert(std::is_heap(i129, i129+7) == (std::is_heap_until(i129, i129+7) == i129+7));
assert(std::is_heap(i130, i130+7) == (std::is_heap_until(i130, i130+7) == i130+7));
assert(std::is_heap(i131, i131+7) == (std::is_heap_until(i131, i131+7) == i131+7));
assert(std::is_heap(i132, i132+7) == (std::is_heap_until(i132, i132+7) == i132+7));
assert(std::is_heap(i133, i133+7) == (std::is_heap_until(i133, i133+7) == i133+7));
assert(std::is_heap(i134, i134+7) == (std::is_heap_until(i134, i134+7) == i134+7));
assert(std::is_heap(i135, i135+7) == (std::is_heap_until(i135, i135+7) == i135+7));
assert(std::is_heap(i136, i136+7) == (std::is_heap_until(i136, i136+7) == i136+7));
assert(std::is_heap(i137, i137+7) == (std::is_heap_until(i137, i137+7) == i137+7));
assert(std::is_heap(i138, i138+7) == (std::is_heap_until(i138, i138+7) == i138+7));
assert(std::is_heap(i139, i139+7) == (std::is_heap_until(i139, i139+7) == i139+7));
assert(std::is_heap(i140, i140+7) == (std::is_heap_until(i140, i140+7) == i140+7));
assert(std::is_heap(i141, i141+7) == (std::is_heap_until(i141, i141+7) == i141+7));
assert(std::is_heap(i142, i142+7) == (std::is_heap_until(i142, i142+7) == i142+7));
assert(std::is_heap(i143, i143+7) == (std::is_heap_until(i143, i143+7) == i143+7));
assert(std::is_heap(i144, i144+7) == (std::is_heap_until(i144, i144+7) == i144+7));
assert(std::is_heap(i145, i145+7) == (std::is_heap_until(i145, i145+7) == i145+7));
assert(std::is_heap(i146, i146+7) == (std::is_heap_until(i146, i146+7) == i146+7));
assert(std::is_heap(i147, i147+7) == (std::is_heap_until(i147, i147+7) == i147+7));
assert(std::is_heap(i148, i148+7) == (std::is_heap_until(i148, i148+7) == i148+7));
assert(std::is_heap(i149, i149+7) == (std::is_heap_until(i149, i149+7) == i149+7));
assert(std::is_heap(i150, i150+7) == (std::is_heap_until(i150, i150+7) == i150+7));
assert(std::is_heap(i151, i151+7) == (std::is_heap_until(i151, i151+7) == i151+7));
assert(std::is_heap(i152, i152+7) == (std::is_heap_until(i152, i152+7) == i152+7));
assert(std::is_heap(i153, i153+7) == (std::is_heap_until(i153, i153+7) == i153+7));
assert(std::is_heap(i154, i154+7) == (std::is_heap_until(i154, i154+7) == i154+7));
assert(std::is_heap(i155, i155+7) == (std::is_heap_until(i155, i155+7) == i155+7));
assert(std::is_heap(i156, i156+7) == (std::is_heap_until(i156, i156+7) == i156+7));
assert(std::is_heap(i157, i157+7) == (std::is_heap_until(i157, i157+7) == i157+7));
assert(std::is_heap(i158, i158+7) == (std::is_heap_until(i158, i158+7) == i158+7));
assert(std::is_heap(i159, i159+7) == (std::is_heap_until(i159, i159+7) == i159+7));
assert(std::is_heap(i160, i160+7) == (std::is_heap_until(i160, i160+7) == i160+7));
assert(std::is_heap(i161, i161+7) == (std::is_heap_until(i161, i161+7) == i161+7));
assert(std::is_heap(i162, i162+7) == (std::is_heap_until(i162, i162+7) == i162+7));
assert(std::is_heap(i163, i163+7) == (std::is_heap_until(i163, i163+7) == i163+7));
assert(std::is_heap(i164, i164+7) == (std::is_heap_until(i164, i164+7) == i164+7));
assert(std::is_heap(i165, i165+7) == (std::is_heap_until(i165, i165+7) == i165+7));
assert(std::is_heap(i166, i166+7) == (std::is_heap_until(i166, i166+7) == i166+7));
assert(std::is_heap(i167, i167+7) == (std::is_heap_until(i167, i167+7) == i167+7));
assert(std::is_heap(i168, i168+7) == (std::is_heap_until(i168, i168+7) == i168+7));
assert(std::is_heap(i169, i169+7) == (std::is_heap_until(i169, i169+7) == i169+7));
assert(std::is_heap(i170, i170+7) == (std::is_heap_until(i170, i170+7) == i170+7));
assert(std::is_heap(i171, i171+7) == (std::is_heap_until(i171, i171+7) == i171+7));
assert(std::is_heap(i172, i172+7) == (std::is_heap_until(i172, i172+7) == i172+7));
assert(std::is_heap(i173, i173+7) == (std::is_heap_until(i173, i173+7) == i173+7));
assert(std::is_heap(i174, i174+7) == (std::is_heap_until(i174, i174+7) == i174+7));
assert(std::is_heap(i175, i175+7) == (std::is_heap_until(i175, i175+7) == i175+7));
assert(std::is_heap(i176, i176+7) == (std::is_heap_until(i176, i176+7) == i176+7));
assert(std::is_heap(i177, i177+7) == (std::is_heap_until(i177, i177+7) == i177+7));
assert(std::is_heap(i178, i178+7) == (std::is_heap_until(i178, i178+7) == i178+7));
assert(std::is_heap(i179, i179+7) == (std::is_heap_until(i179, i179+7) == i179+7));
assert(std::is_heap(i180, i180+7) == (std::is_heap_until(i180, i180+7) == i180+7));
assert(std::is_heap(i181, i181+7) == (std::is_heap_until(i181, i181+7) == i181+7));
assert(std::is_heap(i182, i182+7) == (std::is_heap_until(i182, i182+7) == i182+7));
assert(std::is_heap(i183, i183+7) == (std::is_heap_until(i183, i183+7) == i183+7));
assert(std::is_heap(i184, i184+7) == (std::is_heap_until(i184, i184+7) == i184+7));
assert(std::is_heap(i185, i185+7) == (std::is_heap_until(i185, i185+7) == i185+7));
assert(std::is_heap(i186, i186+7) == (std::is_heap_until(i186, i186+7) == i186+7));
assert(std::is_heap(i187, i187+7) == (std::is_heap_until(i187, i187+7) == i187+7));
assert(std::is_heap(i188, i188+7) == (std::is_heap_until(i188, i188+7) == i188+7));
assert(std::is_heap(i189, i189+7) == (std::is_heap_until(i189, i189+7) == i189+7));
assert(std::is_heap(i190, i190+7) == (std::is_heap_until(i190, i190+7) == i190+7));
assert(std::is_heap(i191, i191+7) == (std::is_heap_until(i191, i191+7) == i191+7));
assert(std::is_heap(i192, i192+7) == (std::is_heap_until(i192, i192+7) == i192+7));
assert(std::is_heap(i193, i193+7) == (std::is_heap_until(i193, i193+7) == i193+7));
assert(std::is_heap(i194, i194+7) == (std::is_heap_until(i194, i194+7) == i194+7));
assert(std::is_heap(i195, i195+7) == (std::is_heap_until(i195, i195+7) == i195+7));
assert(std::is_heap(i196, i196+7) == (std::is_heap_until(i196, i196+7) == i196+7));
assert(std::is_heap(i197, i197+7) == (std::is_heap_until(i197, i197+7) == i197+7));
assert(std::is_heap(i198, i198+7) == (std::is_heap_until(i198, i198+7) == i198+7));
assert(std::is_heap(i199, i199+7) == (std::is_heap_until(i199, i199+7) == i199+7));
assert(std::is_heap(i200, i200+7) == (std::is_heap_until(i200, i200+7) == i200+7));
assert(std::is_heap(i201, i201+7) == (std::is_heap_until(i201, i201+7) == i201+7));
assert(std::is_heap(i202, i202+7) == (std::is_heap_until(i202, i202+7) == i202+7));
assert(std::is_heap(i203, i203+7) == (std::is_heap_until(i203, i203+7) == i203+7));
assert(std::is_heap(i204, i204+7) == (std::is_heap_until(i204, i204+7) == i204+7));
assert(std::is_heap(i205, i205+7) == (std::is_heap_until(i205, i205+7) == i205+7));
assert(std::is_heap(i206, i206+7) == (std::is_heap_until(i206, i206+7) == i206+7));
assert(std::is_heap(i207, i207+7) == (std::is_heap_until(i207, i207+7) == i207+7));
assert(std::is_heap(i208, i208+7) == (std::is_heap_until(i208, i208+7) == i208+7));
assert(std::is_heap(i209, i209+7) == (std::is_heap_until(i209, i209+7) == i209+7));
assert(std::is_heap(i210, i210+7) == (std::is_heap_until(i210, i210+7) == i210+7));
assert(std::is_heap(i211, i211+7) == (std::is_heap_until(i211, i211+7) == i211+7));
assert(std::is_heap(i212, i212+7) == (std::is_heap_until(i212, i212+7) == i212+7));
assert(std::is_heap(i213, i213+7) == (std::is_heap_until(i213, i213+7) == i213+7));
assert(std::is_heap(i214, i214+7) == (std::is_heap_until(i214, i214+7) == i214+7));
assert(std::is_heap(i215, i215+7) == (std::is_heap_until(i215, i215+7) == i215+7));
assert(std::is_heap(i216, i216+7) == (std::is_heap_until(i216, i216+7) == i216+7));
assert(std::is_heap(i217, i217+7) == (std::is_heap_until(i217, i217+7) == i217+7));
assert(std::is_heap(i218, i218+7) == (std::is_heap_until(i218, i218+7) == i218+7));
assert(std::is_heap(i219, i219+7) == (std::is_heap_until(i219, i219+7) == i219+7));
assert(std::is_heap(i220, i220+7) == (std::is_heap_until(i220, i220+7) == i220+7));
assert(std::is_heap(i221, i221+7) == (std::is_heap_until(i221, i221+7) == i221+7));
assert(std::is_heap(i222, i222+7) == (std::is_heap_until(i222, i222+7) == i222+7));
assert(std::is_heap(i223, i223+7) == (std::is_heap_until(i223, i223+7) == i223+7));
assert(std::is_heap(i224, i224+7) == (std::is_heap_until(i224, i224+7) == i224+7));
assert(std::is_heap(i225, i225+7) == (std::is_heap_until(i225, i225+7) == i225+7));
assert(std::is_heap(i226, i226+7) == (std::is_heap_until(i226, i226+7) == i226+7));
assert(std::is_heap(i227, i227+7) == (std::is_heap_until(i227, i227+7) == i227+7));
assert(std::is_heap(i228, i228+7) == (std::is_heap_until(i228, i228+7) == i228+7));
assert(std::is_heap(i229, i229+7) == (std::is_heap_until(i229, i229+7) == i229+7));
assert(std::is_heap(i230, i230+7) == (std::is_heap_until(i230, i230+7) == i230+7));
assert(std::is_heap(i231, i231+7) == (std::is_heap_until(i231, i231+7) == i231+7));
assert(std::is_heap(i232, i232+7) == (std::is_heap_until(i232, i232+7) == i232+7));
assert(std::is_heap(i233, i233+7) == (std::is_heap_until(i233, i233+7) == i233+7));
assert(std::is_heap(i234, i234+7) == (std::is_heap_until(i234, i234+7) == i234+7));
assert(std::is_heap(i235, i235+7) == (std::is_heap_until(i235, i235+7) == i235+7));
assert(std::is_heap(i236, i236+7) == (std::is_heap_until(i236, i236+7) == i236+7));
assert(std::is_heap(i237, i237+7) == (std::is_heap_until(i237, i237+7) == i237+7));
assert(std::is_heap(i238, i238+7) == (std::is_heap_until(i238, i238+7) == i238+7));
assert(std::is_heap(i239, i239+7) == (std::is_heap_until(i239, i239+7) == i239+7));
assert(std::is_heap(i240, i240+7) == (std::is_heap_until(i240, i240+7) == i240+7));
assert(std::is_heap(i241, i241+7) == (std::is_heap_until(i241, i241+7) == i241+7));
assert(std::is_heap(i242, i242+7) == (std::is_heap_until(i242, i242+7) == i242+7));
assert(std::is_heap(i243, i243+7) == (std::is_heap_until(i243, i243+7) == i243+7));
assert(std::is_heap(i244, i244+7) == (std::is_heap_until(i244, i244+7) == i244+7));
assert(std::is_heap(i245, i245+7) == (std::is_heap_until(i245, i245+7) == i245+7));
assert(std::is_heap(i246, i246+7) == (std::is_heap_until(i246, i246+7) == i246+7));
}
int main()
{
test();
}

View File

@@ -0,0 +1,523 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires LessThanComparable<Iter::value_type>
// bool
// is_heap(Iter first, Iter last);
#include <algorithm>
#include <functional>
#include <cassert>
void test()
{
int i1[] = {0, 0};
assert(std::is_heap(i1, i1, std::greater<int>()));
assert(std::is_heap(i1, i1+1, std::greater<int>()) == (std::is_heap_until(i1, i1+1, std::greater<int>()) == i1+1));
int i2[] = {0, 1};
int i3[] = {1, 0};
assert(std::is_heap(i1, i1+2, std::greater<int>()) == (std::is_heap_until(i1, i1+2, std::greater<int>()) == i1+2));
assert(std::is_heap(i2, i2+2, std::greater<int>()) == (std::is_heap_until(i2, i2+2, std::greater<int>()) == i2+2));
assert(std::is_heap(i3, i3+2, std::greater<int>()) == (std::is_heap_until(i3, i3+2, std::greater<int>()) == i3+2));
int i4[] = {0, 0, 0};
int i5[] = {0, 0, 1};
int i6[] = {0, 1, 0};
int i7[] = {0, 1, 1};
int i8[] = {1, 0, 0};
int i9[] = {1, 0, 1};
int i10[] = {1, 1, 0};
assert(std::is_heap(i4, i4+3, std::greater<int>()) == (std::is_heap_until(i4, i4+3, std::greater<int>()) == i4+3));
assert(std::is_heap(i5, i5+3, std::greater<int>()) == (std::is_heap_until(i5, i5+3, std::greater<int>()) == i5+3));
assert(std::is_heap(i6, i6+3, std::greater<int>()) == (std::is_heap_until(i6, i6+3, std::greater<int>()) == i6+3));
assert(std::is_heap(i7, i7+3, std::greater<int>()) == (std::is_heap_until(i7, i7+3, std::greater<int>()) == i7+3));
assert(std::is_heap(i8, i8+3, std::greater<int>()) == (std::is_heap_until(i8, i8+3, std::greater<int>()) == i8+3));
assert(std::is_heap(i9, i9+3, std::greater<int>()) == (std::is_heap_until(i9, i9+3, std::greater<int>()) == i9+3));
assert(std::is_heap(i10, i10+3, std::greater<int>()) == (std::is_heap_until(i10, i10+3, std::greater<int>()) == i10+3));
int i11[] = {0, 0, 0, 0};
int i12[] = {0, 0, 0, 1};
int i13[] = {0, 0, 1, 0};
int i14[] = {0, 0, 1, 1};
int i15[] = {0, 1, 0, 0};
int i16[] = {0, 1, 0, 1};
int i17[] = {0, 1, 1, 0};
int i18[] = {0, 1, 1, 1};
int i19[] = {1, 0, 0, 0};
int i20[] = {1, 0, 0, 1};
int i21[] = {1, 0, 1, 0};
int i22[] = {1, 0, 1, 1};
int i23[] = {1, 1, 0, 0};
int i24[] = {1, 1, 0, 1};
int i25[] = {1, 1, 1, 0};
assert(std::is_heap(i11, i11+4, std::greater<int>()) == (std::is_heap_until(i11, i11+4, std::greater<int>()) == i11+4));
assert(std::is_heap(i12, i12+4, std::greater<int>()) == (std::is_heap_until(i12, i12+4, std::greater<int>()) == i12+4));
assert(std::is_heap(i13, i13+4, std::greater<int>()) == (std::is_heap_until(i13, i13+4, std::greater<int>()) == i13+4));
assert(std::is_heap(i14, i14+4, std::greater<int>()) == (std::is_heap_until(i14, i14+4, std::greater<int>()) == i14+4));
assert(std::is_heap(i15, i15+4, std::greater<int>()) == (std::is_heap_until(i15, i15+4, std::greater<int>()) == i15+4));
assert(std::is_heap(i16, i16+4, std::greater<int>()) == (std::is_heap_until(i16, i16+4, std::greater<int>()) == i16+4));
assert(std::is_heap(i17, i17+4, std::greater<int>()) == (std::is_heap_until(i17, i17+4, std::greater<int>()) == i17+4));
assert(std::is_heap(i18, i18+4, std::greater<int>()) == (std::is_heap_until(i18, i18+4, std::greater<int>()) == i18+4));
assert(std::is_heap(i19, i19+4, std::greater<int>()) == (std::is_heap_until(i19, i19+4, std::greater<int>()) == i19+4));
assert(std::is_heap(i20, i20+4, std::greater<int>()) == (std::is_heap_until(i20, i20+4, std::greater<int>()) == i20+4));
assert(std::is_heap(i21, i21+4, std::greater<int>()) == (std::is_heap_until(i21, i21+4, std::greater<int>()) == i21+4));
assert(std::is_heap(i22, i22+4, std::greater<int>()) == (std::is_heap_until(i22, i22+4, std::greater<int>()) == i22+4));
assert(std::is_heap(i23, i23+4, std::greater<int>()) == (std::is_heap_until(i23, i23+4, std::greater<int>()) == i23+4));
assert(std::is_heap(i24, i24+4, std::greater<int>()) == (std::is_heap_until(i24, i24+4, std::greater<int>()) == i24+4));
assert(std::is_heap(i25, i25+4, std::greater<int>()) == (std::is_heap_until(i25, i25+4, std::greater<int>()) == i25+4));
int i26[] = {0, 0, 0, 0, 0};
int i27[] = {0, 0, 0, 0, 1};
int i28[] = {0, 0, 0, 1, 0};
int i29[] = {0, 0, 0, 1, 1};
int i30[] = {0, 0, 1, 0, 0};
int i31[] = {0, 0, 1, 0, 1};
int i32[] = {0, 0, 1, 1, 0};
int i33[] = {0, 0, 1, 1, 1};
int i34[] = {0, 1, 0, 0, 0};
int i35[] = {0, 1, 0, 0, 1};
int i36[] = {0, 1, 0, 1, 0};
int i37[] = {0, 1, 0, 1, 1};
int i38[] = {0, 1, 1, 0, 0};
int i39[] = {0, 1, 1, 0, 1};
int i40[] = {0, 1, 1, 1, 0};
int i41[] = {0, 1, 1, 1, 1};
int i42[] = {1, 0, 0, 0, 0};
int i43[] = {1, 0, 0, 0, 1};
int i44[] = {1, 0, 0, 1, 0};
int i45[] = {1, 0, 0, 1, 1};
int i46[] = {1, 0, 1, 0, 0};
int i47[] = {1, 0, 1, 0, 1};
int i48[] = {1, 0, 1, 1, 0};
int i49[] = {1, 0, 1, 1, 1};
int i50[] = {1, 1, 0, 0, 0};
int i51[] = {1, 1, 0, 0, 1};
int i52[] = {1, 1, 0, 1, 0};
int i53[] = {1, 1, 0, 1, 1};
int i54[] = {1, 1, 1, 0, 0};
int i55[] = {1, 1, 1, 0, 1};
int i56[] = {1, 1, 1, 1, 0};
assert(std::is_heap(i26, i26+5, std::greater<int>()) == (std::is_heap_until(i26, i26+5, std::greater<int>()) == i26+5));
assert(std::is_heap(i27, i27+5, std::greater<int>()) == (std::is_heap_until(i27, i27+5, std::greater<int>()) == i27+5));
assert(std::is_heap(i28, i28+5, std::greater<int>()) == (std::is_heap_until(i28, i28+5, std::greater<int>()) == i28+5));
assert(std::is_heap(i29, i29+5, std::greater<int>()) == (std::is_heap_until(i29, i29+5, std::greater<int>()) == i29+5));
assert(std::is_heap(i30, i30+5, std::greater<int>()) == (std::is_heap_until(i30, i30+5, std::greater<int>()) == i30+5));
assert(std::is_heap(i31, i31+5, std::greater<int>()) == (std::is_heap_until(i31, i31+5, std::greater<int>()) == i31+5));
assert(std::is_heap(i32, i32+5, std::greater<int>()) == (std::is_heap_until(i32, i32+5, std::greater<int>()) == i32+5));
assert(std::is_heap(i33, i33+5, std::greater<int>()) == (std::is_heap_until(i33, i33+5, std::greater<int>()) == i33+5));
assert(std::is_heap(i34, i34+5, std::greater<int>()) == (std::is_heap_until(i34, i34+5, std::greater<int>()) == i34+5));
assert(std::is_heap(i35, i35+5, std::greater<int>()) == (std::is_heap_until(i35, i35+5, std::greater<int>()) == i35+5));
assert(std::is_heap(i36, i36+5, std::greater<int>()) == (std::is_heap_until(i36, i36+5, std::greater<int>()) == i36+5));
assert(std::is_heap(i37, i37+5, std::greater<int>()) == (std::is_heap_until(i37, i37+5, std::greater<int>()) == i37+5));
assert(std::is_heap(i38, i38+5, std::greater<int>()) == (std::is_heap_until(i38, i38+5, std::greater<int>()) == i38+5));
assert(std::is_heap(i39, i39+5, std::greater<int>()) == (std::is_heap_until(i39, i39+5, std::greater<int>()) == i39+5));
assert(std::is_heap(i40, i40+5, std::greater<int>()) == (std::is_heap_until(i40, i40+5, std::greater<int>()) == i40+5));
assert(std::is_heap(i41, i41+5, std::greater<int>()) == (std::is_heap_until(i41, i41+5, std::greater<int>()) == i41+5));
assert(std::is_heap(i42, i42+5, std::greater<int>()) == (std::is_heap_until(i42, i42+5, std::greater<int>()) == i42+5));
assert(std::is_heap(i43, i43+5, std::greater<int>()) == (std::is_heap_until(i43, i43+5, std::greater<int>()) == i43+5));
assert(std::is_heap(i44, i44+5, std::greater<int>()) == (std::is_heap_until(i44, i44+5, std::greater<int>()) == i44+5));
assert(std::is_heap(i45, i45+5, std::greater<int>()) == (std::is_heap_until(i45, i45+5, std::greater<int>()) == i45+5));
assert(std::is_heap(i46, i46+5, std::greater<int>()) == (std::is_heap_until(i46, i46+5, std::greater<int>()) == i46+5));
assert(std::is_heap(i47, i47+5, std::greater<int>()) == (std::is_heap_until(i47, i47+5, std::greater<int>()) == i47+5));
assert(std::is_heap(i48, i48+5, std::greater<int>()) == (std::is_heap_until(i48, i48+5, std::greater<int>()) == i48+5));
assert(std::is_heap(i49, i49+5, std::greater<int>()) == (std::is_heap_until(i49, i49+5, std::greater<int>()) == i49+5));
assert(std::is_heap(i50, i50+5, std::greater<int>()) == (std::is_heap_until(i50, i50+5, std::greater<int>()) == i50+5));
assert(std::is_heap(i51, i51+5, std::greater<int>()) == (std::is_heap_until(i51, i51+5, std::greater<int>()) == i51+5));
assert(std::is_heap(i52, i52+5, std::greater<int>()) == (std::is_heap_until(i52, i52+5, std::greater<int>()) == i52+5));
assert(std::is_heap(i53, i53+5, std::greater<int>()) == (std::is_heap_until(i53, i53+5, std::greater<int>()) == i53+5));
assert(std::is_heap(i54, i54+5, std::greater<int>()) == (std::is_heap_until(i54, i54+5, std::greater<int>()) == i54+5));
assert(std::is_heap(i55, i55+5, std::greater<int>()) == (std::is_heap_until(i55, i55+5, std::greater<int>()) == i55+5));
assert(std::is_heap(i56, i56+5, std::greater<int>()) == (std::is_heap_until(i56, i56+5, std::greater<int>()) == i56+5));
int i57[] = {0, 0, 0, 0, 0, 0};
int i58[] = {0, 0, 0, 0, 0, 1};
int i59[] = {0, 0, 0, 0, 1, 0};
int i60[] = {0, 0, 0, 0, 1, 1};
int i61[] = {0, 0, 0, 1, 0, 0};
int i62[] = {0, 0, 0, 1, 0, 1};
int i63[] = {0, 0, 0, 1, 1, 0};
int i64[] = {0, 0, 0, 1, 1, 1};
int i65[] = {0, 0, 1, 0, 0, 0};
int i66[] = {0, 0, 1, 0, 0, 1};
int i67[] = {0, 0, 1, 0, 1, 0};
int i68[] = {0, 0, 1, 0, 1, 1};
int i69[] = {0, 0, 1, 1, 0, 0};
int i70[] = {0, 0, 1, 1, 0, 1};
int i71[] = {0, 0, 1, 1, 1, 0};
int i72[] = {0, 0, 1, 1, 1, 1};
int i73[] = {0, 1, 0, 0, 0, 0};
int i74[] = {0, 1, 0, 0, 0, 1};
int i75[] = {0, 1, 0, 0, 1, 0};
int i76[] = {0, 1, 0, 0, 1, 1};
int i77[] = {0, 1, 0, 1, 0, 0};
int i78[] = {0, 1, 0, 1, 0, 1};
int i79[] = {0, 1, 0, 1, 1, 0};
int i80[] = {0, 1, 0, 1, 1, 1};
int i81[] = {0, 1, 1, 0, 0, 0};
int i82[] = {0, 1, 1, 0, 0, 1};
int i83[] = {0, 1, 1, 0, 1, 0};
int i84[] = {0, 1, 1, 0, 1, 1};
int i85[] = {0, 1, 1, 1, 0, 0};
int i86[] = {0, 1, 1, 1, 0, 1};
int i87[] = {0, 1, 1, 1, 1, 0};
int i88[] = {0, 1, 1, 1, 1, 1};
int i89[] = {1, 0, 0, 0, 0, 0};
int i90[] = {1, 0, 0, 0, 0, 1};
int i91[] = {1, 0, 0, 0, 1, 0};
int i92[] = {1, 0, 0, 0, 1, 1};
int i93[] = {1, 0, 0, 1, 0, 0};
int i94[] = {1, 0, 0, 1, 0, 1};
int i95[] = {1, 0, 0, 1, 1, 0};
int i96[] = {1, 0, 0, 1, 1, 1};
int i97[] = {1, 0, 1, 0, 0, 0};
int i98[] = {1, 0, 1, 0, 0, 1};
int i99[] = {1, 0, 1, 0, 1, 0};
int i100[] = {1, 0, 1, 0, 1, 1};
int i101[] = {1, 0, 1, 1, 0, 0};
int i102[] = {1, 0, 1, 1, 0, 1};
int i103[] = {1, 0, 1, 1, 1, 0};
int i104[] = {1, 0, 1, 1, 1, 1};
int i105[] = {1, 1, 0, 0, 0, 0};
int i106[] = {1, 1, 0, 0, 0, 1};
int i107[] = {1, 1, 0, 0, 1, 0};
int i108[] = {1, 1, 0, 0, 1, 1};
int i109[] = {1, 1, 0, 1, 0, 0};
int i110[] = {1, 1, 0, 1, 0, 1};
int i111[] = {1, 1, 0, 1, 1, 0};
int i112[] = {1, 1, 0, 1, 1, 1};
int i113[] = {1, 1, 1, 0, 0, 0};
int i114[] = {1, 1, 1, 0, 0, 1};
int i115[] = {1, 1, 1, 0, 1, 0};
int i116[] = {1, 1, 1, 0, 1, 1};
int i117[] = {1, 1, 1, 1, 0, 0};
int i118[] = {1, 1, 1, 1, 0, 1};
int i119[] = {1, 1, 1, 1, 1, 0};
assert(std::is_heap(i57, i57+6, std::greater<int>()) == (std::is_heap_until(i57, i57+6, std::greater<int>()) == i57+6));
assert(std::is_heap(i58, i58+6, std::greater<int>()) == (std::is_heap_until(i58, i58+6, std::greater<int>()) == i58+6));
assert(std::is_heap(i59, i59+6, std::greater<int>()) == (std::is_heap_until(i59, i59+6, std::greater<int>()) == i59+6));
assert(std::is_heap(i60, i60+6, std::greater<int>()) == (std::is_heap_until(i60, i60+6, std::greater<int>()) == i60+6));
assert(std::is_heap(i61, i61+6, std::greater<int>()) == (std::is_heap_until(i61, i61+6, std::greater<int>()) == i61+6));
assert(std::is_heap(i62, i62+6, std::greater<int>()) == (std::is_heap_until(i62, i62+6, std::greater<int>()) == i62+6));
assert(std::is_heap(i63, i63+6, std::greater<int>()) == (std::is_heap_until(i63, i63+6, std::greater<int>()) == i63+6));
assert(std::is_heap(i64, i64+6, std::greater<int>()) == (std::is_heap_until(i64, i64+6, std::greater<int>()) == i64+6));
assert(std::is_heap(i65, i65+6, std::greater<int>()) == (std::is_heap_until(i65, i65+6, std::greater<int>()) == i65+6));
assert(std::is_heap(i66, i66+6, std::greater<int>()) == (std::is_heap_until(i66, i66+6, std::greater<int>()) == i66+6));
assert(std::is_heap(i67, i67+6, std::greater<int>()) == (std::is_heap_until(i67, i67+6, std::greater<int>()) == i67+6));
assert(std::is_heap(i68, i68+6, std::greater<int>()) == (std::is_heap_until(i68, i68+6, std::greater<int>()) == i68+6));
assert(std::is_heap(i69, i69+6, std::greater<int>()) == (std::is_heap_until(i69, i69+6, std::greater<int>()) == i69+6));
assert(std::is_heap(i70, i70+6, std::greater<int>()) == (std::is_heap_until(i70, i70+6, std::greater<int>()) == i70+6));
assert(std::is_heap(i71, i71+6, std::greater<int>()) == (std::is_heap_until(i71, i71+6, std::greater<int>()) == i71+6));
assert(std::is_heap(i72, i72+6, std::greater<int>()) == (std::is_heap_until(i72, i72+6, std::greater<int>()) == i72+6));
assert(std::is_heap(i73, i73+6, std::greater<int>()) == (std::is_heap_until(i73, i73+6, std::greater<int>()) == i73+6));
assert(std::is_heap(i74, i74+6, std::greater<int>()) == (std::is_heap_until(i74, i74+6, std::greater<int>()) == i74+6));
assert(std::is_heap(i75, i75+6, std::greater<int>()) == (std::is_heap_until(i75, i75+6, std::greater<int>()) == i75+6));
assert(std::is_heap(i76, i76+6, std::greater<int>()) == (std::is_heap_until(i76, i76+6, std::greater<int>()) == i76+6));
assert(std::is_heap(i77, i77+6, std::greater<int>()) == (std::is_heap_until(i77, i77+6, std::greater<int>()) == i77+6));
assert(std::is_heap(i78, i78+6, std::greater<int>()) == (std::is_heap_until(i78, i78+6, std::greater<int>()) == i78+6));
assert(std::is_heap(i79, i79+6, std::greater<int>()) == (std::is_heap_until(i79, i79+6, std::greater<int>()) == i79+6));
assert(std::is_heap(i80, i80+6, std::greater<int>()) == (std::is_heap_until(i80, i80+6, std::greater<int>()) == i80+6));
assert(std::is_heap(i81, i81+6, std::greater<int>()) == (std::is_heap_until(i81, i81+6, std::greater<int>()) == i81+6));
assert(std::is_heap(i82, i82+6, std::greater<int>()) == (std::is_heap_until(i82, i82+6, std::greater<int>()) == i82+6));
assert(std::is_heap(i83, i83+6, std::greater<int>()) == (std::is_heap_until(i83, i83+6, std::greater<int>()) == i83+6));
assert(std::is_heap(i84, i84+6, std::greater<int>()) == (std::is_heap_until(i84, i84+6, std::greater<int>()) == i84+6));
assert(std::is_heap(i85, i85+6, std::greater<int>()) == (std::is_heap_until(i85, i85+6, std::greater<int>()) == i85+6));
assert(std::is_heap(i86, i86+6, std::greater<int>()) == (std::is_heap_until(i86, i86+6, std::greater<int>()) == i86+6));
assert(std::is_heap(i87, i87+6, std::greater<int>()) == (std::is_heap_until(i87, i87+6, std::greater<int>()) == i87+6));
assert(std::is_heap(i88, i88+6, std::greater<int>()) == (std::is_heap_until(i88, i88+6, std::greater<int>()) == i88+6));
assert(std::is_heap(i89, i89+6, std::greater<int>()) == (std::is_heap_until(i89, i89+6, std::greater<int>()) == i89+6));
assert(std::is_heap(i90, i90+6, std::greater<int>()) == (std::is_heap_until(i90, i90+6, std::greater<int>()) == i90+6));
assert(std::is_heap(i91, i91+6, std::greater<int>()) == (std::is_heap_until(i91, i91+6, std::greater<int>()) == i91+6));
assert(std::is_heap(i92, i92+6, std::greater<int>()) == (std::is_heap_until(i92, i92+6, std::greater<int>()) == i92+6));
assert(std::is_heap(i93, i93+6, std::greater<int>()) == (std::is_heap_until(i93, i93+6, std::greater<int>()) == i93+6));
assert(std::is_heap(i94, i94+6, std::greater<int>()) == (std::is_heap_until(i94, i94+6, std::greater<int>()) == i94+6));
assert(std::is_heap(i95, i95+6, std::greater<int>()) == (std::is_heap_until(i95, i95+6, std::greater<int>()) == i95+6));
assert(std::is_heap(i96, i96+6, std::greater<int>()) == (std::is_heap_until(i96, i96+6, std::greater<int>()) == i96+6));
assert(std::is_heap(i97, i97+6, std::greater<int>()) == (std::is_heap_until(i97, i97+6, std::greater<int>()) == i97+6));
assert(std::is_heap(i98, i98+6, std::greater<int>()) == (std::is_heap_until(i98, i98+6, std::greater<int>()) == i98+6));
assert(std::is_heap(i99, i99+6, std::greater<int>()) == (std::is_heap_until(i99, i99+6, std::greater<int>()) == i99+6));
assert(std::is_heap(i100, i100+6, std::greater<int>()) == (std::is_heap_until(i100, i100+6, std::greater<int>()) == i100+6));
assert(std::is_heap(i101, i101+6, std::greater<int>()) == (std::is_heap_until(i101, i101+6, std::greater<int>()) == i101+6));
assert(std::is_heap(i102, i102+6, std::greater<int>()) == (std::is_heap_until(i102, i102+6, std::greater<int>()) == i102+6));
assert(std::is_heap(i103, i103+6, std::greater<int>()) == (std::is_heap_until(i103, i103+6, std::greater<int>()) == i103+6));
assert(std::is_heap(i104, i104+6, std::greater<int>()) == (std::is_heap_until(i104, i104+6, std::greater<int>()) == i104+6));
assert(std::is_heap(i105, i105+6, std::greater<int>()) == (std::is_heap_until(i105, i105+6, std::greater<int>()) == i105+6));
assert(std::is_heap(i106, i106+6, std::greater<int>()) == (std::is_heap_until(i106, i106+6, std::greater<int>()) == i106+6));
assert(std::is_heap(i107, i107+6, std::greater<int>()) == (std::is_heap_until(i107, i107+6, std::greater<int>()) == i107+6));
assert(std::is_heap(i108, i108+6, std::greater<int>()) == (std::is_heap_until(i108, i108+6, std::greater<int>()) == i108+6));
assert(std::is_heap(i109, i109+6, std::greater<int>()) == (std::is_heap_until(i109, i109+6, std::greater<int>()) == i109+6));
assert(std::is_heap(i110, i110+6, std::greater<int>()) == (std::is_heap_until(i110, i110+6, std::greater<int>()) == i110+6));
assert(std::is_heap(i111, i111+6, std::greater<int>()) == (std::is_heap_until(i111, i111+6, std::greater<int>()) == i111+6));
assert(std::is_heap(i112, i112+6, std::greater<int>()) == (std::is_heap_until(i112, i112+6, std::greater<int>()) == i112+6));
assert(std::is_heap(i113, i113+6, std::greater<int>()) == (std::is_heap_until(i113, i113+6, std::greater<int>()) == i113+6));
assert(std::is_heap(i114, i114+6, std::greater<int>()) == (std::is_heap_until(i114, i114+6, std::greater<int>()) == i114+6));
assert(std::is_heap(i115, i115+6, std::greater<int>()) == (std::is_heap_until(i115, i115+6, std::greater<int>()) == i115+6));
assert(std::is_heap(i116, i116+6, std::greater<int>()) == (std::is_heap_until(i116, i116+6, std::greater<int>()) == i116+6));
assert(std::is_heap(i117, i117+6, std::greater<int>()) == (std::is_heap_until(i117, i117+6, std::greater<int>()) == i117+6));
assert(std::is_heap(i118, i118+6, std::greater<int>()) == (std::is_heap_until(i118, i118+6, std::greater<int>()) == i118+6));
assert(std::is_heap(i119, i119+6, std::greater<int>()) == (std::is_heap_until(i119, i119+6, std::greater<int>()) == i119+6));
int i120[] = {0, 0, 0, 0, 0, 0, 0};
int i121[] = {0, 0, 0, 0, 0, 0, 1};
int i122[] = {0, 0, 0, 0, 0, 1, 0};
int i123[] = {0, 0, 0, 0, 0, 1, 1};
int i124[] = {0, 0, 0, 0, 1, 0, 0};
int i125[] = {0, 0, 0, 0, 1, 0, 1};
int i126[] = {0, 0, 0, 0, 1, 1, 0};
int i127[] = {0, 0, 0, 0, 1, 1, 1};
int i128[] = {0, 0, 0, 1, 0, 0, 0};
int i129[] = {0, 0, 0, 1, 0, 0, 1};
int i130[] = {0, 0, 0, 1, 0, 1, 0};
int i131[] = {0, 0, 0, 1, 0, 1, 1};
int i132[] = {0, 0, 0, 1, 1, 0, 0};
int i133[] = {0, 0, 0, 1, 1, 0, 1};
int i134[] = {0, 0, 0, 1, 1, 1, 0};
int i135[] = {0, 0, 0, 1, 1, 1, 1};
int i136[] = {0, 0, 1, 0, 0, 0, 0};
int i137[] = {0, 0, 1, 0, 0, 0, 1};
int i138[] = {0, 0, 1, 0, 0, 1, 0};
int i139[] = {0, 0, 1, 0, 0, 1, 1};
int i140[] = {0, 0, 1, 0, 1, 0, 0};
int i141[] = {0, 0, 1, 0, 1, 0, 1};
int i142[] = {0, 0, 1, 0, 1, 1, 0};
int i143[] = {0, 0, 1, 0, 1, 1, 1};
int i144[] = {0, 0, 1, 1, 0, 0, 0};
int i145[] = {0, 0, 1, 1, 0, 0, 1};
int i146[] = {0, 0, 1, 1, 0, 1, 0};
int i147[] = {0, 0, 1, 1, 0, 1, 1};
int i148[] = {0, 0, 1, 1, 1, 0, 0};
int i149[] = {0, 0, 1, 1, 1, 0, 1};
int i150[] = {0, 0, 1, 1, 1, 1, 0};
int i151[] = {0, 0, 1, 1, 1, 1, 1};
int i152[] = {0, 1, 0, 0, 0, 0, 0};
int i153[] = {0, 1, 0, 0, 0, 0, 1};
int i154[] = {0, 1, 0, 0, 0, 1, 0};
int i155[] = {0, 1, 0, 0, 0, 1, 1};
int i156[] = {0, 1, 0, 0, 1, 0, 0};
int i157[] = {0, 1, 0, 0, 1, 0, 1};
int i158[] = {0, 1, 0, 0, 1, 1, 0};
int i159[] = {0, 1, 0, 0, 1, 1, 1};
int i160[] = {0, 1, 0, 1, 0, 0, 0};
int i161[] = {0, 1, 0, 1, 0, 0, 1};
int i162[] = {0, 1, 0, 1, 0, 1, 0};
int i163[] = {0, 1, 0, 1, 0, 1, 1};
int i164[] = {0, 1, 0, 1, 1, 0, 0};
int i165[] = {0, 1, 0, 1, 1, 0, 1};
int i166[] = {0, 1, 0, 1, 1, 1, 0};
int i167[] = {0, 1, 0, 1, 1, 1, 1};
int i168[] = {0, 1, 1, 0, 0, 0, 0};
int i169[] = {0, 1, 1, 0, 0, 0, 1};
int i170[] = {0, 1, 1, 0, 0, 1, 0};
int i171[] = {0, 1, 1, 0, 0, 1, 1};
int i172[] = {0, 1, 1, 0, 1, 0, 0};
int i173[] = {0, 1, 1, 0, 1, 0, 1};
int i174[] = {0, 1, 1, 0, 1, 1, 0};
int i175[] = {0, 1, 1, 0, 1, 1, 1};
int i176[] = {0, 1, 1, 1, 0, 0, 0};
int i177[] = {0, 1, 1, 1, 0, 0, 1};
int i178[] = {0, 1, 1, 1, 0, 1, 0};
int i179[] = {0, 1, 1, 1, 0, 1, 1};
int i180[] = {0, 1, 1, 1, 1, 0, 0};
int i181[] = {0, 1, 1, 1, 1, 0, 1};
int i182[] = {0, 1, 1, 1, 1, 1, 0};
int i183[] = {0, 1, 1, 1, 1, 1, 1};
int i184[] = {1, 0, 0, 0, 0, 0, 0};
int i185[] = {1, 0, 0, 0, 0, 0, 1};
int i186[] = {1, 0, 0, 0, 0, 1, 0};
int i187[] = {1, 0, 0, 0, 0, 1, 1};
int i188[] = {1, 0, 0, 0, 1, 0, 0};
int i189[] = {1, 0, 0, 0, 1, 0, 1};
int i190[] = {1, 0, 0, 0, 1, 1, 0};
int i191[] = {1, 0, 0, 0, 1, 1, 1};
int i192[] = {1, 0, 0, 1, 0, 0, 0};
int i193[] = {1, 0, 0, 1, 0, 0, 1};
int i194[] = {1, 0, 0, 1, 0, 1, 0};
int i195[] = {1, 0, 0, 1, 0, 1, 1};
int i196[] = {1, 0, 0, 1, 1, 0, 0};
int i197[] = {1, 0, 0, 1, 1, 0, 1};
int i198[] = {1, 0, 0, 1, 1, 1, 0};
int i199[] = {1, 0, 0, 1, 1, 1, 1};
int i200[] = {1, 0, 1, 0, 0, 0, 0};
int i201[] = {1, 0, 1, 0, 0, 0, 1};
int i202[] = {1, 0, 1, 0, 0, 1, 0};
int i203[] = {1, 0, 1, 0, 0, 1, 1};
int i204[] = {1, 0, 1, 0, 1, 0, 0};
int i205[] = {1, 0, 1, 0, 1, 0, 1};
int i206[] = {1, 0, 1, 0, 1, 1, 0};
int i207[] = {1, 0, 1, 0, 1, 1, 1};
int i208[] = {1, 0, 1, 1, 0, 0, 0};
int i209[] = {1, 0, 1, 1, 0, 0, 1};
int i210[] = {1, 0, 1, 1, 0, 1, 0};
int i211[] = {1, 0, 1, 1, 0, 1, 1};
int i212[] = {1, 0, 1, 1, 1, 0, 0};
int i213[] = {1, 0, 1, 1, 1, 0, 1};
int i214[] = {1, 0, 1, 1, 1, 1, 0};
int i215[] = {1, 0, 1, 1, 1, 1, 1};
int i216[] = {1, 1, 0, 0, 0, 0, 0};
int i217[] = {1, 1, 0, 0, 0, 0, 1};
int i218[] = {1, 1, 0, 0, 0, 1, 0};
int i219[] = {1, 1, 0, 0, 0, 1, 1};
int i220[] = {1, 1, 0, 0, 1, 0, 0};
int i221[] = {1, 1, 0, 0, 1, 0, 1};
int i222[] = {1, 1, 0, 0, 1, 1, 0};
int i223[] = {1, 1, 0, 0, 1, 1, 1};
int i224[] = {1, 1, 0, 1, 0, 0, 0};
int i225[] = {1, 1, 0, 1, 0, 0, 1};
int i226[] = {1, 1, 0, 1, 0, 1, 0};
int i227[] = {1, 1, 0, 1, 0, 1, 1};
int i228[] = {1, 1, 0, 1, 1, 0, 0};
int i229[] = {1, 1, 0, 1, 1, 0, 1};
int i230[] = {1, 1, 0, 1, 1, 1, 0};
int i231[] = {1, 1, 0, 1, 1, 1, 1};
int i232[] = {1, 1, 1, 0, 0, 0, 0};
int i233[] = {1, 1, 1, 0, 0, 0, 1};
int i234[] = {1, 1, 1, 0, 0, 1, 0};
int i235[] = {1, 1, 1, 0, 0, 1, 1};
int i236[] = {1, 1, 1, 0, 1, 0, 0};
int i237[] = {1, 1, 1, 0, 1, 0, 1};
int i238[] = {1, 1, 1, 0, 1, 1, 0};
int i239[] = {1, 1, 1, 0, 1, 1, 1};
int i240[] = {1, 1, 1, 1, 0, 0, 0};
int i241[] = {1, 1, 1, 1, 0, 0, 1};
int i242[] = {1, 1, 1, 1, 0, 1, 0};
int i243[] = {1, 1, 1, 1, 0, 1, 1};
int i244[] = {1, 1, 1, 1, 1, 0, 0};
int i245[] = {1, 1, 1, 1, 1, 0, 1};
int i246[] = {1, 1, 1, 1, 1, 1, 0};
assert(std::is_heap(i120, i120+7, std::greater<int>()) == (std::is_heap_until(i120, i120+7, std::greater<int>()) == i120+7));
assert(std::is_heap(i121, i121+7, std::greater<int>()) == (std::is_heap_until(i121, i121+7, std::greater<int>()) == i121+7));
assert(std::is_heap(i122, i122+7, std::greater<int>()) == (std::is_heap_until(i122, i122+7, std::greater<int>()) == i122+7));
assert(std::is_heap(i123, i123+7, std::greater<int>()) == (std::is_heap_until(i123, i123+7, std::greater<int>()) == i123+7));
assert(std::is_heap(i124, i124+7, std::greater<int>()) == (std::is_heap_until(i124, i124+7, std::greater<int>()) == i124+7));
assert(std::is_heap(i125, i125+7, std::greater<int>()) == (std::is_heap_until(i125, i125+7, std::greater<int>()) == i125+7));
assert(std::is_heap(i126, i126+7, std::greater<int>()) == (std::is_heap_until(i126, i126+7, std::greater<int>()) == i126+7));
assert(std::is_heap(i127, i127+7, std::greater<int>()) == (std::is_heap_until(i127, i127+7, std::greater<int>()) == i127+7));
assert(std::is_heap(i128, i128+7, std::greater<int>()) == (std::is_heap_until(i128, i128+7, std::greater<int>()) == i128+7));
assert(std::is_heap(i129, i129+7, std::greater<int>()) == (std::is_heap_until(i129, i129+7, std::greater<int>()) == i129+7));
assert(std::is_heap(i130, i130+7, std::greater<int>()) == (std::is_heap_until(i130, i130+7, std::greater<int>()) == i130+7));
assert(std::is_heap(i131, i131+7, std::greater<int>()) == (std::is_heap_until(i131, i131+7, std::greater<int>()) == i131+7));
assert(std::is_heap(i132, i132+7, std::greater<int>()) == (std::is_heap_until(i132, i132+7, std::greater<int>()) == i132+7));
assert(std::is_heap(i133, i133+7, std::greater<int>()) == (std::is_heap_until(i133, i133+7, std::greater<int>()) == i133+7));
assert(std::is_heap(i134, i134+7, std::greater<int>()) == (std::is_heap_until(i134, i134+7, std::greater<int>()) == i134+7));
assert(std::is_heap(i135, i135+7, std::greater<int>()) == (std::is_heap_until(i135, i135+7, std::greater<int>()) == i135+7));
assert(std::is_heap(i136, i136+7, std::greater<int>()) == (std::is_heap_until(i136, i136+7, std::greater<int>()) == i136+7));
assert(std::is_heap(i137, i137+7, std::greater<int>()) == (std::is_heap_until(i137, i137+7, std::greater<int>()) == i137+7));
assert(std::is_heap(i138, i138+7, std::greater<int>()) == (std::is_heap_until(i138, i138+7, std::greater<int>()) == i138+7));
assert(std::is_heap(i139, i139+7, std::greater<int>()) == (std::is_heap_until(i139, i139+7, std::greater<int>()) == i139+7));
assert(std::is_heap(i140, i140+7, std::greater<int>()) == (std::is_heap_until(i140, i140+7, std::greater<int>()) == i140+7));
assert(std::is_heap(i141, i141+7, std::greater<int>()) == (std::is_heap_until(i141, i141+7, std::greater<int>()) == i141+7));
assert(std::is_heap(i142, i142+7, std::greater<int>()) == (std::is_heap_until(i142, i142+7, std::greater<int>()) == i142+7));
assert(std::is_heap(i143, i143+7, std::greater<int>()) == (std::is_heap_until(i143, i143+7, std::greater<int>()) == i143+7));
assert(std::is_heap(i144, i144+7, std::greater<int>()) == (std::is_heap_until(i144, i144+7, std::greater<int>()) == i144+7));
assert(std::is_heap(i145, i145+7, std::greater<int>()) == (std::is_heap_until(i145, i145+7, std::greater<int>()) == i145+7));
assert(std::is_heap(i146, i146+7, std::greater<int>()) == (std::is_heap_until(i146, i146+7, std::greater<int>()) == i146+7));
assert(std::is_heap(i147, i147+7, std::greater<int>()) == (std::is_heap_until(i147, i147+7, std::greater<int>()) == i147+7));
assert(std::is_heap(i148, i148+7, std::greater<int>()) == (std::is_heap_until(i148, i148+7, std::greater<int>()) == i148+7));
assert(std::is_heap(i149, i149+7, std::greater<int>()) == (std::is_heap_until(i149, i149+7, std::greater<int>()) == i149+7));
assert(std::is_heap(i150, i150+7, std::greater<int>()) == (std::is_heap_until(i150, i150+7, std::greater<int>()) == i150+7));
assert(std::is_heap(i151, i151+7, std::greater<int>()) == (std::is_heap_until(i151, i151+7, std::greater<int>()) == i151+7));
assert(std::is_heap(i152, i152+7, std::greater<int>()) == (std::is_heap_until(i152, i152+7, std::greater<int>()) == i152+7));
assert(std::is_heap(i153, i153+7, std::greater<int>()) == (std::is_heap_until(i153, i153+7, std::greater<int>()) == i153+7));
assert(std::is_heap(i154, i154+7, std::greater<int>()) == (std::is_heap_until(i154, i154+7, std::greater<int>()) == i154+7));
assert(std::is_heap(i155, i155+7, std::greater<int>()) == (std::is_heap_until(i155, i155+7, std::greater<int>()) == i155+7));
assert(std::is_heap(i156, i156+7, std::greater<int>()) == (std::is_heap_until(i156, i156+7, std::greater<int>()) == i156+7));
assert(std::is_heap(i157, i157+7, std::greater<int>()) == (std::is_heap_until(i157, i157+7, std::greater<int>()) == i157+7));
assert(std::is_heap(i158, i158+7, std::greater<int>()) == (std::is_heap_until(i158, i158+7, std::greater<int>()) == i158+7));
assert(std::is_heap(i159, i159+7, std::greater<int>()) == (std::is_heap_until(i159, i159+7, std::greater<int>()) == i159+7));
assert(std::is_heap(i160, i160+7, std::greater<int>()) == (std::is_heap_until(i160, i160+7, std::greater<int>()) == i160+7));
assert(std::is_heap(i161, i161+7, std::greater<int>()) == (std::is_heap_until(i161, i161+7, std::greater<int>()) == i161+7));
assert(std::is_heap(i162, i162+7, std::greater<int>()) == (std::is_heap_until(i162, i162+7, std::greater<int>()) == i162+7));
assert(std::is_heap(i163, i163+7, std::greater<int>()) == (std::is_heap_until(i163, i163+7, std::greater<int>()) == i163+7));
assert(std::is_heap(i164, i164+7, std::greater<int>()) == (std::is_heap_until(i164, i164+7, std::greater<int>()) == i164+7));
assert(std::is_heap(i165, i165+7, std::greater<int>()) == (std::is_heap_until(i165, i165+7, std::greater<int>()) == i165+7));
assert(std::is_heap(i166, i166+7, std::greater<int>()) == (std::is_heap_until(i166, i166+7, std::greater<int>()) == i166+7));
assert(std::is_heap(i167, i167+7, std::greater<int>()) == (std::is_heap_until(i167, i167+7, std::greater<int>()) == i167+7));
assert(std::is_heap(i168, i168+7, std::greater<int>()) == (std::is_heap_until(i168, i168+7, std::greater<int>()) == i168+7));
assert(std::is_heap(i169, i169+7, std::greater<int>()) == (std::is_heap_until(i169, i169+7, std::greater<int>()) == i169+7));
assert(std::is_heap(i170, i170+7, std::greater<int>()) == (std::is_heap_until(i170, i170+7, std::greater<int>()) == i170+7));
assert(std::is_heap(i171, i171+7, std::greater<int>()) == (std::is_heap_until(i171, i171+7, std::greater<int>()) == i171+7));
assert(std::is_heap(i172, i172+7, std::greater<int>()) == (std::is_heap_until(i172, i172+7, std::greater<int>()) == i172+7));
assert(std::is_heap(i173, i173+7, std::greater<int>()) == (std::is_heap_until(i173, i173+7, std::greater<int>()) == i173+7));
assert(std::is_heap(i174, i174+7, std::greater<int>()) == (std::is_heap_until(i174, i174+7, std::greater<int>()) == i174+7));
assert(std::is_heap(i175, i175+7, std::greater<int>()) == (std::is_heap_until(i175, i175+7, std::greater<int>()) == i175+7));
assert(std::is_heap(i176, i176+7, std::greater<int>()) == (std::is_heap_until(i176, i176+7, std::greater<int>()) == i176+7));
assert(std::is_heap(i177, i177+7, std::greater<int>()) == (std::is_heap_until(i177, i177+7, std::greater<int>()) == i177+7));
assert(std::is_heap(i178, i178+7, std::greater<int>()) == (std::is_heap_until(i178, i178+7, std::greater<int>()) == i178+7));
assert(std::is_heap(i179, i179+7, std::greater<int>()) == (std::is_heap_until(i179, i179+7, std::greater<int>()) == i179+7));
assert(std::is_heap(i180, i180+7, std::greater<int>()) == (std::is_heap_until(i180, i180+7, std::greater<int>()) == i180+7));
assert(std::is_heap(i181, i181+7, std::greater<int>()) == (std::is_heap_until(i181, i181+7, std::greater<int>()) == i181+7));
assert(std::is_heap(i182, i182+7, std::greater<int>()) == (std::is_heap_until(i182, i182+7, std::greater<int>()) == i182+7));
assert(std::is_heap(i183, i183+7, std::greater<int>()) == (std::is_heap_until(i183, i183+7, std::greater<int>()) == i183+7));
assert(std::is_heap(i184, i184+7, std::greater<int>()) == (std::is_heap_until(i184, i184+7, std::greater<int>()) == i184+7));
assert(std::is_heap(i185, i185+7, std::greater<int>()) == (std::is_heap_until(i185, i185+7, std::greater<int>()) == i185+7));
assert(std::is_heap(i186, i186+7, std::greater<int>()) == (std::is_heap_until(i186, i186+7, std::greater<int>()) == i186+7));
assert(std::is_heap(i187, i187+7, std::greater<int>()) == (std::is_heap_until(i187, i187+7, std::greater<int>()) == i187+7));
assert(std::is_heap(i188, i188+7, std::greater<int>()) == (std::is_heap_until(i188, i188+7, std::greater<int>()) == i188+7));
assert(std::is_heap(i189, i189+7, std::greater<int>()) == (std::is_heap_until(i189, i189+7, std::greater<int>()) == i189+7));
assert(std::is_heap(i190, i190+7, std::greater<int>()) == (std::is_heap_until(i190, i190+7, std::greater<int>()) == i190+7));
assert(std::is_heap(i191, i191+7, std::greater<int>()) == (std::is_heap_until(i191, i191+7, std::greater<int>()) == i191+7));
assert(std::is_heap(i192, i192+7, std::greater<int>()) == (std::is_heap_until(i192, i192+7, std::greater<int>()) == i192+7));
assert(std::is_heap(i193, i193+7, std::greater<int>()) == (std::is_heap_until(i193, i193+7, std::greater<int>()) == i193+7));
assert(std::is_heap(i194, i194+7, std::greater<int>()) == (std::is_heap_until(i194, i194+7, std::greater<int>()) == i194+7));
assert(std::is_heap(i195, i195+7, std::greater<int>()) == (std::is_heap_until(i195, i195+7, std::greater<int>()) == i195+7));
assert(std::is_heap(i196, i196+7, std::greater<int>()) == (std::is_heap_until(i196, i196+7, std::greater<int>()) == i196+7));
assert(std::is_heap(i197, i197+7, std::greater<int>()) == (std::is_heap_until(i197, i197+7, std::greater<int>()) == i197+7));
assert(std::is_heap(i198, i198+7, std::greater<int>()) == (std::is_heap_until(i198, i198+7, std::greater<int>()) == i198+7));
assert(std::is_heap(i199, i199+7, std::greater<int>()) == (std::is_heap_until(i199, i199+7, std::greater<int>()) == i199+7));
assert(std::is_heap(i200, i200+7, std::greater<int>()) == (std::is_heap_until(i200, i200+7, std::greater<int>()) == i200+7));
assert(std::is_heap(i201, i201+7, std::greater<int>()) == (std::is_heap_until(i201, i201+7, std::greater<int>()) == i201+7));
assert(std::is_heap(i202, i202+7, std::greater<int>()) == (std::is_heap_until(i202, i202+7, std::greater<int>()) == i202+7));
assert(std::is_heap(i203, i203+7, std::greater<int>()) == (std::is_heap_until(i203, i203+7, std::greater<int>()) == i203+7));
assert(std::is_heap(i204, i204+7, std::greater<int>()) == (std::is_heap_until(i204, i204+7, std::greater<int>()) == i204+7));
assert(std::is_heap(i205, i205+7, std::greater<int>()) == (std::is_heap_until(i205, i205+7, std::greater<int>()) == i205+7));
assert(std::is_heap(i206, i206+7, std::greater<int>()) == (std::is_heap_until(i206, i206+7, std::greater<int>()) == i206+7));
assert(std::is_heap(i207, i207+7, std::greater<int>()) == (std::is_heap_until(i207, i207+7, std::greater<int>()) == i207+7));
assert(std::is_heap(i208, i208+7, std::greater<int>()) == (std::is_heap_until(i208, i208+7, std::greater<int>()) == i208+7));
assert(std::is_heap(i209, i209+7, std::greater<int>()) == (std::is_heap_until(i209, i209+7, std::greater<int>()) == i209+7));
assert(std::is_heap(i210, i210+7, std::greater<int>()) == (std::is_heap_until(i210, i210+7, std::greater<int>()) == i210+7));
assert(std::is_heap(i211, i211+7, std::greater<int>()) == (std::is_heap_until(i211, i211+7, std::greater<int>()) == i211+7));
assert(std::is_heap(i212, i212+7, std::greater<int>()) == (std::is_heap_until(i212, i212+7, std::greater<int>()) == i212+7));
assert(std::is_heap(i213, i213+7, std::greater<int>()) == (std::is_heap_until(i213, i213+7, std::greater<int>()) == i213+7));
assert(std::is_heap(i214, i214+7, std::greater<int>()) == (std::is_heap_until(i214, i214+7, std::greater<int>()) == i214+7));
assert(std::is_heap(i215, i215+7, std::greater<int>()) == (std::is_heap_until(i215, i215+7, std::greater<int>()) == i215+7));
assert(std::is_heap(i216, i216+7, std::greater<int>()) == (std::is_heap_until(i216, i216+7, std::greater<int>()) == i216+7));
assert(std::is_heap(i217, i217+7, std::greater<int>()) == (std::is_heap_until(i217, i217+7, std::greater<int>()) == i217+7));
assert(std::is_heap(i218, i218+7, std::greater<int>()) == (std::is_heap_until(i218, i218+7, std::greater<int>()) == i218+7));
assert(std::is_heap(i219, i219+7, std::greater<int>()) == (std::is_heap_until(i219, i219+7, std::greater<int>()) == i219+7));
assert(std::is_heap(i220, i220+7, std::greater<int>()) == (std::is_heap_until(i220, i220+7, std::greater<int>()) == i220+7));
assert(std::is_heap(i221, i221+7, std::greater<int>()) == (std::is_heap_until(i221, i221+7, std::greater<int>()) == i221+7));
assert(std::is_heap(i222, i222+7, std::greater<int>()) == (std::is_heap_until(i222, i222+7, std::greater<int>()) == i222+7));
assert(std::is_heap(i223, i223+7, std::greater<int>()) == (std::is_heap_until(i223, i223+7, std::greater<int>()) == i223+7));
assert(std::is_heap(i224, i224+7, std::greater<int>()) == (std::is_heap_until(i224, i224+7, std::greater<int>()) == i224+7));
assert(std::is_heap(i225, i225+7, std::greater<int>()) == (std::is_heap_until(i225, i225+7, std::greater<int>()) == i225+7));
assert(std::is_heap(i226, i226+7, std::greater<int>()) == (std::is_heap_until(i226, i226+7, std::greater<int>()) == i226+7));
assert(std::is_heap(i227, i227+7, std::greater<int>()) == (std::is_heap_until(i227, i227+7, std::greater<int>()) == i227+7));
assert(std::is_heap(i228, i228+7, std::greater<int>()) == (std::is_heap_until(i228, i228+7, std::greater<int>()) == i228+7));
assert(std::is_heap(i229, i229+7, std::greater<int>()) == (std::is_heap_until(i229, i229+7, std::greater<int>()) == i229+7));
assert(std::is_heap(i230, i230+7, std::greater<int>()) == (std::is_heap_until(i230, i230+7, std::greater<int>()) == i230+7));
assert(std::is_heap(i231, i231+7, std::greater<int>()) == (std::is_heap_until(i231, i231+7, std::greater<int>()) == i231+7));
assert(std::is_heap(i232, i232+7, std::greater<int>()) == (std::is_heap_until(i232, i232+7, std::greater<int>()) == i232+7));
assert(std::is_heap(i233, i233+7, std::greater<int>()) == (std::is_heap_until(i233, i233+7, std::greater<int>()) == i233+7));
assert(std::is_heap(i234, i234+7, std::greater<int>()) == (std::is_heap_until(i234, i234+7, std::greater<int>()) == i234+7));
assert(std::is_heap(i235, i235+7, std::greater<int>()) == (std::is_heap_until(i235, i235+7, std::greater<int>()) == i235+7));
assert(std::is_heap(i236, i236+7, std::greater<int>()) == (std::is_heap_until(i236, i236+7, std::greater<int>()) == i236+7));
assert(std::is_heap(i237, i237+7, std::greater<int>()) == (std::is_heap_until(i237, i237+7, std::greater<int>()) == i237+7));
assert(std::is_heap(i238, i238+7, std::greater<int>()) == (std::is_heap_until(i238, i238+7, std::greater<int>()) == i238+7));
assert(std::is_heap(i239, i239+7, std::greater<int>()) == (std::is_heap_until(i239, i239+7, std::greater<int>()) == i239+7));
assert(std::is_heap(i240, i240+7, std::greater<int>()) == (std::is_heap_until(i240, i240+7, std::greater<int>()) == i240+7));
assert(std::is_heap(i241, i241+7, std::greater<int>()) == (std::is_heap_until(i241, i241+7, std::greater<int>()) == i241+7));
assert(std::is_heap(i242, i242+7, std::greater<int>()) == (std::is_heap_until(i242, i242+7, std::greater<int>()) == i242+7));
assert(std::is_heap(i243, i243+7, std::greater<int>()) == (std::is_heap_until(i243, i243+7, std::greater<int>()) == i243+7));
assert(std::is_heap(i244, i244+7, std::greater<int>()) == (std::is_heap_until(i244, i244+7, std::greater<int>()) == i244+7));
assert(std::is_heap(i245, i245+7, std::greater<int>()) == (std::is_heap_until(i245, i245+7, std::greater<int>()) == i245+7));
assert(std::is_heap(i246, i246+7, std::greater<int>()) == (std::is_heap_until(i246, i246+7, std::greater<int>()) == i246+7));
}
int main()
{
test();
}

View File

@@ -0,0 +1,522 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires LessThanComparable<Iter::value_type>
// Iter
// is_heap_until(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test()
{
int i1[] = {0, 0};
assert(std::is_heap_until(i1, i1) == i1);
assert(std::is_heap_until(i1, i1+1) == i1+1);
int i2[] = {0, 1};
int i3[] = {1, 0};
assert(std::is_heap_until(i1, i1+2) == i1+2);
assert(std::is_heap_until(i2, i2+2) == i2+1);
assert(std::is_heap_until(i3, i3+2) == i3+2);
int i4[] = {0, 0, 0};
int i5[] = {0, 0, 1};
int i6[] = {0, 1, 0};
int i7[] = {0, 1, 1};
int i8[] = {1, 0, 0};
int i9[] = {1, 0, 1};
int i10[] = {1, 1, 0};
assert(std::is_heap_until(i4, i4+3) == i4+3);
assert(std::is_heap_until(i5, i5+3) == i5+2);
assert(std::is_heap_until(i6, i6+3) == i6+1);
assert(std::is_heap_until(i7, i7+3) == i7+1);
assert(std::is_heap_until(i8, i8+3) == i8+3);
assert(std::is_heap_until(i9, i9+3) == i9+3);
assert(std::is_heap_until(i10, i10+3) == i10+3);
int i11[] = {0, 0, 0, 0};
int i12[] = {0, 0, 0, 1};
int i13[] = {0, 0, 1, 0};
int i14[] = {0, 0, 1, 1};
int i15[] = {0, 1, 0, 0};
int i16[] = {0, 1, 0, 1};
int i17[] = {0, 1, 1, 0};
int i18[] = {0, 1, 1, 1};
int i19[] = {1, 0, 0, 0};
int i20[] = {1, 0, 0, 1};
int i21[] = {1, 0, 1, 0};
int i22[] = {1, 0, 1, 1};
int i23[] = {1, 1, 0, 0};
int i24[] = {1, 1, 0, 1};
int i25[] = {1, 1, 1, 0};
assert(std::is_heap_until(i11, i11+4) == i11+4);
assert(std::is_heap_until(i12, i12+4) == i12+3);
assert(std::is_heap_until(i13, i13+4) == i13+2);
assert(std::is_heap_until(i14, i14+4) == i14+2);
assert(std::is_heap_until(i15, i15+4) == i15+1);
assert(std::is_heap_until(i16, i16+4) == i16+1);
assert(std::is_heap_until(i17, i17+4) == i17+1);
assert(std::is_heap_until(i18, i18+4) == i18+1);
assert(std::is_heap_until(i19, i19+4) == i19+4);
assert(std::is_heap_until(i20, i20+4) == i20+3);
assert(std::is_heap_until(i21, i21+4) == i21+4);
assert(std::is_heap_until(i22, i22+4) == i22+3);
assert(std::is_heap_until(i23, i23+4) == i23+4);
assert(std::is_heap_until(i24, i24+4) == i24+4);
assert(std::is_heap_until(i25, i25+4) == i25+4);
int i26[] = {0, 0, 0, 0, 0};
int i27[] = {0, 0, 0, 0, 1};
int i28[] = {0, 0, 0, 1, 0};
int i29[] = {0, 0, 0, 1, 1};
int i30[] = {0, 0, 1, 0, 0};
int i31[] = {0, 0, 1, 0, 1};
int i32[] = {0, 0, 1, 1, 0};
int i33[] = {0, 0, 1, 1, 1};
int i34[] = {0, 1, 0, 0, 0};
int i35[] = {0, 1, 0, 0, 1};
int i36[] = {0, 1, 0, 1, 0};
int i37[] = {0, 1, 0, 1, 1};
int i38[] = {0, 1, 1, 0, 0};
int i39[] = {0, 1, 1, 0, 1};
int i40[] = {0, 1, 1, 1, 0};
int i41[] = {0, 1, 1, 1, 1};
int i42[] = {1, 0, 0, 0, 0};
int i43[] = {1, 0, 0, 0, 1};
int i44[] = {1, 0, 0, 1, 0};
int i45[] = {1, 0, 0, 1, 1};
int i46[] = {1, 0, 1, 0, 0};
int i47[] = {1, 0, 1, 0, 1};
int i48[] = {1, 0, 1, 1, 0};
int i49[] = {1, 0, 1, 1, 1};
int i50[] = {1, 1, 0, 0, 0};
int i51[] = {1, 1, 0, 0, 1};
int i52[] = {1, 1, 0, 1, 0};
int i53[] = {1, 1, 0, 1, 1};
int i54[] = {1, 1, 1, 0, 0};
int i55[] = {1, 1, 1, 0, 1};
int i56[] = {1, 1, 1, 1, 0};
assert(std::is_heap_until(i26, i26+5) == i26+5);
assert(std::is_heap_until(i27, i27+5) == i27+4);
assert(std::is_heap_until(i28, i28+5) == i28+3);
assert(std::is_heap_until(i29, i29+5) == i29+3);
assert(std::is_heap_until(i30, i30+5) == i30+2);
assert(std::is_heap_until(i31, i31+5) == i31+2);
assert(std::is_heap_until(i32, i32+5) == i32+2);
assert(std::is_heap_until(i33, i33+5) == i33+2);
assert(std::is_heap_until(i34, i34+5) == i34+1);
assert(std::is_heap_until(i35, i35+5) == i35+1);
assert(std::is_heap_until(i36, i36+5) == i36+1);
assert(std::is_heap_until(i37, i37+5) == i37+1);
assert(std::is_heap_until(i38, i38+5) == i38+1);
assert(std::is_heap_until(i39, i39+5) == i39+1);
assert(std::is_heap_until(i40, i40+5) == i40+1);
assert(std::is_heap_until(i41, i41+5) == i41+1);
assert(std::is_heap_until(i42, i42+5) == i42+5);
assert(std::is_heap_until(i43, i43+5) == i43+4);
assert(std::is_heap_until(i44, i44+5) == i44+3);
assert(std::is_heap_until(i45, i45+5) == i45+3);
assert(std::is_heap_until(i46, i46+5) == i46+5);
assert(std::is_heap_until(i47, i47+5) == i47+4);
assert(std::is_heap_until(i48, i48+5) == i48+3);
assert(std::is_heap_until(i49, i49+5) == i49+3);
assert(std::is_heap_until(i50, i50+5) == i50+5);
assert(std::is_heap_until(i51, i51+5) == i51+5);
assert(std::is_heap_until(i52, i52+5) == i52+5);
assert(std::is_heap_until(i53, i53+5) == i53+5);
assert(std::is_heap_until(i54, i54+5) == i54+5);
assert(std::is_heap_until(i55, i55+5) == i55+5);
assert(std::is_heap_until(i56, i56+5) == i56+5);
int i57[] = {0, 0, 0, 0, 0, 0};
int i58[] = {0, 0, 0, 0, 0, 1};
int i59[] = {0, 0, 0, 0, 1, 0};
int i60[] = {0, 0, 0, 0, 1, 1};
int i61[] = {0, 0, 0, 1, 0, 0};
int i62[] = {0, 0, 0, 1, 0, 1};
int i63[] = {0, 0, 0, 1, 1, 0};
int i64[] = {0, 0, 0, 1, 1, 1};
int i65[] = {0, 0, 1, 0, 0, 0};
int i66[] = {0, 0, 1, 0, 0, 1};
int i67[] = {0, 0, 1, 0, 1, 0};
int i68[] = {0, 0, 1, 0, 1, 1};
int i69[] = {0, 0, 1, 1, 0, 0};
int i70[] = {0, 0, 1, 1, 0, 1};
int i71[] = {0, 0, 1, 1, 1, 0};
int i72[] = {0, 0, 1, 1, 1, 1};
int i73[] = {0, 1, 0, 0, 0, 0};
int i74[] = {0, 1, 0, 0, 0, 1};
int i75[] = {0, 1, 0, 0, 1, 0};
int i76[] = {0, 1, 0, 0, 1, 1};
int i77[] = {0, 1, 0, 1, 0, 0};
int i78[] = {0, 1, 0, 1, 0, 1};
int i79[] = {0, 1, 0, 1, 1, 0};
int i80[] = {0, 1, 0, 1, 1, 1};
int i81[] = {0, 1, 1, 0, 0, 0};
int i82[] = {0, 1, 1, 0, 0, 1};
int i83[] = {0, 1, 1, 0, 1, 0};
int i84[] = {0, 1, 1, 0, 1, 1};
int i85[] = {0, 1, 1, 1, 0, 0};
int i86[] = {0, 1, 1, 1, 0, 1};
int i87[] = {0, 1, 1, 1, 1, 0};
int i88[] = {0, 1, 1, 1, 1, 1};
int i89[] = {1, 0, 0, 0, 0, 0};
int i90[] = {1, 0, 0, 0, 0, 1};
int i91[] = {1, 0, 0, 0, 1, 0};
int i92[] = {1, 0, 0, 0, 1, 1};
int i93[] = {1, 0, 0, 1, 0, 0};
int i94[] = {1, 0, 0, 1, 0, 1};
int i95[] = {1, 0, 0, 1, 1, 0};
int i96[] = {1, 0, 0, 1, 1, 1};
int i97[] = {1, 0, 1, 0, 0, 0};
int i98[] = {1, 0, 1, 0, 0, 1};
int i99[] = {1, 0, 1, 0, 1, 0};
int i100[] = {1, 0, 1, 0, 1, 1};
int i101[] = {1, 0, 1, 1, 0, 0};
int i102[] = {1, 0, 1, 1, 0, 1};
int i103[] = {1, 0, 1, 1, 1, 0};
int i104[] = {1, 0, 1, 1, 1, 1};
int i105[] = {1, 1, 0, 0, 0, 0};
int i106[] = {1, 1, 0, 0, 0, 1};
int i107[] = {1, 1, 0, 0, 1, 0};
int i108[] = {1, 1, 0, 0, 1, 1};
int i109[] = {1, 1, 0, 1, 0, 0};
int i110[] = {1, 1, 0, 1, 0, 1};
int i111[] = {1, 1, 0, 1, 1, 0};
int i112[] = {1, 1, 0, 1, 1, 1};
int i113[] = {1, 1, 1, 0, 0, 0};
int i114[] = {1, 1, 1, 0, 0, 1};
int i115[] = {1, 1, 1, 0, 1, 0};
int i116[] = {1, 1, 1, 0, 1, 1};
int i117[] = {1, 1, 1, 1, 0, 0};
int i118[] = {1, 1, 1, 1, 0, 1};
int i119[] = {1, 1, 1, 1, 1, 0};
assert(std::is_heap_until(i57, i57+6) == i57+6);
assert(std::is_heap_until(i58, i58+6) == i58+5);
assert(std::is_heap_until(i59, i59+6) == i59+4);
assert(std::is_heap_until(i60, i60+6) == i60+4);
assert(std::is_heap_until(i61, i61+6) == i61+3);
assert(std::is_heap_until(i62, i62+6) == i62+3);
assert(std::is_heap_until(i63, i63+6) == i63+3);
assert(std::is_heap_until(i64, i64+6) == i64+3);
assert(std::is_heap_until(i65, i65+6) == i65+2);
assert(std::is_heap_until(i66, i66+6) == i66+2);
assert(std::is_heap_until(i67, i67+6) == i67+2);
assert(std::is_heap_until(i68, i68+6) == i68+2);
assert(std::is_heap_until(i69, i69+6) == i69+2);
assert(std::is_heap_until(i70, i70+6) == i70+2);
assert(std::is_heap_until(i71, i71+6) == i71+2);
assert(std::is_heap_until(i72, i72+6) == i72+2);
assert(std::is_heap_until(i73, i73+6) == i73+1);
assert(std::is_heap_until(i74, i74+6) == i74+1);
assert(std::is_heap_until(i75, i75+6) == i75+1);
assert(std::is_heap_until(i76, i76+6) == i76+1);
assert(std::is_heap_until(i77, i77+6) == i77+1);
assert(std::is_heap_until(i78, i78+6) == i78+1);
assert(std::is_heap_until(i79, i79+6) == i79+1);
assert(std::is_heap_until(i80, i80+6) == i80+1);
assert(std::is_heap_until(i81, i81+6) == i81+1);
assert(std::is_heap_until(i82, i82+6) == i82+1);
assert(std::is_heap_until(i83, i83+6) == i83+1);
assert(std::is_heap_until(i84, i84+6) == i84+1);
assert(std::is_heap_until(i85, i85+6) == i85+1);
assert(std::is_heap_until(i86, i86+6) == i86+1);
assert(std::is_heap_until(i87, i87+6) == i87+1);
assert(std::is_heap_until(i88, i88+6) == i88+1);
assert(std::is_heap_until(i89, i89+6) == i89+6);
assert(std::is_heap_until(i90, i90+6) == i90+5);
assert(std::is_heap_until(i91, i91+6) == i91+4);
assert(std::is_heap_until(i92, i92+6) == i92+4);
assert(std::is_heap_until(i93, i93+6) == i93+3);
assert(std::is_heap_until(i94, i94+6) == i94+3);
assert(std::is_heap_until(i95, i95+6) == i95+3);
assert(std::is_heap_until(i96, i96+6) == i96+3);
assert(std::is_heap_until(i97, i97+6) == i97+6);
assert(std::is_heap_until(i98, i98+6) == i98+6);
assert(std::is_heap_until(i99, i99+6) == i99+4);
assert(std::is_heap_until(i100, i100+6) == i100+4);
assert(std::is_heap_until(i101, i101+6) == i101+3);
assert(std::is_heap_until(i102, i102+6) == i102+3);
assert(std::is_heap_until(i103, i103+6) == i103+3);
assert(std::is_heap_until(i104, i104+6) == i104+3);
assert(std::is_heap_until(i105, i105+6) == i105+6);
assert(std::is_heap_until(i106, i106+6) == i106+5);
assert(std::is_heap_until(i107, i107+6) == i107+6);
assert(std::is_heap_until(i108, i108+6) == i108+5);
assert(std::is_heap_until(i109, i109+6) == i109+6);
assert(std::is_heap_until(i110, i110+6) == i110+5);
assert(std::is_heap_until(i111, i111+6) == i111+6);
assert(std::is_heap_until(i112, i112+6) == i112+5);
assert(std::is_heap_until(i113, i113+6) == i113+6);
assert(std::is_heap_until(i114, i114+6) == i114+6);
assert(std::is_heap_until(i115, i115+6) == i115+6);
assert(std::is_heap_until(i116, i116+6) == i116+6);
assert(std::is_heap_until(i117, i117+6) == i117+6);
assert(std::is_heap_until(i118, i118+6) == i118+6);
assert(std::is_heap_until(i119, i119+6) == i119+6);
int i120[] = {0, 0, 0, 0, 0, 0, 0};
int i121[] = {0, 0, 0, 0, 0, 0, 1};
int i122[] = {0, 0, 0, 0, 0, 1, 0};
int i123[] = {0, 0, 0, 0, 0, 1, 1};
int i124[] = {0, 0, 0, 0, 1, 0, 0};
int i125[] = {0, 0, 0, 0, 1, 0, 1};
int i126[] = {0, 0, 0, 0, 1, 1, 0};
int i127[] = {0, 0, 0, 0, 1, 1, 1};
int i128[] = {0, 0, 0, 1, 0, 0, 0};
int i129[] = {0, 0, 0, 1, 0, 0, 1};
int i130[] = {0, 0, 0, 1, 0, 1, 0};
int i131[] = {0, 0, 0, 1, 0, 1, 1};
int i132[] = {0, 0, 0, 1, 1, 0, 0};
int i133[] = {0, 0, 0, 1, 1, 0, 1};
int i134[] = {0, 0, 0, 1, 1, 1, 0};
int i135[] = {0, 0, 0, 1, 1, 1, 1};
int i136[] = {0, 0, 1, 0, 0, 0, 0};
int i137[] = {0, 0, 1, 0, 0, 0, 1};
int i138[] = {0, 0, 1, 0, 0, 1, 0};
int i139[] = {0, 0, 1, 0, 0, 1, 1};
int i140[] = {0, 0, 1, 0, 1, 0, 0};
int i141[] = {0, 0, 1, 0, 1, 0, 1};
int i142[] = {0, 0, 1, 0, 1, 1, 0};
int i143[] = {0, 0, 1, 0, 1, 1, 1};
int i144[] = {0, 0, 1, 1, 0, 0, 0};
int i145[] = {0, 0, 1, 1, 0, 0, 1};
int i146[] = {0, 0, 1, 1, 0, 1, 0};
int i147[] = {0, 0, 1, 1, 0, 1, 1};
int i148[] = {0, 0, 1, 1, 1, 0, 0};
int i149[] = {0, 0, 1, 1, 1, 0, 1};
int i150[] = {0, 0, 1, 1, 1, 1, 0};
int i151[] = {0, 0, 1, 1, 1, 1, 1};
int i152[] = {0, 1, 0, 0, 0, 0, 0};
int i153[] = {0, 1, 0, 0, 0, 0, 1};
int i154[] = {0, 1, 0, 0, 0, 1, 0};
int i155[] = {0, 1, 0, 0, 0, 1, 1};
int i156[] = {0, 1, 0, 0, 1, 0, 0};
int i157[] = {0, 1, 0, 0, 1, 0, 1};
int i158[] = {0, 1, 0, 0, 1, 1, 0};
int i159[] = {0, 1, 0, 0, 1, 1, 1};
int i160[] = {0, 1, 0, 1, 0, 0, 0};
int i161[] = {0, 1, 0, 1, 0, 0, 1};
int i162[] = {0, 1, 0, 1, 0, 1, 0};
int i163[] = {0, 1, 0, 1, 0, 1, 1};
int i164[] = {0, 1, 0, 1, 1, 0, 0};
int i165[] = {0, 1, 0, 1, 1, 0, 1};
int i166[] = {0, 1, 0, 1, 1, 1, 0};
int i167[] = {0, 1, 0, 1, 1, 1, 1};
int i168[] = {0, 1, 1, 0, 0, 0, 0};
int i169[] = {0, 1, 1, 0, 0, 0, 1};
int i170[] = {0, 1, 1, 0, 0, 1, 0};
int i171[] = {0, 1, 1, 0, 0, 1, 1};
int i172[] = {0, 1, 1, 0, 1, 0, 0};
int i173[] = {0, 1, 1, 0, 1, 0, 1};
int i174[] = {0, 1, 1, 0, 1, 1, 0};
int i175[] = {0, 1, 1, 0, 1, 1, 1};
int i176[] = {0, 1, 1, 1, 0, 0, 0};
int i177[] = {0, 1, 1, 1, 0, 0, 1};
int i178[] = {0, 1, 1, 1, 0, 1, 0};
int i179[] = {0, 1, 1, 1, 0, 1, 1};
int i180[] = {0, 1, 1, 1, 1, 0, 0};
int i181[] = {0, 1, 1, 1, 1, 0, 1};
int i182[] = {0, 1, 1, 1, 1, 1, 0};
int i183[] = {0, 1, 1, 1, 1, 1, 1};
int i184[] = {1, 0, 0, 0, 0, 0, 0};
int i185[] = {1, 0, 0, 0, 0, 0, 1};
int i186[] = {1, 0, 0, 0, 0, 1, 0};
int i187[] = {1, 0, 0, 0, 0, 1, 1};
int i188[] = {1, 0, 0, 0, 1, 0, 0};
int i189[] = {1, 0, 0, 0, 1, 0, 1};
int i190[] = {1, 0, 0, 0, 1, 1, 0};
int i191[] = {1, 0, 0, 0, 1, 1, 1};
int i192[] = {1, 0, 0, 1, 0, 0, 0};
int i193[] = {1, 0, 0, 1, 0, 0, 1};
int i194[] = {1, 0, 0, 1, 0, 1, 0};
int i195[] = {1, 0, 0, 1, 0, 1, 1};
int i196[] = {1, 0, 0, 1, 1, 0, 0};
int i197[] = {1, 0, 0, 1, 1, 0, 1};
int i198[] = {1, 0, 0, 1, 1, 1, 0};
int i199[] = {1, 0, 0, 1, 1, 1, 1};
int i200[] = {1, 0, 1, 0, 0, 0, 0};
int i201[] = {1, 0, 1, 0, 0, 0, 1};
int i202[] = {1, 0, 1, 0, 0, 1, 0};
int i203[] = {1, 0, 1, 0, 0, 1, 1};
int i204[] = {1, 0, 1, 0, 1, 0, 0};
int i205[] = {1, 0, 1, 0, 1, 0, 1};
int i206[] = {1, 0, 1, 0, 1, 1, 0};
int i207[] = {1, 0, 1, 0, 1, 1, 1};
int i208[] = {1, 0, 1, 1, 0, 0, 0};
int i209[] = {1, 0, 1, 1, 0, 0, 1};
int i210[] = {1, 0, 1, 1, 0, 1, 0};
int i211[] = {1, 0, 1, 1, 0, 1, 1};
int i212[] = {1, 0, 1, 1, 1, 0, 0};
int i213[] = {1, 0, 1, 1, 1, 0, 1};
int i214[] = {1, 0, 1, 1, 1, 1, 0};
int i215[] = {1, 0, 1, 1, 1, 1, 1};
int i216[] = {1, 1, 0, 0, 0, 0, 0};
int i217[] = {1, 1, 0, 0, 0, 0, 1};
int i218[] = {1, 1, 0, 0, 0, 1, 0};
int i219[] = {1, 1, 0, 0, 0, 1, 1};
int i220[] = {1, 1, 0, 0, 1, 0, 0};
int i221[] = {1, 1, 0, 0, 1, 0, 1};
int i222[] = {1, 1, 0, 0, 1, 1, 0};
int i223[] = {1, 1, 0, 0, 1, 1, 1};
int i224[] = {1, 1, 0, 1, 0, 0, 0};
int i225[] = {1, 1, 0, 1, 0, 0, 1};
int i226[] = {1, 1, 0, 1, 0, 1, 0};
int i227[] = {1, 1, 0, 1, 0, 1, 1};
int i228[] = {1, 1, 0, 1, 1, 0, 0};
int i229[] = {1, 1, 0, 1, 1, 0, 1};
int i230[] = {1, 1, 0, 1, 1, 1, 0};
int i231[] = {1, 1, 0, 1, 1, 1, 1};
int i232[] = {1, 1, 1, 0, 0, 0, 0};
int i233[] = {1, 1, 1, 0, 0, 0, 1};
int i234[] = {1, 1, 1, 0, 0, 1, 0};
int i235[] = {1, 1, 1, 0, 0, 1, 1};
int i236[] = {1, 1, 1, 0, 1, 0, 0};
int i237[] = {1, 1, 1, 0, 1, 0, 1};
int i238[] = {1, 1, 1, 0, 1, 1, 0};
int i239[] = {1, 1, 1, 0, 1, 1, 1};
int i240[] = {1, 1, 1, 1, 0, 0, 0};
int i241[] = {1, 1, 1, 1, 0, 0, 1};
int i242[] = {1, 1, 1, 1, 0, 1, 0};
int i243[] = {1, 1, 1, 1, 0, 1, 1};
int i244[] = {1, 1, 1, 1, 1, 0, 0};
int i245[] = {1, 1, 1, 1, 1, 0, 1};
int i246[] = {1, 1, 1, 1, 1, 1, 0};
assert(std::is_heap_until(i120, i120+7) == i120+7);
assert(std::is_heap_until(i121, i121+7) == i121+6);
assert(std::is_heap_until(i122, i122+7) == i122+5);
assert(std::is_heap_until(i123, i123+7) == i123+5);
assert(std::is_heap_until(i124, i124+7) == i124+4);
assert(std::is_heap_until(i125, i125+7) == i125+4);
assert(std::is_heap_until(i126, i126+7) == i126+4);
assert(std::is_heap_until(i127, i127+7) == i127+4);
assert(std::is_heap_until(i128, i128+7) == i128+3);
assert(std::is_heap_until(i129, i129+7) == i129+3);
assert(std::is_heap_until(i130, i130+7) == i130+3);
assert(std::is_heap_until(i131, i131+7) == i131+3);
assert(std::is_heap_until(i132, i132+7) == i132+3);
assert(std::is_heap_until(i133, i133+7) == i133+3);
assert(std::is_heap_until(i134, i134+7) == i134+3);
assert(std::is_heap_until(i135, i135+7) == i135+3);
assert(std::is_heap_until(i136, i136+7) == i136+2);
assert(std::is_heap_until(i137, i137+7) == i137+2);
assert(std::is_heap_until(i138, i138+7) == i138+2);
assert(std::is_heap_until(i139, i139+7) == i139+2);
assert(std::is_heap_until(i140, i140+7) == i140+2);
assert(std::is_heap_until(i141, i141+7) == i141+2);
assert(std::is_heap_until(i142, i142+7) == i142+2);
assert(std::is_heap_until(i143, i143+7) == i143+2);
assert(std::is_heap_until(i144, i144+7) == i144+2);
assert(std::is_heap_until(i145, i145+7) == i145+2);
assert(std::is_heap_until(i146, i146+7) == i146+2);
assert(std::is_heap_until(i147, i147+7) == i147+2);
assert(std::is_heap_until(i148, i148+7) == i148+2);
assert(std::is_heap_until(i149, i149+7) == i149+2);
assert(std::is_heap_until(i150, i150+7) == i150+2);
assert(std::is_heap_until(i151, i151+7) == i151+2);
assert(std::is_heap_until(i152, i152+7) == i152+1);
assert(std::is_heap_until(i153, i153+7) == i153+1);
assert(std::is_heap_until(i154, i154+7) == i154+1);
assert(std::is_heap_until(i155, i155+7) == i155+1);
assert(std::is_heap_until(i156, i156+7) == i156+1);
assert(std::is_heap_until(i157, i157+7) == i157+1);
assert(std::is_heap_until(i158, i158+7) == i158+1);
assert(std::is_heap_until(i159, i159+7) == i159+1);
assert(std::is_heap_until(i160, i160+7) == i160+1);
assert(std::is_heap_until(i161, i161+7) == i161+1);
assert(std::is_heap_until(i162, i162+7) == i162+1);
assert(std::is_heap_until(i163, i163+7) == i163+1);
assert(std::is_heap_until(i164, i164+7) == i164+1);
assert(std::is_heap_until(i165, i165+7) == i165+1);
assert(std::is_heap_until(i166, i166+7) == i166+1);
assert(std::is_heap_until(i167, i167+7) == i167+1);
assert(std::is_heap_until(i168, i168+7) == i168+1);
assert(std::is_heap_until(i169, i169+7) == i169+1);
assert(std::is_heap_until(i170, i170+7) == i170+1);
assert(std::is_heap_until(i171, i171+7) == i171+1);
assert(std::is_heap_until(i172, i172+7) == i172+1);
assert(std::is_heap_until(i173, i173+7) == i173+1);
assert(std::is_heap_until(i174, i174+7) == i174+1);
assert(std::is_heap_until(i175, i175+7) == i175+1);
assert(std::is_heap_until(i176, i176+7) == i176+1);
assert(std::is_heap_until(i177, i177+7) == i177+1);
assert(std::is_heap_until(i178, i178+7) == i178+1);
assert(std::is_heap_until(i179, i179+7) == i179+1);
assert(std::is_heap_until(i180, i180+7) == i180+1);
assert(std::is_heap_until(i181, i181+7) == i181+1);
assert(std::is_heap_until(i182, i182+7) == i182+1);
assert(std::is_heap_until(i183, i183+7) == i183+1);
assert(std::is_heap_until(i184, i184+7) == i184+7);
assert(std::is_heap_until(i185, i185+7) == i185+6);
assert(std::is_heap_until(i186, i186+7) == i186+5);
assert(std::is_heap_until(i187, i187+7) == i187+5);
assert(std::is_heap_until(i188, i188+7) == i188+4);
assert(std::is_heap_until(i189, i189+7) == i189+4);
assert(std::is_heap_until(i190, i190+7) == i190+4);
assert(std::is_heap_until(i191, i191+7) == i191+4);
assert(std::is_heap_until(i192, i192+7) == i192+3);
assert(std::is_heap_until(i193, i193+7) == i193+3);
assert(std::is_heap_until(i194, i194+7) == i194+3);
assert(std::is_heap_until(i195, i195+7) == i195+3);
assert(std::is_heap_until(i196, i196+7) == i196+3);
assert(std::is_heap_until(i197, i197+7) == i197+3);
assert(std::is_heap_until(i198, i198+7) == i198+3);
assert(std::is_heap_until(i199, i199+7) == i199+3);
assert(std::is_heap_until(i200, i200+7) == i200+7);
assert(std::is_heap_until(i201, i201+7) == i201+7);
assert(std::is_heap_until(i202, i202+7) == i202+7);
assert(std::is_heap_until(i203, i203+7) == i203+7);
assert(std::is_heap_until(i204, i204+7) == i204+4);
assert(std::is_heap_until(i205, i205+7) == i205+4);
assert(std::is_heap_until(i206, i206+7) == i206+4);
assert(std::is_heap_until(i207, i207+7) == i207+4);
assert(std::is_heap_until(i208, i208+7) == i208+3);
assert(std::is_heap_until(i209, i209+7) == i209+3);
assert(std::is_heap_until(i210, i210+7) == i210+3);
assert(std::is_heap_until(i211, i211+7) == i211+3);
assert(std::is_heap_until(i212, i212+7) == i212+3);
assert(std::is_heap_until(i213, i213+7) == i213+3);
assert(std::is_heap_until(i214, i214+7) == i214+3);
assert(std::is_heap_until(i215, i215+7) == i215+3);
assert(std::is_heap_until(i216, i216+7) == i216+7);
assert(std::is_heap_until(i217, i217+7) == i217+6);
assert(std::is_heap_until(i218, i218+7) == i218+5);
assert(std::is_heap_until(i219, i219+7) == i219+5);
assert(std::is_heap_until(i220, i220+7) == i220+7);
assert(std::is_heap_until(i221, i221+7) == i221+6);
assert(std::is_heap_until(i222, i222+7) == i222+5);
assert(std::is_heap_until(i223, i223+7) == i223+5);
assert(std::is_heap_until(i224, i224+7) == i224+7);
assert(std::is_heap_until(i225, i225+7) == i225+6);
assert(std::is_heap_until(i226, i226+7) == i226+5);
assert(std::is_heap_until(i227, i227+7) == i227+5);
assert(std::is_heap_until(i228, i228+7) == i228+7);
assert(std::is_heap_until(i229, i229+7) == i229+6);
assert(std::is_heap_until(i230, i230+7) == i230+5);
assert(std::is_heap_until(i231, i231+7) == i231+5);
assert(std::is_heap_until(i232, i232+7) == i232+7);
assert(std::is_heap_until(i233, i233+7) == i233+7);
assert(std::is_heap_until(i234, i234+7) == i234+7);
assert(std::is_heap_until(i235, i235+7) == i235+7);
assert(std::is_heap_until(i236, i236+7) == i236+7);
assert(std::is_heap_until(i237, i237+7) == i237+7);
assert(std::is_heap_until(i238, i238+7) == i238+7);
assert(std::is_heap_until(i239, i239+7) == i239+7);
assert(std::is_heap_until(i240, i240+7) == i240+7);
assert(std::is_heap_until(i241, i241+7) == i241+7);
assert(std::is_heap_until(i242, i242+7) == i242+7);
assert(std::is_heap_until(i243, i243+7) == i243+7);
assert(std::is_heap_until(i244, i244+7) == i244+7);
assert(std::is_heap_until(i245, i245+7) == i245+7);
assert(std::is_heap_until(i246, i246+7) == i246+7);
}
int main()
{
test();
}

View File

@@ -0,0 +1,522 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// Iter
// is_heap_until(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
void test()
{
int i1[] = {0, 0};
assert(std::is_heap_until(i1, i1, std::greater<int>()) == i1);
assert(std::is_heap_until(i1, i1+1, std::greater<int>()) == i1+1);
int i2[] = {0, 1};
int i3[] = {1, 0};
assert(std::is_heap_until(i1, i1+2, std::greater<int>()) == i1+2);
assert(std::is_heap_until(i2, i2+2, std::greater<int>()) == i2+2);
assert(std::is_heap_until(i3, i3+2, std::greater<int>()) == i3+1);
int i4[] = {0, 0, 0};
int i5[] = {0, 0, 1};
int i6[] = {0, 1, 0};
int i7[] = {0, 1, 1};
int i8[] = {1, 0, 0};
int i9[] = {1, 0, 1};
int i10[] = {1, 1, 0};
assert(std::is_heap_until(i4, i4+3, std::greater<int>()) == i4+3);
assert(std::is_heap_until(i5, i5+3, std::greater<int>()) == i5+3);
assert(std::is_heap_until(i6, i6+3, std::greater<int>()) == i6+3);
assert(std::is_heap_until(i7, i7+3, std::greater<int>()) == i7+3);
assert(std::is_heap_until(i8, i8+3, std::greater<int>()) == i8+1);
assert(std::is_heap_until(i9, i9+3, std::greater<int>()) == i9+1);
assert(std::is_heap_until(i10, i10+3, std::greater<int>()) == i10+2);
int i11[] = {0, 0, 0, 0};
int i12[] = {0, 0, 0, 1};
int i13[] = {0, 0, 1, 0};
int i14[] = {0, 0, 1, 1};
int i15[] = {0, 1, 0, 0};
int i16[] = {0, 1, 0, 1};
int i17[] = {0, 1, 1, 0};
int i18[] = {0, 1, 1, 1};
int i19[] = {1, 0, 0, 0};
int i20[] = {1, 0, 0, 1};
int i21[] = {1, 0, 1, 0};
int i22[] = {1, 0, 1, 1};
int i23[] = {1, 1, 0, 0};
int i24[] = {1, 1, 0, 1};
int i25[] = {1, 1, 1, 0};
assert(std::is_heap_until(i11, i11+4, std::greater<int>()) == i11+4);
assert(std::is_heap_until(i12, i12+4, std::greater<int>()) == i12+4);
assert(std::is_heap_until(i13, i13+4, std::greater<int>()) == i13+4);
assert(std::is_heap_until(i14, i14+4, std::greater<int>()) == i14+4);
assert(std::is_heap_until(i15, i15+4, std::greater<int>()) == i15+3);
assert(std::is_heap_until(i16, i16+4, std::greater<int>()) == i16+4);
assert(std::is_heap_until(i17, i17+4, std::greater<int>()) == i17+3);
assert(std::is_heap_until(i18, i18+4, std::greater<int>()) == i18+4);
assert(std::is_heap_until(i19, i19+4, std::greater<int>()) == i19+1);
assert(std::is_heap_until(i20, i20+4, std::greater<int>()) == i20+1);
assert(std::is_heap_until(i21, i21+4, std::greater<int>()) == i21+1);
assert(std::is_heap_until(i22, i22+4, std::greater<int>()) == i22+1);
assert(std::is_heap_until(i23, i23+4, std::greater<int>()) == i23+2);
assert(std::is_heap_until(i24, i24+4, std::greater<int>()) == i24+2);
assert(std::is_heap_until(i25, i25+4, std::greater<int>()) == i25+3);
int i26[] = {0, 0, 0, 0, 0};
int i27[] = {0, 0, 0, 0, 1};
int i28[] = {0, 0, 0, 1, 0};
int i29[] = {0, 0, 0, 1, 1};
int i30[] = {0, 0, 1, 0, 0};
int i31[] = {0, 0, 1, 0, 1};
int i32[] = {0, 0, 1, 1, 0};
int i33[] = {0, 0, 1, 1, 1};
int i34[] = {0, 1, 0, 0, 0};
int i35[] = {0, 1, 0, 0, 1};
int i36[] = {0, 1, 0, 1, 0};
int i37[] = {0, 1, 0, 1, 1};
int i38[] = {0, 1, 1, 0, 0};
int i39[] = {0, 1, 1, 0, 1};
int i40[] = {0, 1, 1, 1, 0};
int i41[] = {0, 1, 1, 1, 1};
int i42[] = {1, 0, 0, 0, 0};
int i43[] = {1, 0, 0, 0, 1};
int i44[] = {1, 0, 0, 1, 0};
int i45[] = {1, 0, 0, 1, 1};
int i46[] = {1, 0, 1, 0, 0};
int i47[] = {1, 0, 1, 0, 1};
int i48[] = {1, 0, 1, 1, 0};
int i49[] = {1, 0, 1, 1, 1};
int i50[] = {1, 1, 0, 0, 0};
int i51[] = {1, 1, 0, 0, 1};
int i52[] = {1, 1, 0, 1, 0};
int i53[] = {1, 1, 0, 1, 1};
int i54[] = {1, 1, 1, 0, 0};
int i55[] = {1, 1, 1, 0, 1};
int i56[] = {1, 1, 1, 1, 0};
assert(std::is_heap_until(i26, i26+5, std::greater<int>()) == i26+5);
assert(std::is_heap_until(i27, i27+5, std::greater<int>()) == i27+5);
assert(std::is_heap_until(i28, i28+5, std::greater<int>()) == i28+5);
assert(std::is_heap_until(i29, i29+5, std::greater<int>()) == i29+5);
assert(std::is_heap_until(i30, i30+5, std::greater<int>()) == i30+5);
assert(std::is_heap_until(i31, i31+5, std::greater<int>()) == i31+5);
assert(std::is_heap_until(i32, i32+5, std::greater<int>()) == i32+5);
assert(std::is_heap_until(i33, i33+5, std::greater<int>()) == i33+5);
assert(std::is_heap_until(i34, i34+5, std::greater<int>()) == i34+3);
assert(std::is_heap_until(i35, i35+5, std::greater<int>()) == i35+3);
assert(std::is_heap_until(i36, i36+5, std::greater<int>()) == i36+4);
assert(std::is_heap_until(i37, i37+5, std::greater<int>()) == i37+5);
assert(std::is_heap_until(i38, i38+5, std::greater<int>()) == i38+3);
assert(std::is_heap_until(i39, i39+5, std::greater<int>()) == i39+3);
assert(std::is_heap_until(i40, i40+5, std::greater<int>()) == i40+4);
assert(std::is_heap_until(i41, i41+5, std::greater<int>()) == i41+5);
assert(std::is_heap_until(i42, i42+5, std::greater<int>()) == i42+1);
assert(std::is_heap_until(i43, i43+5, std::greater<int>()) == i43+1);
assert(std::is_heap_until(i44, i44+5, std::greater<int>()) == i44+1);
assert(std::is_heap_until(i45, i45+5, std::greater<int>()) == i45+1);
assert(std::is_heap_until(i46, i46+5, std::greater<int>()) == i46+1);
assert(std::is_heap_until(i47, i47+5, std::greater<int>()) == i47+1);
assert(std::is_heap_until(i48, i48+5, std::greater<int>()) == i48+1);
assert(std::is_heap_until(i49, i49+5, std::greater<int>()) == i49+1);
assert(std::is_heap_until(i50, i50+5, std::greater<int>()) == i50+2);
assert(std::is_heap_until(i51, i51+5, std::greater<int>()) == i51+2);
assert(std::is_heap_until(i52, i52+5, std::greater<int>()) == i52+2);
assert(std::is_heap_until(i53, i53+5, std::greater<int>()) == i53+2);
assert(std::is_heap_until(i54, i54+5, std::greater<int>()) == i54+3);
assert(std::is_heap_until(i55, i55+5, std::greater<int>()) == i55+3);
assert(std::is_heap_until(i56, i56+5, std::greater<int>()) == i56+4);
int i57[] = {0, 0, 0, 0, 0, 0};
int i58[] = {0, 0, 0, 0, 0, 1};
int i59[] = {0, 0, 0, 0, 1, 0};
int i60[] = {0, 0, 0, 0, 1, 1};
int i61[] = {0, 0, 0, 1, 0, 0};
int i62[] = {0, 0, 0, 1, 0, 1};
int i63[] = {0, 0, 0, 1, 1, 0};
int i64[] = {0, 0, 0, 1, 1, 1};
int i65[] = {0, 0, 1, 0, 0, 0};
int i66[] = {0, 0, 1, 0, 0, 1};
int i67[] = {0, 0, 1, 0, 1, 0};
int i68[] = {0, 0, 1, 0, 1, 1};
int i69[] = {0, 0, 1, 1, 0, 0};
int i70[] = {0, 0, 1, 1, 0, 1};
int i71[] = {0, 0, 1, 1, 1, 0};
int i72[] = {0, 0, 1, 1, 1, 1};
int i73[] = {0, 1, 0, 0, 0, 0};
int i74[] = {0, 1, 0, 0, 0, 1};
int i75[] = {0, 1, 0, 0, 1, 0};
int i76[] = {0, 1, 0, 0, 1, 1};
int i77[] = {0, 1, 0, 1, 0, 0};
int i78[] = {0, 1, 0, 1, 0, 1};
int i79[] = {0, 1, 0, 1, 1, 0};
int i80[] = {0, 1, 0, 1, 1, 1};
int i81[] = {0, 1, 1, 0, 0, 0};
int i82[] = {0, 1, 1, 0, 0, 1};
int i83[] = {0, 1, 1, 0, 1, 0};
int i84[] = {0, 1, 1, 0, 1, 1};
int i85[] = {0, 1, 1, 1, 0, 0};
int i86[] = {0, 1, 1, 1, 0, 1};
int i87[] = {0, 1, 1, 1, 1, 0};
int i88[] = {0, 1, 1, 1, 1, 1};
int i89[] = {1, 0, 0, 0, 0, 0};
int i90[] = {1, 0, 0, 0, 0, 1};
int i91[] = {1, 0, 0, 0, 1, 0};
int i92[] = {1, 0, 0, 0, 1, 1};
int i93[] = {1, 0, 0, 1, 0, 0};
int i94[] = {1, 0, 0, 1, 0, 1};
int i95[] = {1, 0, 0, 1, 1, 0};
int i96[] = {1, 0, 0, 1, 1, 1};
int i97[] = {1, 0, 1, 0, 0, 0};
int i98[] = {1, 0, 1, 0, 0, 1};
int i99[] = {1, 0, 1, 0, 1, 0};
int i100[] = {1, 0, 1, 0, 1, 1};
int i101[] = {1, 0, 1, 1, 0, 0};
int i102[] = {1, 0, 1, 1, 0, 1};
int i103[] = {1, 0, 1, 1, 1, 0};
int i104[] = {1, 0, 1, 1, 1, 1};
int i105[] = {1, 1, 0, 0, 0, 0};
int i106[] = {1, 1, 0, 0, 0, 1};
int i107[] = {1, 1, 0, 0, 1, 0};
int i108[] = {1, 1, 0, 0, 1, 1};
int i109[] = {1, 1, 0, 1, 0, 0};
int i110[] = {1, 1, 0, 1, 0, 1};
int i111[] = {1, 1, 0, 1, 1, 0};
int i112[] = {1, 1, 0, 1, 1, 1};
int i113[] = {1, 1, 1, 0, 0, 0};
int i114[] = {1, 1, 1, 0, 0, 1};
int i115[] = {1, 1, 1, 0, 1, 0};
int i116[] = {1, 1, 1, 0, 1, 1};
int i117[] = {1, 1, 1, 1, 0, 0};
int i118[] = {1, 1, 1, 1, 0, 1};
int i119[] = {1, 1, 1, 1, 1, 0};
assert(std::is_heap_until(i57, i57+6, std::greater<int>()) == i57+6);
assert(std::is_heap_until(i58, i58+6, std::greater<int>()) == i58+6);
assert(std::is_heap_until(i59, i59+6, std::greater<int>()) == i59+6);
assert(std::is_heap_until(i60, i60+6, std::greater<int>()) == i60+6);
assert(std::is_heap_until(i61, i61+6, std::greater<int>()) == i61+6);
assert(std::is_heap_until(i62, i62+6, std::greater<int>()) == i62+6);
assert(std::is_heap_until(i63, i63+6, std::greater<int>()) == i63+6);
assert(std::is_heap_until(i64, i64+6, std::greater<int>()) == i64+6);
assert(std::is_heap_until(i65, i65+6, std::greater<int>()) == i65+5);
assert(std::is_heap_until(i66, i66+6, std::greater<int>()) == i66+6);
assert(std::is_heap_until(i67, i67+6, std::greater<int>()) == i67+5);
assert(std::is_heap_until(i68, i68+6, std::greater<int>()) == i68+6);
assert(std::is_heap_until(i69, i69+6, std::greater<int>()) == i69+5);
assert(std::is_heap_until(i70, i70+6, std::greater<int>()) == i70+6);
assert(std::is_heap_until(i71, i71+6, std::greater<int>()) == i71+5);
assert(std::is_heap_until(i72, i72+6, std::greater<int>()) == i72+6);
assert(std::is_heap_until(i73, i73+6, std::greater<int>()) == i73+3);
assert(std::is_heap_until(i74, i74+6, std::greater<int>()) == i74+3);
assert(std::is_heap_until(i75, i75+6, std::greater<int>()) == i75+3);
assert(std::is_heap_until(i76, i76+6, std::greater<int>()) == i76+3);
assert(std::is_heap_until(i77, i77+6, std::greater<int>()) == i77+4);
assert(std::is_heap_until(i78, i78+6, std::greater<int>()) == i78+4);
assert(std::is_heap_until(i79, i79+6, std::greater<int>()) == i79+6);
assert(std::is_heap_until(i80, i80+6, std::greater<int>()) == i80+6);
assert(std::is_heap_until(i81, i81+6, std::greater<int>()) == i81+3);
assert(std::is_heap_until(i82, i82+6, std::greater<int>()) == i82+3);
assert(std::is_heap_until(i83, i83+6, std::greater<int>()) == i83+3);
assert(std::is_heap_until(i84, i84+6, std::greater<int>()) == i84+3);
assert(std::is_heap_until(i85, i85+6, std::greater<int>()) == i85+4);
assert(std::is_heap_until(i86, i86+6, std::greater<int>()) == i86+4);
assert(std::is_heap_until(i87, i87+6, std::greater<int>()) == i87+5);
assert(std::is_heap_until(i88, i88+6, std::greater<int>()) == i88+6);
assert(std::is_heap_until(i89, i89+6, std::greater<int>()) == i89+1);
assert(std::is_heap_until(i90, i90+6, std::greater<int>()) == i90+1);
assert(std::is_heap_until(i91, i91+6, std::greater<int>()) == i91+1);
assert(std::is_heap_until(i92, i92+6, std::greater<int>()) == i92+1);
assert(std::is_heap_until(i93, i93+6, std::greater<int>()) == i93+1);
assert(std::is_heap_until(i94, i94+6, std::greater<int>()) == i94+1);
assert(std::is_heap_until(i95, i95+6, std::greater<int>()) == i95+1);
assert(std::is_heap_until(i96, i96+6, std::greater<int>()) == i96+1);
assert(std::is_heap_until(i97, i97+6, std::greater<int>()) == i97+1);
assert(std::is_heap_until(i98, i98+6, std::greater<int>()) == i98+1);
assert(std::is_heap_until(i99, i99+6, std::greater<int>()) == i99+1);
assert(std::is_heap_until(i100, i100+6, std::greater<int>()) == i100+1);
assert(std::is_heap_until(i101, i101+6, std::greater<int>()) == i101+1);
assert(std::is_heap_until(i102, i102+6, std::greater<int>()) == i102+1);
assert(std::is_heap_until(i103, i103+6, std::greater<int>()) == i103+1);
assert(std::is_heap_until(i104, i104+6, std::greater<int>()) == i104+1);
assert(std::is_heap_until(i105, i105+6, std::greater<int>()) == i105+2);
assert(std::is_heap_until(i106, i106+6, std::greater<int>()) == i106+2);
assert(std::is_heap_until(i107, i107+6, std::greater<int>()) == i107+2);
assert(std::is_heap_until(i108, i108+6, std::greater<int>()) == i108+2);
assert(std::is_heap_until(i109, i109+6, std::greater<int>()) == i109+2);
assert(std::is_heap_until(i110, i110+6, std::greater<int>()) == i110+2);
assert(std::is_heap_until(i111, i111+6, std::greater<int>()) == i111+2);
assert(std::is_heap_until(i112, i112+6, std::greater<int>()) == i112+2);
assert(std::is_heap_until(i113, i113+6, std::greater<int>()) == i113+3);
assert(std::is_heap_until(i114, i114+6, std::greater<int>()) == i114+3);
assert(std::is_heap_until(i115, i115+6, std::greater<int>()) == i115+3);
assert(std::is_heap_until(i116, i116+6, std::greater<int>()) == i116+3);
assert(std::is_heap_until(i117, i117+6, std::greater<int>()) == i117+4);
assert(std::is_heap_until(i118, i118+6, std::greater<int>()) == i118+4);
assert(std::is_heap_until(i119, i119+6, std::greater<int>()) == i119+5);
int i120[] = {0, 0, 0, 0, 0, 0, 0};
int i121[] = {0, 0, 0, 0, 0, 0, 1};
int i122[] = {0, 0, 0, 0, 0, 1, 0};
int i123[] = {0, 0, 0, 0, 0, 1, 1};
int i124[] = {0, 0, 0, 0, 1, 0, 0};
int i125[] = {0, 0, 0, 0, 1, 0, 1};
int i126[] = {0, 0, 0, 0, 1, 1, 0};
int i127[] = {0, 0, 0, 0, 1, 1, 1};
int i128[] = {0, 0, 0, 1, 0, 0, 0};
int i129[] = {0, 0, 0, 1, 0, 0, 1};
int i130[] = {0, 0, 0, 1, 0, 1, 0};
int i131[] = {0, 0, 0, 1, 0, 1, 1};
int i132[] = {0, 0, 0, 1, 1, 0, 0};
int i133[] = {0, 0, 0, 1, 1, 0, 1};
int i134[] = {0, 0, 0, 1, 1, 1, 0};
int i135[] = {0, 0, 0, 1, 1, 1, 1};
int i136[] = {0, 0, 1, 0, 0, 0, 0};
int i137[] = {0, 0, 1, 0, 0, 0, 1};
int i138[] = {0, 0, 1, 0, 0, 1, 0};
int i139[] = {0, 0, 1, 0, 0, 1, 1};
int i140[] = {0, 0, 1, 0, 1, 0, 0};
int i141[] = {0, 0, 1, 0, 1, 0, 1};
int i142[] = {0, 0, 1, 0, 1, 1, 0};
int i143[] = {0, 0, 1, 0, 1, 1, 1};
int i144[] = {0, 0, 1, 1, 0, 0, 0};
int i145[] = {0, 0, 1, 1, 0, 0, 1};
int i146[] = {0, 0, 1, 1, 0, 1, 0};
int i147[] = {0, 0, 1, 1, 0, 1, 1};
int i148[] = {0, 0, 1, 1, 1, 0, 0};
int i149[] = {0, 0, 1, 1, 1, 0, 1};
int i150[] = {0, 0, 1, 1, 1, 1, 0};
int i151[] = {0, 0, 1, 1, 1, 1, 1};
int i152[] = {0, 1, 0, 0, 0, 0, 0};
int i153[] = {0, 1, 0, 0, 0, 0, 1};
int i154[] = {0, 1, 0, 0, 0, 1, 0};
int i155[] = {0, 1, 0, 0, 0, 1, 1};
int i156[] = {0, 1, 0, 0, 1, 0, 0};
int i157[] = {0, 1, 0, 0, 1, 0, 1};
int i158[] = {0, 1, 0, 0, 1, 1, 0};
int i159[] = {0, 1, 0, 0, 1, 1, 1};
int i160[] = {0, 1, 0, 1, 0, 0, 0};
int i161[] = {0, 1, 0, 1, 0, 0, 1};
int i162[] = {0, 1, 0, 1, 0, 1, 0};
int i163[] = {0, 1, 0, 1, 0, 1, 1};
int i164[] = {0, 1, 0, 1, 1, 0, 0};
int i165[] = {0, 1, 0, 1, 1, 0, 1};
int i166[] = {0, 1, 0, 1, 1, 1, 0};
int i167[] = {0, 1, 0, 1, 1, 1, 1};
int i168[] = {0, 1, 1, 0, 0, 0, 0};
int i169[] = {0, 1, 1, 0, 0, 0, 1};
int i170[] = {0, 1, 1, 0, 0, 1, 0};
int i171[] = {0, 1, 1, 0, 0, 1, 1};
int i172[] = {0, 1, 1, 0, 1, 0, 0};
int i173[] = {0, 1, 1, 0, 1, 0, 1};
int i174[] = {0, 1, 1, 0, 1, 1, 0};
int i175[] = {0, 1, 1, 0, 1, 1, 1};
int i176[] = {0, 1, 1, 1, 0, 0, 0};
int i177[] = {0, 1, 1, 1, 0, 0, 1};
int i178[] = {0, 1, 1, 1, 0, 1, 0};
int i179[] = {0, 1, 1, 1, 0, 1, 1};
int i180[] = {0, 1, 1, 1, 1, 0, 0};
int i181[] = {0, 1, 1, 1, 1, 0, 1};
int i182[] = {0, 1, 1, 1, 1, 1, 0};
int i183[] = {0, 1, 1, 1, 1, 1, 1};
int i184[] = {1, 0, 0, 0, 0, 0, 0};
int i185[] = {1, 0, 0, 0, 0, 0, 1};
int i186[] = {1, 0, 0, 0, 0, 1, 0};
int i187[] = {1, 0, 0, 0, 0, 1, 1};
int i188[] = {1, 0, 0, 0, 1, 0, 0};
int i189[] = {1, 0, 0, 0, 1, 0, 1};
int i190[] = {1, 0, 0, 0, 1, 1, 0};
int i191[] = {1, 0, 0, 0, 1, 1, 1};
int i192[] = {1, 0, 0, 1, 0, 0, 0};
int i193[] = {1, 0, 0, 1, 0, 0, 1};
int i194[] = {1, 0, 0, 1, 0, 1, 0};
int i195[] = {1, 0, 0, 1, 0, 1, 1};
int i196[] = {1, 0, 0, 1, 1, 0, 0};
int i197[] = {1, 0, 0, 1, 1, 0, 1};
int i198[] = {1, 0, 0, 1, 1, 1, 0};
int i199[] = {1, 0, 0, 1, 1, 1, 1};
int i200[] = {1, 0, 1, 0, 0, 0, 0};
int i201[] = {1, 0, 1, 0, 0, 0, 1};
int i202[] = {1, 0, 1, 0, 0, 1, 0};
int i203[] = {1, 0, 1, 0, 0, 1, 1};
int i204[] = {1, 0, 1, 0, 1, 0, 0};
int i205[] = {1, 0, 1, 0, 1, 0, 1};
int i206[] = {1, 0, 1, 0, 1, 1, 0};
int i207[] = {1, 0, 1, 0, 1, 1, 1};
int i208[] = {1, 0, 1, 1, 0, 0, 0};
int i209[] = {1, 0, 1, 1, 0, 0, 1};
int i210[] = {1, 0, 1, 1, 0, 1, 0};
int i211[] = {1, 0, 1, 1, 0, 1, 1};
int i212[] = {1, 0, 1, 1, 1, 0, 0};
int i213[] = {1, 0, 1, 1, 1, 0, 1};
int i214[] = {1, 0, 1, 1, 1, 1, 0};
int i215[] = {1, 0, 1, 1, 1, 1, 1};
int i216[] = {1, 1, 0, 0, 0, 0, 0};
int i217[] = {1, 1, 0, 0, 0, 0, 1};
int i218[] = {1, 1, 0, 0, 0, 1, 0};
int i219[] = {1, 1, 0, 0, 0, 1, 1};
int i220[] = {1, 1, 0, 0, 1, 0, 0};
int i221[] = {1, 1, 0, 0, 1, 0, 1};
int i222[] = {1, 1, 0, 0, 1, 1, 0};
int i223[] = {1, 1, 0, 0, 1, 1, 1};
int i224[] = {1, 1, 0, 1, 0, 0, 0};
int i225[] = {1, 1, 0, 1, 0, 0, 1};
int i226[] = {1, 1, 0, 1, 0, 1, 0};
int i227[] = {1, 1, 0, 1, 0, 1, 1};
int i228[] = {1, 1, 0, 1, 1, 0, 0};
int i229[] = {1, 1, 0, 1, 1, 0, 1};
int i230[] = {1, 1, 0, 1, 1, 1, 0};
int i231[] = {1, 1, 0, 1, 1, 1, 1};
int i232[] = {1, 1, 1, 0, 0, 0, 0};
int i233[] = {1, 1, 1, 0, 0, 0, 1};
int i234[] = {1, 1, 1, 0, 0, 1, 0};
int i235[] = {1, 1, 1, 0, 0, 1, 1};
int i236[] = {1, 1, 1, 0, 1, 0, 0};
int i237[] = {1, 1, 1, 0, 1, 0, 1};
int i238[] = {1, 1, 1, 0, 1, 1, 0};
int i239[] = {1, 1, 1, 0, 1, 1, 1};
int i240[] = {1, 1, 1, 1, 0, 0, 0};
int i241[] = {1, 1, 1, 1, 0, 0, 1};
int i242[] = {1, 1, 1, 1, 0, 1, 0};
int i243[] = {1, 1, 1, 1, 0, 1, 1};
int i244[] = {1, 1, 1, 1, 1, 0, 0};
int i245[] = {1, 1, 1, 1, 1, 0, 1};
int i246[] = {1, 1, 1, 1, 1, 1, 0};
assert(std::is_heap_until(i120, i120+7, std::greater<int>()) == i120+7);
assert(std::is_heap_until(i121, i121+7, std::greater<int>()) == i121+7);
assert(std::is_heap_until(i122, i122+7, std::greater<int>()) == i122+7);
assert(std::is_heap_until(i123, i123+7, std::greater<int>()) == i123+7);
assert(std::is_heap_until(i124, i124+7, std::greater<int>()) == i124+7);
assert(std::is_heap_until(i125, i125+7, std::greater<int>()) == i125+7);
assert(std::is_heap_until(i126, i126+7, std::greater<int>()) == i126+7);
assert(std::is_heap_until(i127, i127+7, std::greater<int>()) == i127+7);
assert(std::is_heap_until(i128, i128+7, std::greater<int>()) == i128+7);
assert(std::is_heap_until(i129, i129+7, std::greater<int>()) == i129+7);
assert(std::is_heap_until(i130, i130+7, std::greater<int>()) == i130+7);
assert(std::is_heap_until(i131, i131+7, std::greater<int>()) == i131+7);
assert(std::is_heap_until(i132, i132+7, std::greater<int>()) == i132+7);
assert(std::is_heap_until(i133, i133+7, std::greater<int>()) == i133+7);
assert(std::is_heap_until(i134, i134+7, std::greater<int>()) == i134+7);
assert(std::is_heap_until(i135, i135+7, std::greater<int>()) == i135+7);
assert(std::is_heap_until(i136, i136+7, std::greater<int>()) == i136+5);
assert(std::is_heap_until(i137, i137+7, std::greater<int>()) == i137+5);
assert(std::is_heap_until(i138, i138+7, std::greater<int>()) == i138+6);
assert(std::is_heap_until(i139, i139+7, std::greater<int>()) == i139+7);
assert(std::is_heap_until(i140, i140+7, std::greater<int>()) == i140+5);
assert(std::is_heap_until(i141, i141+7, std::greater<int>()) == i141+5);
assert(std::is_heap_until(i142, i142+7, std::greater<int>()) == i142+6);
assert(std::is_heap_until(i143, i143+7, std::greater<int>()) == i143+7);
assert(std::is_heap_until(i144, i144+7, std::greater<int>()) == i144+5);
assert(std::is_heap_until(i145, i145+7, std::greater<int>()) == i145+5);
assert(std::is_heap_until(i146, i146+7, std::greater<int>()) == i146+6);
assert(std::is_heap_until(i147, i147+7, std::greater<int>()) == i147+7);
assert(std::is_heap_until(i148, i148+7, std::greater<int>()) == i148+5);
assert(std::is_heap_until(i149, i149+7, std::greater<int>()) == i149+5);
assert(std::is_heap_until(i150, i150+7, std::greater<int>()) == i150+6);
assert(std::is_heap_until(i151, i151+7, std::greater<int>()) == i151+7);
assert(std::is_heap_until(i152, i152+7, std::greater<int>()) == i152+3);
assert(std::is_heap_until(i153, i153+7, std::greater<int>()) == i153+3);
assert(std::is_heap_until(i154, i154+7, std::greater<int>()) == i154+3);
assert(std::is_heap_until(i155, i155+7, std::greater<int>()) == i155+3);
assert(std::is_heap_until(i156, i156+7, std::greater<int>()) == i156+3);
assert(std::is_heap_until(i157, i157+7, std::greater<int>()) == i157+3);
assert(std::is_heap_until(i158, i158+7, std::greater<int>()) == i158+3);
assert(std::is_heap_until(i159, i159+7, std::greater<int>()) == i159+3);
assert(std::is_heap_until(i160, i160+7, std::greater<int>()) == i160+4);
assert(std::is_heap_until(i161, i161+7, std::greater<int>()) == i161+4);
assert(std::is_heap_until(i162, i162+7, std::greater<int>()) == i162+4);
assert(std::is_heap_until(i163, i163+7, std::greater<int>()) == i163+4);
assert(std::is_heap_until(i164, i164+7, std::greater<int>()) == i164+7);
assert(std::is_heap_until(i165, i165+7, std::greater<int>()) == i165+7);
assert(std::is_heap_until(i166, i166+7, std::greater<int>()) == i166+7);
assert(std::is_heap_until(i167, i167+7, std::greater<int>()) == i167+7);
assert(std::is_heap_until(i168, i168+7, std::greater<int>()) == i168+3);
assert(std::is_heap_until(i169, i169+7, std::greater<int>()) == i169+3);
assert(std::is_heap_until(i170, i170+7, std::greater<int>()) == i170+3);
assert(std::is_heap_until(i171, i171+7, std::greater<int>()) == i171+3);
assert(std::is_heap_until(i172, i172+7, std::greater<int>()) == i172+3);
assert(std::is_heap_until(i173, i173+7, std::greater<int>()) == i173+3);
assert(std::is_heap_until(i174, i174+7, std::greater<int>()) == i174+3);
assert(std::is_heap_until(i175, i175+7, std::greater<int>()) == i175+3);
assert(std::is_heap_until(i176, i176+7, std::greater<int>()) == i176+4);
assert(std::is_heap_until(i177, i177+7, std::greater<int>()) == i177+4);
assert(std::is_heap_until(i178, i178+7, std::greater<int>()) == i178+4);
assert(std::is_heap_until(i179, i179+7, std::greater<int>()) == i179+4);
assert(std::is_heap_until(i180, i180+7, std::greater<int>()) == i180+5);
assert(std::is_heap_until(i181, i181+7, std::greater<int>()) == i181+5);
assert(std::is_heap_until(i182, i182+7, std::greater<int>()) == i182+6);
assert(std::is_heap_until(i183, i183+7, std::greater<int>()) == i183+7);
assert(std::is_heap_until(i184, i184+7, std::greater<int>()) == i184+1);
assert(std::is_heap_until(i185, i185+7, std::greater<int>()) == i185+1);
assert(std::is_heap_until(i186, i186+7, std::greater<int>()) == i186+1);
assert(std::is_heap_until(i187, i187+7, std::greater<int>()) == i187+1);
assert(std::is_heap_until(i188, i188+7, std::greater<int>()) == i188+1);
assert(std::is_heap_until(i189, i189+7, std::greater<int>()) == i189+1);
assert(std::is_heap_until(i190, i190+7, std::greater<int>()) == i190+1);
assert(std::is_heap_until(i191, i191+7, std::greater<int>()) == i191+1);
assert(std::is_heap_until(i192, i192+7, std::greater<int>()) == i192+1);
assert(std::is_heap_until(i193, i193+7, std::greater<int>()) == i193+1);
assert(std::is_heap_until(i194, i194+7, std::greater<int>()) == i194+1);
assert(std::is_heap_until(i195, i195+7, std::greater<int>()) == i195+1);
assert(std::is_heap_until(i196, i196+7, std::greater<int>()) == i196+1);
assert(std::is_heap_until(i197, i197+7, std::greater<int>()) == i197+1);
assert(std::is_heap_until(i198, i198+7, std::greater<int>()) == i198+1);
assert(std::is_heap_until(i199, i199+7, std::greater<int>()) == i199+1);
assert(std::is_heap_until(i200, i200+7, std::greater<int>()) == i200+1);
assert(std::is_heap_until(i201, i201+7, std::greater<int>()) == i201+1);
assert(std::is_heap_until(i202, i202+7, std::greater<int>()) == i202+1);
assert(std::is_heap_until(i203, i203+7, std::greater<int>()) == i203+1);
assert(std::is_heap_until(i204, i204+7, std::greater<int>()) == i204+1);
assert(std::is_heap_until(i205, i205+7, std::greater<int>()) == i205+1);
assert(std::is_heap_until(i206, i206+7, std::greater<int>()) == i206+1);
assert(std::is_heap_until(i207, i207+7, std::greater<int>()) == i207+1);
assert(std::is_heap_until(i208, i208+7, std::greater<int>()) == i208+1);
assert(std::is_heap_until(i209, i209+7, std::greater<int>()) == i209+1);
assert(std::is_heap_until(i210, i210+7, std::greater<int>()) == i210+1);
assert(std::is_heap_until(i211, i211+7, std::greater<int>()) == i211+1);
assert(std::is_heap_until(i212, i212+7, std::greater<int>()) == i212+1);
assert(std::is_heap_until(i213, i213+7, std::greater<int>()) == i213+1);
assert(std::is_heap_until(i214, i214+7, std::greater<int>()) == i214+1);
assert(std::is_heap_until(i215, i215+7, std::greater<int>()) == i215+1);
assert(std::is_heap_until(i216, i216+7, std::greater<int>()) == i216+2);
assert(std::is_heap_until(i217, i217+7, std::greater<int>()) == i217+2);
assert(std::is_heap_until(i218, i218+7, std::greater<int>()) == i218+2);
assert(std::is_heap_until(i219, i219+7, std::greater<int>()) == i219+2);
assert(std::is_heap_until(i220, i220+7, std::greater<int>()) == i220+2);
assert(std::is_heap_until(i221, i221+7, std::greater<int>()) == i221+2);
assert(std::is_heap_until(i222, i222+7, std::greater<int>()) == i222+2);
assert(std::is_heap_until(i223, i223+7, std::greater<int>()) == i223+2);
assert(std::is_heap_until(i224, i224+7, std::greater<int>()) == i224+2);
assert(std::is_heap_until(i225, i225+7, std::greater<int>()) == i225+2);
assert(std::is_heap_until(i226, i226+7, std::greater<int>()) == i226+2);
assert(std::is_heap_until(i227, i227+7, std::greater<int>()) == i227+2);
assert(std::is_heap_until(i228, i228+7, std::greater<int>()) == i228+2);
assert(std::is_heap_until(i229, i229+7, std::greater<int>()) == i229+2);
assert(std::is_heap_until(i230, i230+7, std::greater<int>()) == i230+2);
assert(std::is_heap_until(i231, i231+7, std::greater<int>()) == i231+2);
assert(std::is_heap_until(i232, i232+7, std::greater<int>()) == i232+3);
assert(std::is_heap_until(i233, i233+7, std::greater<int>()) == i233+3);
assert(std::is_heap_until(i234, i234+7, std::greater<int>()) == i234+3);
assert(std::is_heap_until(i235, i235+7, std::greater<int>()) == i235+3);
assert(std::is_heap_until(i236, i236+7, std::greater<int>()) == i236+3);
assert(std::is_heap_until(i237, i237+7, std::greater<int>()) == i237+3);
assert(std::is_heap_until(i238, i238+7, std::greater<int>()) == i238+3);
assert(std::is_heap_until(i239, i239+7, std::greater<int>()) == i239+3);
assert(std::is_heap_until(i240, i240+7, std::greater<int>()) == i240+4);
assert(std::is_heap_until(i241, i241+7, std::greater<int>()) == i241+4);
assert(std::is_heap_until(i242, i242+7, std::greater<int>()) == i242+4);
assert(std::is_heap_until(i243, i243+7, std::greater<int>()) == i243+4);
assert(std::is_heap_until(i244, i244+7, std::greater<int>()) == i244+5);
assert(std::is_heap_until(i245, i245+7, std::greater<int>()) == i245+5);
assert(std::is_heap_until(i246, i246+7, std::greater<int>()) == i246+6);
}
int main()
{
test();
}

View File

@@ -0,0 +1,40 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter> && LessThanComparable<Iter::value_type>
// void
// make_heap(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N);
assert(std::is_heap(ia, ia+N));
delete [] ia;
}
int main()
{
test(0);
test(1);
test(2);
test(3);
test(10);
test(1000);
}

View File

@@ -0,0 +1,64 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter> && CopyConstructible<Compare>
// void
// make_heap(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, std::greater<int>());
assert(std::is_heap(ia, ia+N, std::greater<int>()));
delete [] ia;
}
int main()
{
test(0);
test(1);
test(2);
test(3);
test(10);
test(1000);
#ifdef _LIBCPP_MOVE
{
const int N = 1000;
std::unique_ptr<int>* ia = new std::unique_ptr<int> [N];
for (int i = 0; i < N; ++i)
ia[i].reset(new int(i));
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, indirect_less());
assert(std::is_heap(ia, ia+N, indirect_less()));
delete [] ia;
}
#endif
}

View File

@@ -0,0 +1,12 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
int main()
{
}

View File

@@ -0,0 +1,40 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter> && LessThanComparable<Iter::value_type>
// void
// pop_heap(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N);
for (int i = N; i > 0; --i)
{
std::pop_heap(ia, ia+i);
assert(std::is_heap(ia, ia+i-1));
}
std::pop_heap(ia, ia);
delete [] ia;
}
int main()
{
test(1000);
}

View File

@@ -0,0 +1,68 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter> && CopyConstructible<Compare>
// void
// pop_heap(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, std::greater<int>());
for (int i = N; i > 0; --i)
{
std::pop_heap(ia, ia+i, std::greater<int>());
assert(std::is_heap(ia, ia+i-1, std::greater<int>()));
}
std::pop_heap(ia, ia, std::greater<int>());
delete [] ia;
}
int main()
{
test(1000);
#ifdef _LIBCPP_MOVE
{
const int N = 1000;
std::unique_ptr<int>* ia = new std::unique_ptr<int> [N];
for (int i = 0; i < N; ++i)
ia[i].reset(new int(i));
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, indirect_less());
for (int i = N; i > 0; --i)
{
std::pop_heap(ia, ia+i, indirect_less());
assert(std::is_heap(ia, ia+i-1, indirect_less()));
}
delete [] ia;
}
#endif
}

View File

@@ -0,0 +1,39 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// push_heap(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
for (int i = 0; i <= N; ++i)
{
std::push_heap(ia, ia+i);
assert(std::is_heap(ia, ia+i));
}
delete [] ia;
}
int main()
{
test(1000);
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// push_heap(Iter first, Iter last);
#include <algorithm>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
for (int i = 0; i <= N; ++i)
{
std::push_heap(ia, ia+i, std::greater<int>());
assert(std::is_heap(ia, ia+i, std::greater<int>()));
}
delete [] ia;
}
int main()
{
test(1000);
#ifdef _LIBCPP_MOVE
{
const int N = 1000;
std::unique_ptr<int>* ia = new std::unique_ptr<int> [N];
for (int i = 0; i < N; ++i)
ia[i].reset(new int(i));
std::random_shuffle(ia, ia+N);
for (int i = 0; i <= N; ++i)
{
std::push_heap(ia, ia+i, indirect_less());
assert(std::is_heap(ia, ia+i, indirect_less()));
}
delete [] ia;
}
#endif
}

View File

@@ -0,0 +1,41 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter> && LessThanComparable<Iter::value_type>
// void
// sort_heap(Iter first, Iter last);
#include <algorithm>
#include <cassert>
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N);
std::sort_heap(ia, ia+N);
assert(std::is_sorted(ia, ia+N));
delete [] ia;
}
int main()
{
test(0);
test(1);
test(2);
test(3);
test(10);
test(1000);
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter> && CopyConstructible<Compare>
// void
// sort_heap(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void test(unsigned N)
{
int* ia = new int [N];
for (int i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, std::greater<int>());
std::sort_heap(ia, ia+N, std::greater<int>());
assert(std::is_sorted(ia, ia+N, std::greater<int>()));
delete [] ia;
}
int main()
{
test(0);
test(1);
test(2);
test(3);
test(10);
test(1000);
#ifdef _LIBCPP_MOVE
{
const int N = 1000;
std::unique_ptr<int>* ia = new std::unique_ptr<int> [N];
for (int i = 0; i < N; ++i)
ia[i].reset(new int(i));
std::random_shuffle(ia, ia+N);
std::make_heap(ia, ia+N, indirect_less());
std::sort_heap(ia, ia+N, indirect_less());
assert(std::is_sorted(ia, ia+N, indirect_less()));
delete [] ia;
}
#endif
}

View File

@@ -0,0 +1,69 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator Iter1, InputIterator Iter2>
// requires HasLess<Iter1::value_type, Iter2::value_type>
// && HasLess<Iter2::value_type, Iter1::value_type>
// bool
// lexicographical_compare(Iter1 first1, Iter1 last1, Iter2 first2, Iter2 last2);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class Iter1, class Iter2>
void
test()
{
int ia[] = {1, 2, 3, 4};
const unsigned sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {1, 2, 3};
assert(!std::lexicographical_compare(ia, ia+sa, ib, ib+2));
assert(std::lexicographical_compare(ib, ib+2, ia, ia+sa));
assert(!std::lexicographical_compare(ia, ia+sa, ib, ib+3));
assert(std::lexicographical_compare(ib, ib+3, ia, ia+sa));
assert(std::lexicographical_compare(ia, ia+sa, ib+1, ib+3));
assert(!std::lexicographical_compare(ib+1, ib+3, ia, ia+sa));
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*> >();
test<input_iterator<const int*>, forward_iterator<const int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*> >();
test<input_iterator<const int*>, const int*>();
test<forward_iterator<const int*>, input_iterator<const int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*> >();
test<forward_iterator<const int*>, const int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*> >();
test<bidirectional_iterator<const int*>, const int*>();
test<random_access_iterator<const int*>, input_iterator<const int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
test<random_access_iterator<const int*>, const int*>();
test<const int*, input_iterator<const int*> >();
test<const int*, forward_iterator<const int*> >();
test<const int*, bidirectional_iterator<const int*> >();
test<const int*, random_access_iterator<const int*> >();
test<const int*, const int*>();
}

View File

@@ -0,0 +1,73 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator Iter1, InputIterator Iter2, CopyConstructible Compare>
// requires Predicate<Compare, Iter1::value_type, Iter2::value_type>
// && Predicate<Compare, Iter2::value_type, Iter1::value_type>
// bool
// lexicographical_compare(Iter1 first1, Iter1 last1,
// Iter2 first2, Iter2 last2, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
template <class Iter1, class Iter2>
void
test()
{
int ia[] = {1, 2, 3, 4};
const unsigned sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {1, 2, 3};
typedef std::greater<int> C;
C c;
assert(!std::lexicographical_compare(ia, ia+sa, ib, ib+2, c));
assert(std::lexicographical_compare(ib, ib+2, ia, ia+sa, c));
assert(!std::lexicographical_compare(ia, ia+sa, ib, ib+3, c));
assert(std::lexicographical_compare(ib, ib+3, ia, ia+sa, c));
assert(!std::lexicographical_compare(ia, ia+sa, ib+1, ib+3, c));
assert(std::lexicographical_compare(ib+1, ib+3, ia, ia+sa, c));
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*> >();
test<input_iterator<const int*>, forward_iterator<const int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*> >();
test<input_iterator<const int*>, const int*>();
test<forward_iterator<const int*>, input_iterator<const int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*> >();
test<forward_iterator<const int*>, const int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*> >();
test<bidirectional_iterator<const int*>, const int*>();
test<random_access_iterator<const int*>, input_iterator<const int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
test<random_access_iterator<const int*>, const int*>();
test<const int*, input_iterator<const int*> >();
test<const int*, forward_iterator<const int*> >();
test<const int*, bidirectional_iterator<const int*> >();
test<const int*, random_access_iterator<const int*> >();
test<const int*, const int*>();
}

View File

@@ -0,0 +1,79 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// inplace_merge(Iter first, Iter middle, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test_one(unsigned N, unsigned M)
{
assert(M <= N);
int* ia = new int[N];
for (unsigned i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::sort(ia, ia+M);
std::sort(ia+M, ia+N);
std::inplace_merge(Iter(ia), Iter(ia+M), Iter(ia+N));
if(N > 0)
{
assert(ia[0] == 0);
assert(ia[N-1] == N-1);
assert(std::is_sorted(ia, ia+N));
}
delete [] ia;
}
template <class Iter>
void
test(unsigned N)
{
test_one<Iter>(N, 0);
test_one<Iter>(N, N/4);
test_one<Iter>(N, N/2);
test_one<Iter>(N, 3*N/4);
test_one<Iter>(N, N);
}
template <class Iter>
void
test()
{
test_one<Iter>(0, 0);
test_one<Iter>(1, 0);
test_one<Iter>(1, 1);
test_one<Iter>(2, 0);
test_one<Iter>(2, 1);
test_one<Iter>(2, 2);
test_one<Iter>(3, 0);
test_one<Iter>(3, 1);
test_one<Iter>(3, 2);
test_one<Iter>(3, 3);
test<Iter>(4);
test<Iter>(100);
test<Iter>(1000);
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}

View File

@@ -0,0 +1,112 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// void
// inplace_merge(Iter first, Iter middle, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
#include "../../iterators.h"
template <class Iter>
void
test_one(unsigned N, unsigned M)
{
assert(M <= N);
int* ia = new int[N];
for (unsigned i = 0; i < N; ++i)
ia[i] = i;
std::random_shuffle(ia, ia+N);
std::sort(ia, ia+M, std::greater<int>());
std::sort(ia+M, ia+N, std::greater<int>());
std::inplace_merge(Iter(ia), Iter(ia+M), Iter(ia+N), std::greater<int>());
if(N > 0)
{
assert(ia[0] == N-1);
assert(ia[N-1] == 0);
assert(std::is_sorted(ia, ia+N, std::greater<int>()));
}
delete [] ia;
}
template <class Iter>
void
test(unsigned N)
{
test_one<Iter>(N, 0);
test_one<Iter>(N, N/4);
test_one<Iter>(N, N/2);
test_one<Iter>(N, 3*N/4);
test_one<Iter>(N, N);
}
template <class Iter>
void
test()
{
test_one<Iter>(0, 0);
test_one<Iter>(1, 0);
test_one<Iter>(1, 1);
test_one<Iter>(2, 0);
test_one<Iter>(2, 1);
test_one<Iter>(2, 2);
test_one<Iter>(3, 0);
test_one<Iter>(3, 1);
test_one<Iter>(3, 2);
test_one<Iter>(3, 3);
test<Iter>(4);
test<Iter>(100);
test<Iter>(1000);
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
#ifdef _LIBCPP_MOVE
{
unsigned N = 100;
unsigned M = 50;
std::unique_ptr<int>* ia = new std::unique_ptr<int>[N];
for (unsigned i = 0; i < N; ++i)
ia[i].reset(new int(i));
std::random_shuffle(ia, ia+N);
std::sort(ia, ia+M, indirect_less());
std::sort(ia+M, ia+N, indirect_less());
std::inplace_merge(ia, ia+M, ia+N, indirect_less());
if(N > 0)
{
assert(*ia[0] == 0);
assert(*ia[N-1] == N-1);
assert(std::is_sorted(ia, ia+N, indirect_less()));
}
delete [] ia;
}
#endif
}

View File

@@ -0,0 +1,222 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && HasLess<InIter2::value_type, InIter1::value_type>
// OutIter
// merge(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2, OutIter result);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class InIter1, class InIter2, class OutIter>
void
test()
{
{
unsigned N = 100000;
int* ia = new int[N];
int* ib = new int[N];
int* ic = new int[2*N];
for (unsigned i = 0; i < N; ++i)
ia[i] = 2*i;
for (unsigned i = 0; i < N; ++i)
ib[i] = 2*i+1;
OutIter r = std::merge(InIter1(ia), InIter1(ia+N),
InIter2(ib), InIter2(ib+N), OutIter(ic));
assert(base(r) == ic+2*N);
assert(ic[0] == 0);
assert(ic[2*N-1] == 2*N-1);
assert(std::is_sorted(ic, ic+2*N));
delete [] ic;
delete [] ib;
delete [] ia;
}
{
unsigned N = 100;
int* ia = new int[N];
int* ib = new int[N];
int* ic = new int[2*N];
for (unsigned i = 0; i < 2*N; ++i)
ic[i] = i;
std::random_shuffle(ic, ic+2*N);
std::copy(ic, ic+N, ia);
std::copy(ic+N, ic+2*N, ib);
std::sort(ia, ia+N);
std::sort(ib, ib+N);
OutIter r = std::merge(InIter1(ia), InIter1(ia+N),
InIter2(ib), InIter2(ib+N), OutIter(ic));
assert(base(r) == ic+2*N);
assert(ic[0] == 0);
assert(ic[2*N-1] == 2*N-1);
assert(std::is_sorted(ic, ic+2*N));
delete [] ic;
delete [] ib;
delete [] ia;
}
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,227 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
// Predicate<auto, InIter2::value_type, InIter1::value_type> Compare>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && CopyConstructible<Compare>
// OutIter
// merge(InIter1 first1, InIter1 last1,
// InIter2 first2, InIter2 last2, OutIter result, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
template <class InIter1, class InIter2, class OutIter>
void
test()
{
{
unsigned N = 100000;
int* ia = new int[N];
int* ib = new int[N];
int* ic = new int[2*N];
for (unsigned i = 0; i < N; ++i)
ia[i] = 2*i;
for (unsigned i = 0; i < N; ++i)
ib[i] = 2*i+1;
std::reverse(ia, ia+N);
std::reverse(ib, ib+N);
OutIter r = std::merge(InIter1(ia), InIter1(ia+N),
InIter2(ib), InIter2(ib+N), OutIter(ic), std::greater<int>());
assert(base(r) == ic+2*N);
assert(ic[0] == 2*N-1);
assert(ic[2*N-1] == 0);
assert(std::is_sorted(ic, ic+2*N, std::greater<int>()));
delete [] ic;
delete [] ib;
delete [] ia;
}
{
unsigned N = 100;
int* ia = new int[N];
int* ib = new int[N];
int* ic = new int[2*N];
for (unsigned i = 0; i < 2*N; ++i)
ic[i] = i;
std::random_shuffle(ic, ic+2*N);
std::copy(ic, ic+N, ia);
std::copy(ic+N, ic+2*N, ib);
std::sort(ia, ia+N, std::greater<int>());
std::sort(ib, ib+N, std::greater<int>());
OutIter r = std::merge(InIter1(ia), InIter1(ia+N),
InIter2(ib), InIter2(ib+N), OutIter(ic), std::greater<int>());
assert(base(r) == ic+2*N);
assert(ic[0] == 2*N-1);
assert(ic[2*N-1] == 0);
assert(std::is_sorted(ic, ic+2*N, std::greater<int>()));
delete [] ic;
delete [] ib;
delete [] ia;
}
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,46 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<LessThanComparable T>
// const T&
// max(const T& a, const T& b);
#include <algorithm>
#include <cassert>
template <class T>
void
test(const T& a, const T& b, const T& x)
{
assert(&std::max(a, b) == &x);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, x);
test(y, x, y);
}
{
int x = 0;
int y = 1;
test(x, y, y);
test(y, x, y);
}
{
int x = 1;
int y = 0;
test(x, y, x);
test(y, x, x);
}
}

View File

@@ -0,0 +1,48 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, StrictWeakOrder<auto, T> Compare>
// requires !SameType<T, Compare> && CopyConstructible<Compare>
// const T&
// max(const T& a, const T& b, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
template <class T, class C>
void
test(const T& a, const T& b, C c, const T& x)
{
assert(&std::max(a, b, c) == &x);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, std::greater<int>(), x);
test(y, x, std::greater<int>(), y);
}
{
int x = 0;
int y = 1;
test(x, y, std::greater<int>(), x);
test(y, x, std::greater<int>(), x);
}
{
int x = 1;
int y = 0;
test(x, y, std::greater<int>(), y);
test(y, x, std::greater<int>(), y);
}
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter>
// requires LessThanComparable<Iter::value_type>
// Iter
// max_element(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
Iter i = std::max_element(first, last);
if (first != last)
{
for (Iter j = first; j != last; ++j)
assert(!(*i < *j));
}
else
assert(i == last);
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,67 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// Iter
// max_element(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
Iter i = std::max_element(first, last, std::greater<int>());
if (first != last)
{
for (Iter j = first; j != last; ++j)
assert(!std::greater<int>()(*i, *j));
}
else
assert(i == last);
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template <class T>
// T
// max(initializer_list<T> t);
#include <algorithm>
#include <cassert>
#error max(initializer_list<T> t) is not implemented
int main()
{
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, class Compare>
// T
// max(initializer_list<T> t, Compare comp);
#include <algorithm>
#include <cassert>
#error max(initializer_list<T> t, Compare comp) is not implemented
int main()
{
}

View File

@@ -0,0 +1,46 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<LessThanComparable T>
// const T&
// min(const T& a, const T& b);
#include <algorithm>
#include <cassert>
template <class T>
void
test(const T& a, const T& b, const T& x)
{
assert(&std::min(a, b) == &x);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, x);
test(y, x, y);
}
{
int x = 0;
int y = 1;
test(x, y, x);
test(y, x, x);
}
{
int x = 1;
int y = 0;
test(x, y, y);
test(y, x, y);
}
}

View File

@@ -0,0 +1,48 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, StrictWeakOrder<auto, T> Compare>
// requires !SameType<T, Compare> && CopyConstructible<Compare>
// const T&
// min(const T& a, const T& b, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
template <class T, class C>
void
test(const T& a, const T& b, C c, const T& x)
{
assert(&std::min(a, b, c) == &x);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, std::greater<int>(), x);
test(y, x, std::greater<int>(), y);
}
{
int x = 0;
int y = 1;
test(x, y, std::greater<int>(), y);
test(y, x, std::greater<int>(), y);
}
{
int x = 1;
int y = 0;
test(x, y, std::greater<int>(), x);
test(y, x, std::greater<int>(), x);
}
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter>
// requires LessThanComparable<Iter::value_type>
// Iter
// min_element(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
Iter i = std::min_element(first, last);
if (first != last)
{
for (Iter j = first; j != last; ++j)
assert(!(*j < *i));
}
else
assert(i == last);
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,67 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// Iter
// min_element(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
Iter i = std::min_element(first, last, std::greater<int>());
if (first != last)
{
for (Iter j = first; j != last; ++j)
assert(!std::greater<int>()(*j, *i));
}
else
assert(i == last);
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T>
// T
// min(initializer_list<T> t);
#include <algorithm>
#include <cassert>
#error min(initializer_list<T> t) is not implemented
int main()
{
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, class Compare>
// T
// min(initializer_list<T> t, Compare comp);
#include <algorithm>
#include <cassert>
#error min(initializer_list<T> t, Compare comp) is not implemented
int main()
{
}

View File

@@ -0,0 +1,48 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<LessThanComparable T>
// pair<const T&, const T&>
// minmax(const T& a, const T& b);
#include <algorithm>
#include <cassert>
template <class T>
void
test(const T& a, const T& b, const T& x, const T& y)
{
std::pair<const T&, const T&> p = std::minmax(a, b);
assert(&p.first == &x);
assert(&p.second == &y);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, x, y);
test(y, x, y, x);
}
{
int x = 0;
int y = 1;
test(x, y, x, y);
test(y, x, x, y);
}
{
int x = 1;
int y = 0;
test(x, y, y, x);
test(y, x, y, x);
}
}

View File

@@ -0,0 +1,50 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, StrictWeakOrder<auto, T> Compare>
// requires !SameType<T, Compare> && CopyConstructible<Compare>
// pair<const T&, const T&>
// minmax(const T& a, const T& b, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
template <class T, class C>
void
test(const T& a, const T& b, C c, const T& x, const T& y)
{
std::pair<const T&, const T&> p = std::minmax(a, b, c);
assert(&p.first == &x);
assert(&p.second == &y);
}
int main()
{
{
int x = 0;
int y = 0;
test(x, y, std::greater<int>(), x, y);
test(y, x, std::greater<int>(), y, x);
}
{
int x = 0;
int y = 1;
test(x, y, std::greater<int>(), x, y);
test(y, x, std::greater<int>(), x, y);
}
{
int x = 1;
int y = 0;
test(x, y, std::greater<int>(), y, x);
test(y, x, std::greater<int>(), y, x);
}
}

View File

@@ -0,0 +1,83 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter>
// requires LessThanComparable<Iter::value_type>
// pair<Iter, Iter>
// minmax_element(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
std::pair<Iter, Iter> p = std::minmax_element(first, last);
if (first != last)
{
for (Iter j = first; j != last; ++j)
{
assert(!(*j < *p.first));
assert(!(*p.second < *j));
}
}
else
{
assert(p.first == last);
assert(p.second == last);
}
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
{
const unsigned N = 100;
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = 5;
std::random_shuffle(a, a+N);
std::pair<Iter, Iter> p = std::minmax_element(Iter(a), Iter(a+N));
assert(base(p.first) == a);
assert(base(p.second) == a+N-1);
delete [] a;
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,88 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// pair<Iter, Iter>
// minmax_element(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
template <class Iter>
void
test(Iter first, Iter last)
{
typedef std::greater<int> Compare;
Compare comp;
std::pair<Iter, Iter> p = std::minmax_element(first, last, comp);
if (first != last)
{
for (Iter j = first; j != last; ++j)
{
assert(!comp(*j, *p.first));
assert(!comp(*p.second, *j));
}
}
else
{
assert(p.first == last);
assert(p.second == last);
}
}
template <class Iter>
void
test(unsigned N)
{
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = i;
std::random_shuffle(a, a+N);
test(Iter(a), Iter(a+N));
delete [] a;
}
template <class Iter>
void
test()
{
test<Iter>(0);
test<Iter>(1);
test<Iter>(2);
test<Iter>(3);
test<Iter>(10);
test<Iter>(1000);
{
const unsigned N = 100;
int* a = new int[N];
for (int i = 0; i < N; ++i)
a[i] = 5;
std::random_shuffle(a, a+N);
typedef std::greater<int> Compare;
Compare comp;
std::pair<Iter, Iter> p = std::minmax_element(Iter(a), Iter(a+N), comp);
assert(base(p.first) == a);
assert(base(p.second) == a+N-1);
delete [] a;
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T>
// pair<const T&, const T&>
// minmax(initializer_list<T> t);
#include <algorithm>
#include <cassert>
#error minmax(initializer_list<T> t) is not implemented
int main()
{
}

View File

@@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<class T, class Compare>
// pair<const T&, const T&>
// minmax(initializer_list<T> t, Compare comp);
#include <algorithm>
#include <cassert>
#error minmax(initializer_list<T> t, Compare comp) is not implemented
int main()
{
}

View File

@@ -0,0 +1,62 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// nth_element(Iter first, Iter nth, Iter last);
#include <algorithm>
#include <cassert>
void
test_one(unsigned N, unsigned M)
{
assert(N != 0);
assert(M < N);
int* array = new int[N];
for (int i = 0; i < N; ++i)
array[i] = i;
std::random_shuffle(array, array+N);
std::nth_element(array, array+M, array+N);
assert(array[M] == M);
delete [] array;
}
void
test(unsigned N)
{
test_one(N, 0);
test_one(N, 1);
test_one(N, 2);
test_one(N, 3);
test_one(N, N/2-1);
test_one(N, N/2);
test_one(N, N/2+1);
test_one(N, N-3);
test_one(N, N-2);
test_one(N, N-1);
}
int main()
{
int d = 0;
std::nth_element(&d, &d, &d);
assert(d == 0);
test(256);
test(257);
test(499);
test(500);
test(997);
test(1000);
test(1009);
}

View File

@@ -0,0 +1,85 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// void
// nth_element(Iter first, Iter nth, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void
test_one(unsigned N, unsigned M)
{
assert(N != 0);
assert(M < N);
int* array = new int[N];
for (int i = 0; i < N; ++i)
array[i] = i;
std::random_shuffle(array, array+N);
std::nth_element(array, array+M, array+N, std::greater<int>());
assert(array[M] == N-M-1);
delete [] array;
}
void
test(unsigned N)
{
test_one(N, 0);
test_one(N, 1);
test_one(N, 2);
test_one(N, 3);
test_one(N, N/2-1);
test_one(N, N/2);
test_one(N, N/2+1);
test_one(N, N-3);
test_one(N, N-2);
test_one(N, N-1);
}
int main()
{
int d = 0;
std::nth_element(&d, &d, &d);
assert(d == 0);
test(256);
test(257);
test(499);
test(500);
test(997);
test(1000);
test(1009);
#ifdef _LIBCPP_MOVE
{
std::vector<std::unique_ptr<int> > v(1000);
for (int i = 0; i < v.size(); ++i)
v[i].reset(new int(i));
std::nth_element(v.begin(), v.begin() + v.size()/2, v.end(), indirect_less());
assert(*v[v.size()/2] == v.size()/2);
}
#endif
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// bool
// next_permutation(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
#include <cstdio>
int factorial(int x)
{
int r = 1;
for (; x; --x)
r *= x;
return r;
}
template <class Iter>
void
test()
{
int ia[] = {1, 2, 3, 4, 5, 6};
const int sa = sizeof(ia)/sizeof(ia[0]);
int prev[sa];
for (int e = 0; e <= sa; ++e)
{
int count = 0;
bool x;
do
{
std::copy(ia, ia+e, prev);
x = std::next_permutation(Iter(ia), Iter(ia+e));
if (e > 1)
{
if (x)
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e));
else
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e));
}
++count;
} while (x);
assert(count == factorial(e));
}
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}

View File

@@ -0,0 +1,68 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// bool
// next_permutation(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
#include <cstdio>
int factorial(int x)
{
int r = 1;
for (; x; --x)
r *= x;
return r;
}
template <class Iter>
void
test()
{
typedef std::greater<int> C;
int ia[] = {6, 5, 4, 3, 2, 1};
const int sa = sizeof(ia)/sizeof(ia[0]);
int prev[sa];
for (int e = 0; e <= sa; ++e)
{
int count = 0;
bool x;
do
{
std::copy(ia, ia+e, prev);
x = std::next_permutation(Iter(ia), Iter(ia+e), C());
if (e > 1)
{
if (x)
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e, C()));
else
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e, C()));
}
++count;
} while (x);
assert(count == factorial(e));
}
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}

View File

@@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// bool
// prev_permutation(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../iterators.h"
#include <cstdio>
int factorial(int x)
{
int r = 1;
for (; x; --x)
r *= x;
return r;
}
template <class Iter>
void
test()
{
int ia[] = {6, 5, 4, 3, 2, 1};
const int sa = sizeof(ia)/sizeof(ia[0]);
int prev[sa];
for (int e = 0; e <= sa; ++e)
{
int count = 0;
bool x;
do
{
std::copy(ia, ia+e, prev);
x = std::prev_permutation(Iter(ia), Iter(ia+e));
if (e > 1)
{
if (x)
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e));
else
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e));
}
++count;
} while (x);
assert(count == factorial(e));
}
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}

View File

@@ -0,0 +1,68 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<BidirectionalIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// bool
// prev_permutation(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../iterators.h"
#include <cstdio>
int factorial(int x)
{
int r = 1;
for (; x; --x)
r *= x;
return r;
}
template <class Iter>
void
test()
{
typedef std::greater<int> C;
int ia[] = {1, 2, 3, 4, 5, 6};
const int sa = sizeof(ia)/sizeof(ia[0]);
int prev[sa];
for (int e = 0; e <= sa; ++e)
{
int count = 0;
bool x;
do
{
std::copy(ia, ia+e, prev);
x = std::prev_permutation(Iter(ia), Iter(ia+e), C());
if (e > 1)
{
if (x)
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e, C()));
else
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e, C()));
}
++count;
} while (x);
assert(count == factorial(e));
}
}
int main()
{
test<bidirectional_iterator<int*> >();
test<random_access_iterator<int*> >();
test<int*>();
}

View File

@@ -0,0 +1,85 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator Iter1, InputIterator Iter2>
// requires HasLess<Iter1::value_type, Iter2::value_type>
// && HasLess<Iter2::value_type, Iter1::value_type>
// bool
// includes(Iter1 first1, Iter1 last1, Iter2 first2, Iter2 last2);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const unsigned sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4};
const unsigned sb = sizeof(ib)/sizeof(ib[0]);
int ic[] = {1, 2};
const unsigned sc = sizeof(ic)/sizeof(ic[0]);
int id[] = {3, 3, 3, 3};
const unsigned sd = sizeof(id)/sizeof(id[0]);
assert(std::includes(Iter1(ia), Iter1(ia), Iter2(ib), Iter2(ib)));
assert(!std::includes(Iter1(ia), Iter1(ia), Iter2(ib), Iter2(ib+1)));
assert(std::includes(Iter1(ia), Iter1(ia+1), Iter2(ib), Iter2(ib)));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(ia), Iter2(ia+sa)));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(ib), Iter2(ib+sb)));
assert(!std::includes(Iter1(ib), Iter1(ib+sb), Iter2(ia), Iter2(ia+sa)));
assert(std::includes(Iter1(ia), Iter1(ia+2), Iter2(ic), Iter2(ic+2)));
assert(!std::includes(Iter1(ia), Iter1(ia+2), Iter2(ib), Iter2(ib+2)));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+1)));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+2)));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+3)));
assert(!std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+4)));
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*> >();
test<input_iterator<const int*>, forward_iterator<const int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*> >();
test<input_iterator<const int*>, const int*>();
test<forward_iterator<const int*>, input_iterator<const int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*> >();
test<forward_iterator<const int*>, const int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*> >();
test<bidirectional_iterator<const int*>, const int*>();
test<random_access_iterator<const int*>, input_iterator<const int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
test<random_access_iterator<const int*>, const int*>();
test<const int*, input_iterator<const int*> >();
test<const int*, forward_iterator<const int*> >();
test<const int*, bidirectional_iterator<const int*> >();
test<const int*, random_access_iterator<const int*> >();
test<const int*, const int*>();
}

View File

@@ -0,0 +1,86 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator Iter1, InputIterator Iter2, typename Compare>
// requires Predicate<Compare, Iter1::value_type, Iter2::value_type>
// && Predicate<Compare, Iter2::value_type, Iter1::value_type>
// bool
// includes(Iter1 first1, Iter1 last1, Iter2 first2, Iter2 last2, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const unsigned sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4};
const unsigned sb = sizeof(ib)/sizeof(ib[0]);
int ic[] = {1, 2};
const unsigned sc = sizeof(ic)/sizeof(ic[0]);
int id[] = {3, 3, 3, 3};
const unsigned sd = sizeof(id)/sizeof(id[0]);
assert(std::includes(Iter1(ia), Iter1(ia), Iter2(ib), Iter2(ib), std::less<int>()));
assert(!std::includes(Iter1(ia), Iter1(ia), Iter2(ib), Iter2(ib+1), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+1), Iter2(ib), Iter2(ib), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(ia), Iter2(ia+sa), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(ib), Iter2(ib+sb), std::less<int>()));
assert(!std::includes(Iter1(ib), Iter1(ib+sb), Iter2(ia), Iter2(ia+sa), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+2), Iter2(ic), Iter2(ic+2), std::less<int>()));
assert(!std::includes(Iter1(ia), Iter1(ia+2), Iter2(ib), Iter2(ib+2), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+1), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+2), std::less<int>()));
assert(std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+3), std::less<int>()));
assert(!std::includes(Iter1(ia), Iter1(ia+sa), Iter2(id), Iter2(id+4), std::less<int>()));
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*> >();
test<input_iterator<const int*>, forward_iterator<const int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*> >();
test<input_iterator<const int*>, const int*>();
test<forward_iterator<const int*>, input_iterator<const int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*> >();
test<forward_iterator<const int*>, const int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*> >();
test<bidirectional_iterator<const int*>, const int*>();
test<random_access_iterator<const int*>, input_iterator<const int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
test<random_access_iterator<const int*>, const int*>();
test<const int*, input_iterator<const int*> >();
test<const int*, forward_iterator<const int*> >();
test<const int*, bidirectional_iterator<const int*> >();
test<const int*, random_access_iterator<const int*> >();
test<const int*, const int*>();
}

View File

@@ -0,0 +1,12 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
int main()
{
}

View File

@@ -0,0 +1,200 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && HasLess<InIter2::value_type, InIter1::value_type>
// && HasLess<InIter1::value_type, InIter2::value_type>
// OutIter
// set_difference(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
// OutIter result);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 3, 3, 3, 4, 4};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_difference(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
int irr[] = {6};
const int srr = sizeof(irr)/sizeof(irr[0]);
ce = std::set_difference(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic));
assert(base(ce) - ic == srr);
assert(std::lexicographical_compare(ic, base(ce), irr, irr+srr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,202 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
// CopyConstructible Compare>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && Predicate<Compare, InIter1::value_type, InIter2::value_type>
// && Predicate<Compare, InIter2::value_type, InIter1::value_type>
// OutIter
// set_difference(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
// OutIter result, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 3, 3, 3, 4, 4};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_difference(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
int irr[] = {6};
const int srr = sizeof(irr)/sizeof(irr[0]);
ce = std::set_difference(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic), std::less<int>());
assert(base(ce) - ic == srr);
assert(std::lexicographical_compare(ic, base(ce), irr, irr+srr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,198 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && HasLess<InIter2::value_type, InIter1::value_type>
// && HasLess<InIter1::value_type, InIter2::value_type>
// OutIter
// set_intersection(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
// OutIter result);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {2, 4, 4};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_intersection(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_intersection(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,200 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
// CopyConstructible Compare>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && Predicate<Compare, InIter1::value_type, InIter2::value_type>
// && Predicate<Compare, InIter2::value_type, InIter1::value_type>
// OutIter
// set_intersection(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
// OutIter result, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {2, 4, 4};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_intersection(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_intersection(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,199 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && HasLess<InIter2::value_type, InIter1::value_type>
// && HasLess<InIter1::value_type, InIter2::value_type>
// OutIter
// set_symmetric_difference(InIter1 first1, InIter1 last1,
// InIter2 first2, InIter2 last2,
// OutIter result);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 3, 3, 3, 4, 4, 6};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_symmetric_difference(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_symmetric_difference(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,203 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
// CopyConstructible Compare>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && Predicate<Compare, InIter1::value_type, InIter2::value_type>
// && Predicate<Compare, InIter2::value_type, InIter1::value_type>
// OutIter
// set_symmetric_difference(InIter1 first1, InIter1 last1,
// InIter2 first2, InIter2 last2,
// OutIter result, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 3, 3, 3, 4, 4, 6};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_symmetric_difference(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb),
OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_symmetric_difference(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa),
OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,198 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && HasLess<InIter2::value_type, InIter1::value_type>
// && HasLess<InIter1::value_type, InIter2::value_type>
// OutIter
// set_union(InIter1 first1, InIter1 last1,
// InIter2 first2, InIter2 last2, OutIter result);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 6};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_union(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_union(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic));
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,200 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter1, InputIterator InIter2, typename OutIter,
// CopyConstructible Compare>
// requires OutputIterator<OutIter, InIter1::reference>
// && OutputIterator<OutIter, InIter2::reference>
// && Predicate<Compare, InIter1::value_type, InIter2::value_type>
// && Predicate<Compare, InIter2::value_type, InIter1::value_type>
// OutIter
// set_union(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2,
// OutIter result, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter1, class Iter2, class OutIter>
void
test()
{
int ia[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int sa = sizeof(ia)/sizeof(ia[0]);
int ib[] = {2, 4, 4, 6};
const int sb = sizeof(ib)/sizeof(ib[0]);
int ic[20];
int ir[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 6};
const int sr = sizeof(ir)/sizeof(ir[0]);
OutIter ce = std::set_union(Iter1(ia), Iter1(ia+sa),
Iter2(ib), Iter2(ib+sb), OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
ce = std::set_union(Iter1(ib), Iter1(ib+sb),
Iter2(ia), Iter2(ia+sa), OutIter(ic), std::less<int>());
assert(base(ce) - ic == sr);
assert(std::lexicographical_compare(ic, base(ce), ir, ir+sr) == 0);
}
int main()
{
test<input_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, input_iterator<const int*>, int*>();
test<input_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, forward_iterator<const int*>, int*>();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<input_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<input_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<input_iterator<const int*>, const int*, output_iterator<int*> >();
test<input_iterator<const int*>, const int*, forward_iterator<int*> >();
test<input_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<input_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<input_iterator<const int*>, const int*, int*>();
test<forward_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, input_iterator<const int*>, int*>();
test<forward_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, forward_iterator<const int*>, int*>();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<forward_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<forward_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<forward_iterator<const int*>, const int*, output_iterator<int*> >();
test<forward_iterator<const int*>, const int*, forward_iterator<int*> >();
test<forward_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<forward_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<forward_iterator<const int*>, const int*, int*>();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, input_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, forward_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<bidirectional_iterator<const int*>, const int*, output_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, forward_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<bidirectional_iterator<const int*>, const int*, int*>();
test<random_access_iterator<const int*>, input_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, input_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, forward_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, forward_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, bidirectional_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, output_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, forward_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, random_access_iterator<const int*>, int*>();
test<random_access_iterator<const int*>, const int*, output_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, forward_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, bidirectional_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, random_access_iterator<int*> >();
test<random_access_iterator<const int*>, const int*, int*>();
test<const int*, input_iterator<const int*>, output_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, input_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, input_iterator<const int*>, int*>();
test<const int*, forward_iterator<const int*>, output_iterator<int*> >();
test<const int*, forward_iterator<const int*>, forward_iterator<int*> >();
test<const int*, forward_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, forward_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, forward_iterator<const int*>, int*>();
test<const int*, bidirectional_iterator<const int*>, output_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, forward_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, bidirectional_iterator<const int*>, int*>();
test<const int*, random_access_iterator<const int*>, output_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, forward_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, bidirectional_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, random_access_iterator<int*> >();
test<const int*, random_access_iterator<const int*>, int*>();
test<const int*, const int*, output_iterator<int*> >();
test<const int*, const int*, forward_iterator<int*> >();
test<const int*, const int*, bidirectional_iterator<int*> >();
test<const int*, const int*, random_access_iterator<int*> >();
test<const int*, const int*, int*>();
}

View File

@@ -0,0 +1,183 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter>
// requires LessThanComparable<Iter::value_type>
// bool
// is_sorted(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test()
{
{
int a[] = {0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a)));
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {0, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa)));
}
{
int a[] = {1, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa)));
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,184 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// bool
// is_sorted(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test()
{
{
int a[] = {0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a)));
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {0, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(!std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
{
int a[] = {1, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted(Iter(a), Iter(a+sa), std::greater<int>()));
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,183 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter>
// requires LessThanComparable<Iter::value_type>
// Iter
// is_sorted_until(Iter first, Iter last);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test()
{
{
int a[] = {0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a)) == Iter(a));
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+3));
}
{
int a[] = {0, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {0, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {0, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {0, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+3));
}
{
int a[] = {0, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
{
int a[] = {1, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+1));
}
{
int a[] = {1, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {1, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+2));
}
{
int a[] = {1, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+3));
}
{
int a[] = {1, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa)) == Iter(a+sa));
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,184 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<ForwardIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires CopyConstructible<Compare>
// Iter
// is_sorted_until(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test()
{
{
int a[] = {0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a), std::greater<int>()) == Iter(a));
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {0, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+3));
}
{
int a[] = {0, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {0, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {0, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {0, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {0, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {0, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+1));
}
{
int a[] = {1, 0, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 0, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+3));
}
{
int a[] = {1, 0, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {1, 0, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+2));
}
{
int a[] = {1, 1, 0, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 1, 0, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+3));
}
{
int a[] = {1, 1, 1, 0};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
{
int a[] = {1, 1, 1, 1};
unsigned sa = sizeof(a) / sizeof(a[0]);
assert(std::is_sorted_until(Iter(a), Iter(a+sa), std::greater<int>()) == Iter(a+sa));
}
}
int main()
{
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,12 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
int main()
{
}

View File

@@ -0,0 +1,86 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter, RandomAccessIterator RAIter>
// requires ShuffleIterator<RAIter>
// && OutputIterator<RAIter, InIter::reference>
// && HasLess<InIter::value_type, RAIter::value_type>
// && LessThanComparable<RAIter::value_type>
// RAIter
// partial_sort_copy(InIter first, InIter last, RAIter result_first, RAIter result_last);
#include <algorithm>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test_larger_sorts(unsigned N, unsigned M)
{
int* input = new int[N];
int* output = new int[M];
for (int i = 0; i < N; ++i)
input[i] = i;
std::random_shuffle(input, input+N);
int* r = std::partial_sort_copy(Iter(input), Iter(input+N), output, output+M);
int* e = output + std::min(N, M);
assert(r == e);
int i = 0;
for (int* x = output; x < e; ++x, ++i)
assert(*x == i);
delete [] output;
delete [] input;
}
template <class Iter>
void
test_larger_sorts(unsigned N)
{
test_larger_sorts<Iter>(N, 0);
test_larger_sorts<Iter>(N, 1);
test_larger_sorts<Iter>(N, 2);
test_larger_sorts<Iter>(N, 3);
test_larger_sorts<Iter>(N, N/2-1);
test_larger_sorts<Iter>(N, N/2);
test_larger_sorts<Iter>(N, N/2+1);
test_larger_sorts<Iter>(N, N-2);
test_larger_sorts<Iter>(N, N-1);
test_larger_sorts<Iter>(N, N);
test_larger_sorts<Iter>(N, N+1000);
}
template <class Iter>
void
test()
{
test_larger_sorts<Iter>(0, 100);
test_larger_sorts<Iter>(10);
test_larger_sorts<Iter>(256);
test_larger_sorts<Iter>(257);
test_larger_sorts<Iter>(499);
test_larger_sorts<Iter>(500);
test_larger_sorts<Iter>(997);
test_larger_sorts<Iter>(1000);
test_larger_sorts<Iter>(1009);
}
int main()
{
int i = 0;
std::partial_sort_copy(&i, &i, &i, &i+5);
assert(i == 0);
test<input_iterator<const int*> >();
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,90 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<InputIterator InIter, RandomAccessIterator RAIter, class Compare>
// requires ShuffleIterator<RAIter>
// && OutputIterator<RAIter, InIter::reference>
// && Predicate<Compare, InIter::value_type, RAIter::value_type>
// && StrictWeakOrder<Compare, RAIter::value_type>}
// && CopyConstructible<Compare>
// RAIter
// partial_sort_copy(InIter first, InIter last,
// RAIter result_first, RAIter result_last, Compare comp);
#include <algorithm>
#include <functional>
#include <cassert>
#include "../../../iterators.h"
template <class Iter>
void
test_larger_sorts(unsigned N, unsigned M)
{
int* input = new int[N];
int* output = new int[M];
for (int i = 0; i < N; ++i)
input[i] = i;
std::random_shuffle(input, input+N);
int* r = std::partial_sort_copy(Iter(input), Iter(input+N), output, output+M,
std::greater<int>());
int* e = output + std::min(N, M);
assert(r == e);
int i = 0;
for (int* x = output; x < e; ++x, ++i)
assert(*x == N-i-1);
delete [] output;
delete [] input;
}
template <class Iter>
void
test_larger_sorts(unsigned N)
{
test_larger_sorts<Iter>(N, 0);
test_larger_sorts<Iter>(N, 1);
test_larger_sorts<Iter>(N, 2);
test_larger_sorts<Iter>(N, 3);
test_larger_sorts<Iter>(N, N/2-1);
test_larger_sorts<Iter>(N, N/2);
test_larger_sorts<Iter>(N, N/2+1);
test_larger_sorts<Iter>(N, N-2);
test_larger_sorts<Iter>(N, N-1);
test_larger_sorts<Iter>(N, N);
test_larger_sorts<Iter>(N, N+1000);
}
template <class Iter>
void
test()
{
test_larger_sorts<Iter>(0, 100);
test_larger_sorts<Iter>(10);
test_larger_sorts<Iter>(256);
test_larger_sorts<Iter>(257);
test_larger_sorts<Iter>(499);
test_larger_sorts<Iter>(500);
test_larger_sorts<Iter>(997);
test_larger_sorts<Iter>(1000);
test_larger_sorts<Iter>(1009);
}
int main()
{
int i = 0;
std::partial_sort_copy(&i, &i, &i, &i+5);
assert(i == 0);
test<input_iterator<const int*> >();
test<forward_iterator<const int*> >();
test<bidirectional_iterator<const int*> >();
test<random_access_iterator<const int*> >();
test<const int*>();
}

View File

@@ -0,0 +1,63 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// partial_sort(Iter first, Iter middle, Iter last);
#include <algorithm>
#include <cassert>
void
test_larger_sorts(unsigned N, unsigned M)
{
assert(N != 0);
int* array = new int[N];
for (int i = 0; i < N; ++i)
array[i] = i;
std::random_shuffle(array, array+N);
std::partial_sort(array, array+M, array+N);
for (int i = 0; i < M; ++i)
assert(array[i] == i);
delete [] array;
}
void
test_larger_sorts(unsigned N)
{
test_larger_sorts(N, 0);
test_larger_sorts(N, 1);
test_larger_sorts(N, 2);
test_larger_sorts(N, 3);
test_larger_sorts(N, N/2-1);
test_larger_sorts(N, N/2);
test_larger_sorts(N, N/2+1);
test_larger_sorts(N, N-2);
test_larger_sorts(N, N-1);
test_larger_sorts(N, N);
}
int main()
{
int i = 0;
std::partial_sort(&i, &i, &i);
assert(i == 0);
test_larger_sorts(10);
test_larger_sorts(256);
test_larger_sorts(257);
test_larger_sorts(499);
test_larger_sorts(500);
test_larger_sorts(997);
test_larger_sorts(1000);
test_larger_sorts(1009);
}

View File

@@ -0,0 +1,87 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// void
// partial_sort(Iter first, Iter middle, Iter last, Compare comp);
#include <algorithm>
#include <vector>
#include <functional>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
void
test_larger_sorts(unsigned N, unsigned M)
{
assert(N != 0);
int* array = new int[N];
for (int i = 0; i < N; ++i)
array[i] = i;
std::random_shuffle(array, array+N);
std::partial_sort(array, array+M, array+N, std::greater<int>());
for (int i = 0; i < M; ++i)
assert(array[i] == N-i-1);
delete [] array;
}
void
test_larger_sorts(unsigned N)
{
test_larger_sorts(N, 0);
test_larger_sorts(N, 1);
test_larger_sorts(N, 2);
test_larger_sorts(N, 3);
test_larger_sorts(N, N/2-1);
test_larger_sorts(N, N/2);
test_larger_sorts(N, N/2+1);
test_larger_sorts(N, N-2);
test_larger_sorts(N, N-1);
test_larger_sorts(N, N);
}
int main()
{
int i = 0;
std::partial_sort(&i, &i, &i);
assert(i == 0);
test_larger_sorts(10);
test_larger_sorts(256);
test_larger_sorts(257);
test_larger_sorts(499);
test_larger_sorts(500);
test_larger_sorts(997);
test_larger_sorts(1000);
test_larger_sorts(1009);
#ifdef _LIBCPP_MOVE
{
std::vector<std::unique_ptr<int> > v(1000);
for (int i = 0; i < v.size(); ++i)
v[i].reset(new int(i));
std::partial_sort(v.begin(), v.begin() + v.size()/2, v.end(), indirect_less());
for (int i = 0; i < v.size()/2; ++i)
assert(*v[i] == i);
}
#endif
}

View File

@@ -0,0 +1,150 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// sort(Iter first, Iter last);
#include <algorithm>
#include <cassert>
template <class RI>
void
test_sort_helper(RI f, RI l)
{
typedef typename std::iterator_traits<RI>::value_type value_type;
if (f != l)
{
long len = l - f;
value_type* save(new value_type[len]);
do
{
std::copy(f, l, save);
std::sort(save, save+len);
assert(std::is_sorted(save, save+len));
} while (std::next_permutation(f, l));
delete [] save;
}
}
template <class RI>
void
test_sort_driver_driver(RI f, RI l, int start, RI real_last)
{
for (RI i = l; i > f + start;)
{
*--i = start;
if (f == i)
{
test_sort_helper(f, real_last);
}
if (start > 0)
test_sort_driver_driver(f, i, start-1, real_last);
}
}
template <class RI>
void
test_sort_driver(RI f, RI l, int start)
{
test_sort_driver_driver(f, l, start, l);
}
template <unsigned sa>
void
test_sort_()
{
int ia[sa];
for (int i = 0; i < sa; ++i)
{
test_sort_driver(ia, ia+sa, i);
}
}
void
test_larger_sorts(unsigned N, unsigned M)
{
assert(N != 0);
assert(M != 0);
// create array length N filled with M different numbers
int* array = new int[N];
int x = 0;
for (int i = 0; i < N; ++i)
{
array[i] = x;
if (++x == M)
x = 0;
}
// test saw tooth pattern
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test random pattern
std::random_shuffle(array, array+N);
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test sorted pattern
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test reverse sorted pattern
std::reverse(array, array+N);
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test swap ranges 2 pattern
std::swap_ranges(array, array+N/2, array+N/2);
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test reverse swap ranges 2 pattern
std::reverse(array, array+N);
std::swap_ranges(array, array+N/2, array+N/2);
std::sort(array, array+N);
assert(std::is_sorted(array, array+N));
delete [] array;
}
void
test_larger_sorts(unsigned N)
{
test_larger_sorts(N, 1);
test_larger_sorts(N, 2);
test_larger_sorts(N, 3);
test_larger_sorts(N, N/2-1);
test_larger_sorts(N, N/2);
test_larger_sorts(N, N/2+1);
test_larger_sorts(N, N-2);
test_larger_sorts(N, N-1);
test_larger_sorts(N, N);
}
int main()
{
// test null range
int d = 0;
std::sort(&d, &d);
// exhaustively test all possibilities up to length 8
test_sort_<1>();
test_sort_<2>();
test_sort_<3>();
test_sort_<4>();
test_sort_<5>();
test_sort_<6>();
test_sort_<7>();
test_sort_<8>();
test_larger_sorts(256);
test_larger_sorts(257);
test_larger_sorts(499);
test_larger_sorts(500);
test_larger_sorts(997);
test_larger_sorts(1000);
test_larger_sorts(1009);
}

View File

@@ -0,0 +1,58 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// void
// sort(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
int main()
{
{
std::vector<int> v(1000);
for (int i = 0; i < v.size(); ++i)
v[i] = i;
std::sort(v.begin(), v.end(), std::greater<int>());
std::reverse(v.begin(), v.end());
assert(std::is_sorted(v.begin(), v.end()));
}
#ifdef _LIBCPP_MOVE
{
std::vector<std::unique_ptr<int> > v(1000);
for (int i = 0; i < v.size(); ++i)
v[i].reset(new int(i));
std::sort(v.begin(), v.end(), indirect_less());
assert(std::is_sorted(v.begin(), v.end(), indirect_less()));
assert(*v[0] == 0);
assert(*v[1] == 1);
assert(*v[2] == 2);
}
#endif
}

View File

@@ -0,0 +1,150 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter>
// requires ShuffleIterator<Iter>
// && LessThanComparable<Iter::value_type>
// void
// stable_sort(Iter first, Iter last);
#include <algorithm>
#include <cassert>
template <class RI>
void
test_sort_helper(RI f, RI l)
{
typedef typename std::iterator_traits<RI>::value_type value_type;
if (f != l)
{
long len = l - f;
value_type* save(new value_type[len]);
do
{
std::copy(f, l, save);
std::stable_sort(save, save+len);
assert(std::is_sorted(save, save+len));
} while (std::next_permutation(f, l));
delete [] save;
}
}
template <class RI>
void
test_sort_driver_driver(RI f, RI l, int start, RI real_last)
{
for (RI i = l; i > f + start;)
{
*--i = start;
if (f == i)
{
test_sort_helper(f, real_last);
}
if (start > 0)
test_sort_driver_driver(f, i, start-1, real_last);
}
}
template <class RI>
void
test_sort_driver(RI f, RI l, int start)
{
test_sort_driver_driver(f, l, start, l);
}
template <unsigned sa>
void
test_sort_()
{
int ia[sa];
for (int i = 0; i < sa; ++i)
{
test_sort_driver(ia, ia+sa, i);
}
}
void
test_larger_sorts(unsigned N, unsigned M)
{
assert(N != 0);
assert(M != 0);
// create array length N filled with M different numbers
int* array = new int[N];
int x = 0;
for (int i = 0; i < N; ++i)
{
array[i] = x;
if (++x == M)
x = 0;
}
// test saw tooth pattern
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test random pattern
std::random_shuffle(array, array+N);
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test sorted pattern
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test reverse sorted pattern
std::reverse(array, array+N);
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test swap ranges 2 pattern
std::swap_ranges(array, array+N/2, array+N/2);
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
// test reverse swap ranges 2 pattern
std::reverse(array, array+N);
std::swap_ranges(array, array+N/2, array+N/2);
std::stable_sort(array, array+N);
assert(std::is_sorted(array, array+N));
delete [] array;
}
void
test_larger_sorts(unsigned N)
{
test_larger_sorts(N, 1);
test_larger_sorts(N, 2);
test_larger_sorts(N, 3);
test_larger_sorts(N, N/2-1);
test_larger_sorts(N, N/2);
test_larger_sorts(N, N/2+1);
test_larger_sorts(N, N-2);
test_larger_sorts(N, N-1);
test_larger_sorts(N, N);
}
int main()
{
// test null range
int d = 0;
std::stable_sort(&d, &d);
// exhaustively test all possibilities up to length 8
test_sort_<1>();
test_sort_<2>();
test_sort_<3>();
test_sort_<4>();
test_sort_<5>();
test_sort_<6>();
test_sort_<7>();
test_sort_<8>();
test_larger_sorts(256);
test_larger_sorts(257);
test_larger_sorts(499);
test_larger_sorts(500);
test_larger_sorts(997);
test_larger_sorts(1000);
test_larger_sorts(1009);
}

View File

@@ -0,0 +1,83 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <algorithm>
// template<RandomAccessIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
// requires ShuffleIterator<Iter>
// && CopyConstructible<Compare>
// void
// stable_sort(Iter first, Iter last, Compare comp);
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#ifdef _LIBCPP_MOVE
#include <memory>
struct indirect_less
{
template <class P>
bool operator()(const P& x, const P& y)
{return *x < *y;}
};
#endif
struct first_only
{
bool operator()(const std::pair<int, int>& x, const std::pair<int, int>& y)
{
return x.first < y.first;
}
};
void test()
{
typedef std::pair<int, int> P;
const int N = 1000;
const int M = 10;
std::vector<P> v(N);
int x = 0;
int ver = 0;
for (int i = 0; i < N; ++i)
{
v[i] = P(x, ver);
if (++x == M)
{
x = 0;
++ver;
}
}
for (int i = 0; i < N - M; i += M)
{
std::random_shuffle(v.begin() + i, v.begin() + i + M);
}
std::stable_sort(v.begin(), v.end(), first_only());
assert(std::is_sorted(v.begin(), v.end()));
}
int main()
{
test();
#ifdef _LIBCPP_MOVE
{
std::vector<std::unique_ptr<int> > v(1000);
for (int i = 0; i < v.size(); ++i)
v[i].reset(new int(i));
std::stable_sort(v.begin(), v.end(), indirect_less());
assert(std::is_sorted(v.begin(), v.end(), indirect_less()));
assert(*v[0] == 0);
assert(*v[1] == 1);
assert(*v[2] == 2);
}
#endif
}

View File

@@ -0,0 +1,12 @@
//===----------------------------------------------------------------------===//
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
int main()
{
}