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 // pair<iterator,iterator> equal_range(const key_type& k); 15 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const; 16 17 #include <set> 18 #include <cassert> 19 20 #include "test_macros.h" 21 #include "min_allocator.h" 22 #include "private_constructor.hpp" 23 24 int main() 25 { 26 { 27 typedef int V; 28 typedef std::set<int> M; 29 { 30 typedef std::pair<M::iterator, M::iterator> R; 31 V ar[] = 32 { 33 5, 34 7, 35 9, 36 11, 37 13, 38 15, 39 17, 40 19 41 }; 42 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 43 R r = m.equal_range(5); 44 assert(r.first == next(m.begin(), 0)); 45 assert(r.second == next(m.begin(), 1)); 46 r = m.equal_range(7); 47 assert(r.first == next(m.begin(), 1)); 48 assert(r.second == next(m.begin(), 2)); 49 r = m.equal_range(9); 50 assert(r.first == next(m.begin(), 2)); 51 assert(r.second == next(m.begin(), 3)); 52 r = m.equal_range(11); 53 assert(r.first == next(m.begin(), 3)); 54 assert(r.second == next(m.begin(), 4)); 55 r = m.equal_range(13); 56 assert(r.first == next(m.begin(), 4)); 57 assert(r.second == next(m.begin(), 5)); 58 r = m.equal_range(15); 59 assert(r.first == next(m.begin(), 5)); 60 assert(r.second == next(m.begin(), 6)); 61 r = m.equal_range(17); 62 assert(r.first == next(m.begin(), 6)); 63 assert(r.second == next(m.begin(), 7)); 64 r = m.equal_range(19); 65 assert(r.first == next(m.begin(), 7)); 66 assert(r.second == next(m.begin(), 8)); 67 r = m.equal_range(4); 68 assert(r.first == next(m.begin(), 0)); 69 assert(r.second == next(m.begin(), 0)); 70 r = m.equal_range(6); 71 assert(r.first == next(m.begin(), 1)); 72 assert(r.second == next(m.begin(), 1)); 73 r = m.equal_range(8); 74 assert(r.first == next(m.begin(), 2)); 75 assert(r.second == next(m.begin(), 2)); 76 r = m.equal_range(10); 77 assert(r.first == next(m.begin(), 3)); 78 assert(r.second == next(m.begin(), 3)); 79 r = m.equal_range(12); 80 assert(r.first == next(m.begin(), 4)); 81 assert(r.second == next(m.begin(), 4)); 82 r = m.equal_range(14); 83 assert(r.first == next(m.begin(), 5)); 84 assert(r.second == next(m.begin(), 5)); 85 r = m.equal_range(16); 86 assert(r.first == next(m.begin(), 6)); 87 assert(r.second == next(m.begin(), 6)); 88 r = m.equal_range(18); 89 assert(r.first == next(m.begin(), 7)); 90 assert(r.second == next(m.begin(), 7)); 91 r = m.equal_range(20); 92 assert(r.first == next(m.begin(), 8)); 93 assert(r.second == next(m.begin(), 8)); 94 } 95 { 96 typedef std::pair<M::const_iterator, M::const_iterator> R; 97 V ar[] = 98 { 99 5, 100 7, 101 9, 102 11, 103 13, 104 15, 105 17, 106 19 107 }; 108 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 109 R r = m.equal_range(5); 110 assert(r.first == next(m.begin(), 0)); 111 assert(r.second == next(m.begin(), 1)); 112 r = m.equal_range(7); 113 assert(r.first == next(m.begin(), 1)); 114 assert(r.second == next(m.begin(), 2)); 115 r = m.equal_range(9); 116 assert(r.first == next(m.begin(), 2)); 117 assert(r.second == next(m.begin(), 3)); 118 r = m.equal_range(11); 119 assert(r.first == next(m.begin(), 3)); 120 assert(r.second == next(m.begin(), 4)); 121 r = m.equal_range(13); 122 assert(r.first == next(m.begin(), 4)); 123 assert(r.second == next(m.begin(), 5)); 124 r = m.equal_range(15); 125 assert(r.first == next(m.begin(), 5)); 126 assert(r.second == next(m.begin(), 6)); 127 r = m.equal_range(17); 128 assert(r.first == next(m.begin(), 6)); 129 assert(r.second == next(m.begin(), 7)); 130 r = m.equal_range(19); 131 assert(r.first == next(m.begin(), 7)); 132 assert(r.second == next(m.begin(), 8)); 133 r = m.equal_range(4); 134 assert(r.first == next(m.begin(), 0)); 135 assert(r.second == next(m.begin(), 0)); 136 r = m.equal_range(6); 137 assert(r.first == next(m.begin(), 1)); 138 assert(r.second == next(m.begin(), 1)); 139 r = m.equal_range(8); 140 assert(r.first == next(m.begin(), 2)); 141 assert(r.second == next(m.begin(), 2)); 142 r = m.equal_range(10); 143 assert(r.first == next(m.begin(), 3)); 144 assert(r.second == next(m.begin(), 3)); 145 r = m.equal_range(12); 146 assert(r.first == next(m.begin(), 4)); 147 assert(r.second == next(m.begin(), 4)); 148 r = m.equal_range(14); 149 assert(r.first == next(m.begin(), 5)); 150 assert(r.second == next(m.begin(), 5)); 151 r = m.equal_range(16); 152 assert(r.first == next(m.begin(), 6)); 153 assert(r.second == next(m.begin(), 6)); 154 r = m.equal_range(18); 155 assert(r.first == next(m.begin(), 7)); 156 assert(r.second == next(m.begin(), 7)); 157 r = m.equal_range(20); 158 assert(r.first == next(m.begin(), 8)); 159 assert(r.second == next(m.begin(), 8)); 160 } 161 } 162 #if TEST_STD_VER >= 11 163 { 164 typedef int V; 165 typedef std::set<int, std::less<int>, min_allocator<int>> M; 166 typedef std::pair<M::iterator, M::iterator> R; 167 V ar[] = 168 { 169 5, 170 7, 171 9, 172 11, 173 13, 174 15, 175 17, 176 19 177 }; 178 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 179 R r = m.equal_range(5); 180 assert(r.first == next(m.begin(), 0)); 181 assert(r.second == next(m.begin(), 1)); 182 r = m.equal_range(7); 183 assert(r.first == next(m.begin(), 1)); 184 assert(r.second == next(m.begin(), 2)); 185 r = m.equal_range(9); 186 assert(r.first == next(m.begin(), 2)); 187 assert(r.second == next(m.begin(), 3)); 188 r = m.equal_range(11); 189 assert(r.first == next(m.begin(), 3)); 190 assert(r.second == next(m.begin(), 4)); 191 r = m.equal_range(13); 192 assert(r.first == next(m.begin(), 4)); 193 assert(r.second == next(m.begin(), 5)); 194 r = m.equal_range(15); 195 assert(r.first == next(m.begin(), 5)); 196 assert(r.second == next(m.begin(), 6)); 197 r = m.equal_range(17); 198 assert(r.first == next(m.begin(), 6)); 199 assert(r.second == next(m.begin(), 7)); 200 r = m.equal_range(19); 201 assert(r.first == next(m.begin(), 7)); 202 assert(r.second == next(m.begin(), 8)); 203 r = m.equal_range(4); 204 assert(r.first == next(m.begin(), 0)); 205 assert(r.second == next(m.begin(), 0)); 206 r = m.equal_range(6); 207 assert(r.first == next(m.begin(), 1)); 208 assert(r.second == next(m.begin(), 1)); 209 r = m.equal_range(8); 210 assert(r.first == next(m.begin(), 2)); 211 assert(r.second == next(m.begin(), 2)); 212 r = m.equal_range(10); 213 assert(r.first == next(m.begin(), 3)); 214 assert(r.second == next(m.begin(), 3)); 215 r = m.equal_range(12); 216 assert(r.first == next(m.begin(), 4)); 217 assert(r.second == next(m.begin(), 4)); 218 r = m.equal_range(14); 219 assert(r.first == next(m.begin(), 5)); 220 assert(r.second == next(m.begin(), 5)); 221 r = m.equal_range(16); 222 assert(r.first == next(m.begin(), 6)); 223 assert(r.second == next(m.begin(), 6)); 224 r = m.equal_range(18); 225 assert(r.first == next(m.begin(), 7)); 226 assert(r.second == next(m.begin(), 7)); 227 r = m.equal_range(20); 228 assert(r.first == next(m.begin(), 8)); 229 assert(r.second == next(m.begin(), 8)); 230 } 231 #endif 232 #if TEST_STD_VER > 11 233 { 234 typedef int V; 235 typedef std::set<V, std::less<>> M; 236 { 237 typedef std::pair<M::iterator, M::iterator> R; 238 V ar[] = 239 { 240 5, 241 7, 242 9, 243 11, 244 13, 245 15, 246 17, 247 19 248 }; 249 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 250 R r = m.equal_range(5); 251 assert(r.first == next(m.begin(), 0)); 252 assert(r.second == next(m.begin(), 1)); 253 r = m.equal_range(7); 254 assert(r.first == next(m.begin(), 1)); 255 assert(r.second == next(m.begin(), 2)); 256 r = m.equal_range(9); 257 assert(r.first == next(m.begin(), 2)); 258 assert(r.second == next(m.begin(), 3)); 259 r = m.equal_range(11); 260 assert(r.first == next(m.begin(), 3)); 261 assert(r.second == next(m.begin(), 4)); 262 r = m.equal_range(13); 263 assert(r.first == next(m.begin(), 4)); 264 assert(r.second == next(m.begin(), 5)); 265 r = m.equal_range(15); 266 assert(r.first == next(m.begin(), 5)); 267 assert(r.second == next(m.begin(), 6)); 268 r = m.equal_range(17); 269 assert(r.first == next(m.begin(), 6)); 270 assert(r.second == next(m.begin(), 7)); 271 r = m.equal_range(19); 272 assert(r.first == next(m.begin(), 7)); 273 assert(r.second == next(m.begin(), 8)); 274 r = m.equal_range(4); 275 assert(r.first == next(m.begin(), 0)); 276 assert(r.second == next(m.begin(), 0)); 277 r = m.equal_range(6); 278 assert(r.first == next(m.begin(), 1)); 279 assert(r.second == next(m.begin(), 1)); 280 r = m.equal_range(8); 281 assert(r.first == next(m.begin(), 2)); 282 assert(r.second == next(m.begin(), 2)); 283 r = m.equal_range(10); 284 assert(r.first == next(m.begin(), 3)); 285 assert(r.second == next(m.begin(), 3)); 286 r = m.equal_range(12); 287 assert(r.first == next(m.begin(), 4)); 288 assert(r.second == next(m.begin(), 4)); 289 r = m.equal_range(14); 290 assert(r.first == next(m.begin(), 5)); 291 assert(r.second == next(m.begin(), 5)); 292 r = m.equal_range(16); 293 assert(r.first == next(m.begin(), 6)); 294 assert(r.second == next(m.begin(), 6)); 295 r = m.equal_range(18); 296 assert(r.first == next(m.begin(), 7)); 297 assert(r.second == next(m.begin(), 7)); 298 r = m.equal_range(20); 299 assert(r.first == next(m.begin(), 8)); 300 assert(r.second == next(m.begin(), 8)); 301 } 302 } 303 { 304 typedef PrivateConstructor V; 305 typedef std::set<V, std::less<>> M; 306 typedef std::pair<M::iterator, M::iterator> R; 307 308 M m; 309 m.insert ( V::make ( 5 )); 310 m.insert ( V::make ( 7 )); 311 m.insert ( V::make ( 9 )); 312 m.insert ( V::make ( 11 )); 313 m.insert ( V::make ( 13 )); 314 m.insert ( V::make ( 15 )); 315 m.insert ( V::make ( 17 )); 316 m.insert ( V::make ( 19 )); 317 318 R r = m.equal_range(5); 319 assert(r.first == next(m.begin(), 0)); 320 assert(r.second == next(m.begin(), 1)); 321 r = m.equal_range(7); 322 assert(r.first == next(m.begin(), 1)); 323 assert(r.second == next(m.begin(), 2)); 324 r = m.equal_range(9); 325 assert(r.first == next(m.begin(), 2)); 326 assert(r.second == next(m.begin(), 3)); 327 r = m.equal_range(11); 328 assert(r.first == next(m.begin(), 3)); 329 assert(r.second == next(m.begin(), 4)); 330 r = m.equal_range(13); 331 assert(r.first == next(m.begin(), 4)); 332 assert(r.second == next(m.begin(), 5)); 333 r = m.equal_range(15); 334 assert(r.first == next(m.begin(), 5)); 335 assert(r.second == next(m.begin(), 6)); 336 r = m.equal_range(17); 337 assert(r.first == next(m.begin(), 6)); 338 assert(r.second == next(m.begin(), 7)); 339 r = m.equal_range(19); 340 assert(r.first == next(m.begin(), 7)); 341 assert(r.second == next(m.begin(), 8)); 342 r = m.equal_range(4); 343 assert(r.first == next(m.begin(), 0)); 344 assert(r.second == next(m.begin(), 0)); 345 r = m.equal_range(6); 346 assert(r.first == next(m.begin(), 1)); 347 assert(r.second == next(m.begin(), 1)); 348 r = m.equal_range(8); 349 assert(r.first == next(m.begin(), 2)); 350 assert(r.second == next(m.begin(), 2)); 351 r = m.equal_range(10); 352 assert(r.first == next(m.begin(), 3)); 353 assert(r.second == next(m.begin(), 3)); 354 r = m.equal_range(12); 355 assert(r.first == next(m.begin(), 4)); 356 assert(r.second == next(m.begin(), 4)); 357 r = m.equal_range(14); 358 assert(r.first == next(m.begin(), 5)); 359 assert(r.second == next(m.begin(), 5)); 360 r = m.equal_range(16); 361 assert(r.first == next(m.begin(), 6)); 362 assert(r.second == next(m.begin(), 6)); 363 r = m.equal_range(18); 364 assert(r.first == next(m.begin(), 7)); 365 assert(r.second == next(m.begin(), 7)); 366 r = m.equal_range(20); 367 assert(r.first == next(m.begin(), 8)); 368 assert(r.second == next(m.begin(), 8)); 369 } 370 #endif 371 } 372