1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <set>
10
11// class set
12
13// iterator find(const key_type& k);
14// const_iterator find(const key_type& k) const;
15
16#include <set>
17#include <cassert>
18
19#include "test_macros.h"
20#include "min_allocator.h"
21#include "private_constructor.h"
22
23int main(int, char**) {
24 {
25 typedef int V;
26 typedef std::set<int> M;
27 {
28 typedef M::iterator R;
29 V ar[] = {5, 6, 7, 8, 9, 10, 11, 12};
30 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));
31 R r = m.find(x: 5);
32 assert(r == m.begin());
33 r = m.find(x: 6);
34 assert(r == std::next(m.begin()));
35 r = m.find(x: 7);
36 assert(r == std::next(m.begin(), 2));
37 r = m.find(x: 8);
38 assert(r == std::next(m.begin(), 3));
39 r = m.find(x: 9);
40 assert(r == std::next(m.begin(), 4));
41 r = m.find(x: 10);
42 assert(r == std::next(m.begin(), 5));
43 r = m.find(x: 11);
44 assert(r == std::next(m.begin(), 6));
45 r = m.find(x: 12);
46 assert(r == std::next(m.begin(), 7));
47 r = m.find(x: 4);
48 assert(r == std::next(m.begin(), 8));
49 }
50 {
51 typedef M::const_iterator R;
52 V ar[] = {5, 6, 7, 8, 9, 10, 11, 12};
53 const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));
54 R r = m.find(x: 5);
55 assert(r == m.begin());
56 r = m.find(x: 6);
57 assert(r == std::next(m.begin()));
58 r = m.find(x: 7);
59 assert(r == std::next(m.begin(), 2));
60 r = m.find(x: 8);
61 assert(r == std::next(m.begin(), 3));
62 r = m.find(x: 9);
63 assert(r == std::next(m.begin(), 4));
64 r = m.find(x: 10);
65 assert(r == std::next(m.begin(), 5));
66 r = m.find(x: 11);
67 assert(r == std::next(m.begin(), 6));
68 r = m.find(x: 12);
69 assert(r == std::next(m.begin(), 7));
70 r = m.find(x: 4);
71 assert(r == std::next(m.begin(), 8));
72 }
73 }
74#if TEST_STD_VER >= 11
75 {
76 typedef int V;
77 typedef std::set<int, std::less<int>, min_allocator<int>> M;
78 {
79 typedef M::iterator R;
80 V ar[] = {5, 6, 7, 8, 9, 10, 11, 12};
81 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));
82 R r = m.find(5);
83 assert(r == m.begin());
84 r = m.find(6);
85 assert(r == std::next(m.begin()));
86 r = m.find(7);
87 assert(r == std::next(m.begin(), 2));
88 r = m.find(8);
89 assert(r == std::next(m.begin(), 3));
90 r = m.find(9);
91 assert(r == std::next(m.begin(), 4));
92 r = m.find(10);
93 assert(r == std::next(m.begin(), 5));
94 r = m.find(11);
95 assert(r == std::next(m.begin(), 6));
96 r = m.find(12);
97 assert(r == std::next(m.begin(), 7));
98 r = m.find(4);
99 assert(r == std::next(m.begin(), 8));
100 }
101 {
102 typedef M::const_iterator R;
103 V ar[] = {5, 6, 7, 8, 9, 10, 11, 12};
104 const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));
105 R r = m.find(5);
106 assert(r == m.begin());
107 r = m.find(6);
108 assert(r == std::next(m.begin()));
109 r = m.find(7);
110 assert(r == std::next(m.begin(), 2));
111 r = m.find(8);
112 assert(r == std::next(m.begin(), 3));
113 r = m.find(9);
114 assert(r == std::next(m.begin(), 4));
115 r = m.find(10);
116 assert(r == std::next(m.begin(), 5));
117 r = m.find(11);
118 assert(r == std::next(m.begin(), 6));
119 r = m.find(12);
120 assert(r == std::next(m.begin(), 7));
121 r = m.find(4);
122 assert(r == std::next(m.begin(), 8));
123 }
124 }
125#endif
126#if TEST_STD_VER > 11
127 {
128 typedef int V;
129 typedef std::set<V, std::less<>> M;
130 typedef M::iterator R;
131
132 V ar[] = {5, 6, 7, 8, 9, 10, 11, 12};
133 M m(ar, ar + sizeof(ar) / sizeof(ar[0]));
134 R r = m.find(5);
135 assert(r == m.begin());
136 r = m.find(6);
137 assert(r == std::next(m.begin()));
138 r = m.find(7);
139 assert(r == std::next(m.begin(), 2));
140 r = m.find(8);
141 assert(r == std::next(m.begin(), 3));
142 r = m.find(9);
143 assert(r == std::next(m.begin(), 4));
144 r = m.find(10);
145 assert(r == std::next(m.begin(), 5));
146 r = m.find(11);
147 assert(r == std::next(m.begin(), 6));
148 r = m.find(12);
149 assert(r == std::next(m.begin(), 7));
150 r = m.find(4);
151 assert(r == std::next(m.begin(), 8));
152 }
153
154 {
155 typedef PrivateConstructor V;
156 typedef std::set<V, std::less<>> M;
157 typedef M::iterator R;
158
159 M m;
160 m.insert(V::make(5));
161 m.insert(V::make(6));
162 m.insert(V::make(7));
163 m.insert(V::make(8));
164 m.insert(V::make(9));
165 m.insert(V::make(10));
166 m.insert(V::make(11));
167 m.insert(V::make(12));
168
169 R r = m.find(5);
170 assert(r == m.begin());
171 r = m.find(6);
172 assert(r == std::next(m.begin()));
173 r = m.find(7);
174 assert(r == std::next(m.begin(), 2));
175 r = m.find(8);
176 assert(r == std::next(m.begin(), 3));
177 r = m.find(9);
178 assert(r == std::next(m.begin(), 4));
179 r = m.find(10);
180 assert(r == std::next(m.begin(), 5));
181 r = m.find(11);
182 assert(r == std::next(m.begin(), 6));
183 r = m.find(12);
184 assert(r == std::next(m.begin(), 7));
185 r = m.find(4);
186 assert(r == std::next(m.begin(), 8));
187 }
188#endif
189
190 return 0;
191}
192

source code of libcxx/test/std/containers/associative/set/find.pass.cpp