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