//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template Compare> // requires CopyConstructible // Iter // upper_bound(Iter first, Iter last, const T& value, Compare comp); #include #include #include #include #include "test_iterators.h" template void test(Iter first, Iter last, const T& value) { Iter i = std::upper_bound(first, last, value, std::greater()); for (Iter j = first; j != i; ++j) assert(!std::greater()(value, *j)); for (Iter j = i; j != last; ++j) assert(std::greater()(value, *j)); } template void test() { const unsigned N = 1000; const unsigned M = 10; std::vector 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()); 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 >(); test >(); test >(); test(); }