lower_bound.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <set>
11
12// class set
13
14//       iterator lower_bound(const key_type& k);
15// const_iterator lower_bound(const key_type& k) const;
16
17#include <set>
18#include <cassert>
19
20int main()
21{
22    typedef int V;
23    typedef std::set<int> M;
24    {
25        typedef M::iterator R;
26        V ar[] =
27        {
28            5,
29            7,
30            9,
31            11,
32            13,
33            15,
34            17,
35            19
36        };
37        M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
38        R r = m.lower_bound(5);
39        assert(r == m.begin());
40        r = m.lower_bound(7);
41        assert(r == next(m.begin()));
42        r = m.lower_bound(9);
43        assert(r == next(m.begin(), 2));
44        r = m.lower_bound(11);
45        assert(r == next(m.begin(), 3));
46        r = m.lower_bound(13);
47        assert(r == next(m.begin(), 4));
48        r = m.lower_bound(15);
49        assert(r == next(m.begin(), 5));
50        r = m.lower_bound(17);
51        assert(r == next(m.begin(), 6));
52        r = m.lower_bound(19);
53        assert(r == next(m.begin(), 7));
54        r = m.lower_bound(4);
55        assert(r == next(m.begin(), 0));
56        r = m.lower_bound(6);
57        assert(r == next(m.begin(), 1));
58        r = m.lower_bound(8);
59        assert(r == next(m.begin(), 2));
60        r = m.lower_bound(10);
61        assert(r == next(m.begin(), 3));
62        r = m.lower_bound(12);
63        assert(r == next(m.begin(), 4));
64        r = m.lower_bound(14);
65        assert(r == next(m.begin(), 5));
66        r = m.lower_bound(16);
67        assert(r == next(m.begin(), 6));
68        r = m.lower_bound(18);
69        assert(r == next(m.begin(), 7));
70        r = m.lower_bound(20);
71        assert(r == next(m.begin(), 8));
72    }
73    {
74        typedef M::const_iterator R;
75        V ar[] =
76        {
77            5,
78            7,
79            9,
80            11,
81            13,
82            15,
83            17,
84            19
85        };
86        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
87        R r = m.lower_bound(5);
88        assert(r == m.begin());
89        r = m.lower_bound(7);
90        assert(r == next(m.begin()));
91        r = m.lower_bound(9);
92        assert(r == next(m.begin(), 2));
93        r = m.lower_bound(11);
94        assert(r == next(m.begin(), 3));
95        r = m.lower_bound(13);
96        assert(r == next(m.begin(), 4));
97        r = m.lower_bound(15);
98        assert(r == next(m.begin(), 5));
99        r = m.lower_bound(17);
100        assert(r == next(m.begin(), 6));
101        r = m.lower_bound(19);
102        assert(r == next(m.begin(), 7));
103        r = m.lower_bound(4);
104        assert(r == next(m.begin(), 0));
105        r = m.lower_bound(6);
106        assert(r == next(m.begin(), 1));
107        r = m.lower_bound(8);
108        assert(r == next(m.begin(), 2));
109        r = m.lower_bound(10);
110        assert(r == next(m.begin(), 3));
111        r = m.lower_bound(12);
112        assert(r == next(m.begin(), 4));
113        r = m.lower_bound(14);
114        assert(r == next(m.begin(), 5));
115        r = m.lower_bound(16);
116        assert(r == next(m.begin(), 6));
117        r = m.lower_bound(18);
118        assert(r == next(m.begin(), 7));
119        r = m.lower_bound(20);
120        assert(r == next(m.begin(), 8));
121    }
122}
123