upper_bound.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <algorithm> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template<ForwardIterator Iter, class T> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// requires HasLess<T, Iter::value_type> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Iter 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// upper_bound(Iter first, Iter last, const T& value); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert> 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "test_iterators.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class Iter, class T> 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test(Iter first, Iter last, const T& value) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Iter i = std::upper_bound(first, last, value); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (Iter j = first; j != i; ++j) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert(!(value < *j)); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (Iter j = i; j != last; ++j) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert(value < *j); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <class Iter> 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)test() 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const unsigned N = 1000; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const unsigned M = 10; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> v(N); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int x = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < v.size(); ++i) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) v[i] = x; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (++x == M) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x = 0; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::sort(v.begin(), v.end()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (x = 0; x <= M; ++x) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test(Iter(v.data()), Iter(v.data()+v.size()), x); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main() 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int d[] = {0, 1, 2, 3}; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int* e = d; e <= d+4; ++e) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int x = -1; x <= 4; ++x) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test(d, e, x); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test<forward_iterator<const int*> >(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test<bidirectional_iterator<const int*> >(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test<random_access_iterator<const int*> >(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test<const int*>(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)