//===----------------------------------------------------------------------===// // // 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 // requires HasLess // Iter // upper_bound(Iter first, Iter last, const T& value); #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); for (Iter j = first; j != i; ++j) assert(!(value < *j)); for (Iter j = i; j != last; ++j) assert(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()); 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 >(); test >(); test >(); test(); }