upper_bound_comp.pass.cpp revision eb564e76cc3904d811c981a50ecce0659f444cc9
1f461a8fdf642ba713dcdfb217534652df1eac278krajcevski//===----------------------------------------------------------------------===// 2f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// 3f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// The LLVM Compiler Infrastructure 4f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// 5f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// This file is distributed under the University of Illinois Open Source 6f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// License. See LICENSE.TXT for details. 7f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// 830ba436f04e61d4505fb854d5fc56079636e0788joshualitt//===----------------------------------------------------------------------===// 9f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 10f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// <algorithm> 11b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt 12f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// template<ForwardIterator Iter, class T, Predicate<auto, T, Iter::value_type> Compare> 13b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt// requires CopyConstructible<Compare> 14f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// Iter 15f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// upper_bound(Iter first, Iter last, const T& value, Compare comp); 16f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 17f461a8fdf642ba713dcdfb217534652df1eac278krajcevski#include <algorithm> 18f461a8fdf642ba713dcdfb217534652df1eac278krajcevski#include <functional> 19f461a8fdf642ba713dcdfb217534652df1eac278krajcevski#include <vector> 20f461a8fdf642ba713dcdfb217534652df1eac278krajcevski#include <cassert> 21b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt 22f461a8fdf642ba713dcdfb217534652df1eac278krajcevski#include "../../../iterators.h" 23b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt 24b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttemplate <class Iter, class T> 2555fad7af61c21d502acb9891d631e8aa29e3628cbsalomonvoid 26f461a8fdf642ba713dcdfb217534652df1eac278krajcevskitest(Iter first, Iter last, const T& value) 27f461a8fdf642ba713dcdfb217534652df1eac278krajcevski{ 28f461a8fdf642ba713dcdfb217534652df1eac278krajcevski Iter i = std::upper_bound(first, last, value, std::greater<int>()); 29f461a8fdf642ba713dcdfb217534652df1eac278krajcevski for (Iter j = first; j != i; ++j) 30f461a8fdf642ba713dcdfb217534652df1eac278krajcevski assert(!std::greater<int>()(value, *j)); 31b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt for (Iter j = i; j != last; ++j) 32f461a8fdf642ba713dcdfb217534652df1eac278krajcevski assert(std::greater<int>()(value, *j)); 33f461a8fdf642ba713dcdfb217534652df1eac278krajcevski} 34f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 35b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttemplate <class Iter> 36b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid 37f461a8fdf642ba713dcdfb217534652df1eac278krajcevskitest() 38f461a8fdf642ba713dcdfb217534652df1eac278krajcevski{ 39f461a8fdf642ba713dcdfb217534652df1eac278krajcevski const unsigned N = 1000; 40f461a8fdf642ba713dcdfb217534652df1eac278krajcevski const unsigned M = 10; 41f461a8fdf642ba713dcdfb217534652df1eac278krajcevski std::vector<int> v(N); 42f461a8fdf642ba713dcdfb217534652df1eac278krajcevski int x = 0; 43f461a8fdf642ba713dcdfb217534652df1eac278krajcevski for (int i = 0; i < v.size(); ++i) 44f461a8fdf642ba713dcdfb217534652df1eac278krajcevski { 45b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt v[i] = x; 46f461a8fdf642ba713dcdfb217534652df1eac278krajcevski if (++x == M) 47b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt x = 0; 48f461a8fdf642ba713dcdfb217534652df1eac278krajcevski } 49b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt std::sort(v.begin(), v.end(), std::greater<int>()); 50f461a8fdf642ba713dcdfb217534652df1eac278krajcevski for (x = 0; x <= M; ++x) 51f461a8fdf642ba713dcdfb217534652df1eac278krajcevski test(Iter(v.data()), Iter(v.data()+v.size()), x); 52f461a8fdf642ba713dcdfb217534652df1eac278krajcevski} 53f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 54f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiint main() 55f461a8fdf642ba713dcdfb217534652df1eac278krajcevski{ 56f461a8fdf642ba713dcdfb217534652df1eac278krajcevski int d[] = {3, 2, 1, 0}; 57f461a8fdf642ba713dcdfb217534652df1eac278krajcevski for (int* e = d; e <= d+4; ++e) 58b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt for (int x = -1; x <= 4; ++x) 59f461a8fdf642ba713dcdfb217534652df1eac278krajcevski test(d, e, x); 60b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt 61b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt test<forward_iterator<const int*> >(); 62b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt test<bidirectional_iterator<const int*> >(); 63b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt test<random_access_iterator<const int*> >(); 64f461a8fdf642ba713dcdfb217534652df1eac278krajcevski test<const int*>(); 65f461a8fdf642ba713dcdfb217534652df1eac278krajcevski} 66f461a8fdf642ba713dcdfb217534652df1eac278krajcevski