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)