1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // template<ForwardIterator Iter, class T, CopyConstructible Compare>
13 // requires Predicate<Compare, T, Iter::value_type>
14 // && Predicate<Compare, Iter::value_type, T>
16 // equal_range(Iter first, Iter last, const T& value, Compare comp);
24 #include "test_iterators.h"
26 template <class Iter, class T>
28 test(Iter first, Iter last, const T& value)
30 std::pair<Iter, Iter> i = std::equal_range(first, last, value, std::greater<int>());
31 for (Iter j = first; j != i.first; ++j)
32 assert(std::greater<int>()(*j, value));
33 for (Iter j = i.first; j != last; ++j)
34 assert(!std::greater<int>()(*j, value));
35 for (Iter j = first; j != i.second; ++j)
36 assert(!std::greater<int>()(value, *j));
37 for (Iter j = i.second; j != last; ++j)
38 assert(std::greater<int>()(value, *j));
45 const unsigned N = 1000;
47 std::vector<int> v(N);
49 for (std::size_t i = 0; i < v.size(); ++i)
55 std::sort(v.begin(), v.end(), std::greater<int>());
56 for (x = 0; x <= M; ++x)
57 test(Iter(v.data()), Iter(v.data()+v.size()), x);
62 int d[] = {3, 2, 1, 0};
63 for (int* e = d; e <= d+4; ++e)
64 for (int x = -1; x <= 4; ++x)
67 test<forward_iterator<const int*> >();
68 test<bidirectional_iterator<const int*> >();
69 test<random_access_iterator<const int*> >();