• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main()20 int 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