equal_range.pass.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  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. // <map>
  9. // class map
  10. // pair<iterator,iterator> equal_range(const key_type& k);
  11. // pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
  12. #include <map>
  13. #include <cassert>
  14. #include "test_macros.h"
  15. #include "min_allocator.h"
  16. #include "private_constructor.h"
  17. #include "is_transparent.h"
  18. int main(int, char**)
  19. {
  20. {
  21. typedef std::pair<const int, double> V;
  22. typedef std::map<int, double> M;
  23. {
  24. typedef std::pair<M::iterator, M::iterator> R;
  25. V ar[] =
  26. {
  27. V(5, 5),
  28. V(7, 6),
  29. V(9, 7),
  30. V(11, 8),
  31. V(13, 9),
  32. V(15, 10),
  33. V(17, 11),
  34. V(19, 12)
  35. };
  36. M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
  37. R r = m.equal_range(5);
  38. assert(r.first == next(m.begin(), 0));
  39. assert(r.second == next(m.begin(), 1));
  40. r = m.equal_range(7);
  41. assert(r.first == next(m.begin(), 1));
  42. assert(r.second == next(m.begin(), 2));
  43. r = m.equal_range(9);
  44. assert(r.first == next(m.begin(), 2));
  45. assert(r.second == next(m.begin(), 3));
  46. r = m.equal_range(11);
  47. assert(r.first == next(m.begin(), 3));
  48. assert(r.second == next(m.begin(), 4));
  49. r = m.equal_range(13);
  50. assert(r.first == next(m.begin(), 4));
  51. assert(r.second == next(m.begin(), 5));
  52. r = m.equal_range(15);
  53. assert(r.first == next(m.begin(), 5));
  54. assert(r.second == next(m.begin(), 6));
  55. r = m.equal_range(17);
  56. assert(r.first == next(m.begin(), 6));
  57. assert(r.second == next(m.begin(), 7));
  58. r = m.equal_range(19);
  59. assert(r.first == next(m.begin(), 7));
  60. assert(r.second == next(m.begin(), 8));
  61. r = m.equal_range(4);
  62. assert(r.first == next(m.begin(), 0));
  63. assert(r.second == next(m.begin(), 0));
  64. r = m.equal_range(6);
  65. assert(r.first == next(m.begin(), 1));
  66. assert(r.second == next(m.begin(), 1));
  67. r = m.equal_range(8);
  68. assert(r.first == next(m.begin(), 2));
  69. assert(r.second == next(m.begin(), 2));
  70. r = m.equal_range(10);
  71. assert(r.first == next(m.begin(), 3));
  72. assert(r.second == next(m.begin(), 3));
  73. r = m.equal_range(12);
  74. assert(r.first == next(m.begin(), 4));
  75. assert(r.second == next(m.begin(), 4));
  76. r = m.equal_range(14);
  77. assert(r.first == next(m.begin(), 5));
  78. assert(r.second == next(m.begin(), 5));
  79. r = m.equal_range(16);
  80. assert(r.first == next(m.begin(), 6));
  81. assert(r.second == next(m.begin(), 6));
  82. r = m.equal_range(18);
  83. assert(r.first == next(m.begin(), 7));
  84. assert(r.second == next(m.begin(), 7));
  85. r = m.equal_range(20);
  86. assert(r.first == next(m.begin(), 8));
  87. assert(r.second == next(m.begin(), 8));
  88. }
  89. {
  90. typedef std::pair<M::const_iterator, M::const_iterator> R;
  91. V ar[] =
  92. {
  93. V(5, 5),
  94. V(7, 6),
  95. V(9, 7),
  96. V(11, 8),
  97. V(13, 9),
  98. V(15, 10),
  99. V(17, 11),
  100. V(19, 12)
  101. };
  102. const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
  103. R r = m.equal_range(5);
  104. assert(r.first == next(m.begin(), 0));
  105. assert(r.second == next(m.begin(), 1));
  106. r = m.equal_range(7);
  107. assert(r.first == next(m.begin(), 1));
  108. assert(r.second == next(m.begin(), 2));
  109. r = m.equal_range(9);
  110. assert(r.first == next(m.begin(), 2));
  111. assert(r.second == next(m.begin(), 3));
  112. r = m.equal_range(11);
  113. assert(r.first == next(m.begin(), 3));
  114. assert(r.second == next(m.begin(), 4));
  115. r = m.equal_range(13);
  116. assert(r.first == next(m.begin(), 4));
  117. assert(r.second == next(m.begin(), 5));
  118. r = m.equal_range(15);
  119. assert(r.first == next(m.begin(), 5));
  120. assert(r.second == next(m.begin(), 6));
  121. r = m.equal_range(17);
  122. assert(r.first == next(m.begin(), 6));
  123. assert(r.second == next(m.begin(), 7));
  124. r = m.equal_range(19);
  125. assert(r.first == next(m.begin(), 7));
  126. assert(r.second == next(m.begin(), 8));
  127. r = m.equal_range(4);
  128. assert(r.first == next(m.begin(), 0));
  129. assert(r.second == next(m.begin(), 0));
  130. r = m.equal_range(6);
  131. assert(r.first == next(m.begin(), 1));
  132. assert(r.second == next(m.begin(), 1));
  133. r = m.equal_range(8);
  134. assert(r.first == next(m.begin(), 2));
  135. assert(r.second == next(m.begin(), 2));
  136. r = m.equal_range(10);
  137. assert(r.first == next(m.begin(), 3));
  138. assert(r.second == next(m.begin(), 3));
  139. r = m.equal_range(12);
  140. assert(r.first == next(m.begin(), 4));
  141. assert(r.second == next(m.begin(), 4));
  142. r = m.equal_range(14);
  143. assert(r.first == next(m.begin(), 5));
  144. assert(r.second == next(m.begin(), 5));
  145. r = m.equal_range(16);
  146. assert(r.first == next(m.begin(), 6));
  147. assert(r.second == next(m.begin(), 6));
  148. r = m.equal_range(18);
  149. assert(r.first == next(m.begin(), 7));
  150. assert(r.second == next(m.begin(), 7));
  151. r = m.equal_range(20);
  152. assert(r.first == next(m.begin(), 8));
  153. assert(r.second == next(m.begin(), 8));
  154. }
  155. }
  156. #if TEST_STD_VER >= 11
  157. {
  158. typedef std::pair<const int, double> V;
  159. typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
  160. {
  161. typedef std::pair<M::iterator, M::iterator> R;
  162. V ar[] =
  163. {
  164. V(5, 5),
  165. V(7, 6),
  166. V(9, 7),
  167. V(11, 8),
  168. V(13, 9),
  169. V(15, 10),
  170. V(17, 11),
  171. V(19, 12)
  172. };
  173. M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
  174. R r = m.equal_range(5);
  175. assert(r.first == next(m.begin(), 0));
  176. assert(r.second == next(m.begin(), 1));
  177. r = m.equal_range(7);
  178. assert(r.first == next(m.begin(), 1));
  179. assert(r.second == next(m.begin(), 2));
  180. r = m.equal_range(9);
  181. assert(r.first == next(m.begin(), 2));
  182. assert(r.second == next(m.begin(), 3));
  183. r = m.equal_range(11);
  184. assert(r.first == next(m.begin(), 3));
  185. assert(r.second == next(m.begin(), 4));
  186. r = m.equal_range(13);
  187. assert(r.first == next(m.begin(), 4));
  188. assert(r.second == next(m.begin(), 5));
  189. r = m.equal_range(15);
  190. assert(r.first == next(m.begin(), 5));
  191. assert(r.second == next(m.begin(), 6));
  192. r = m.equal_range(17);
  193. assert(r.first == next(m.begin(), 6));
  194. assert(r.second == next(m.begin(), 7));
  195. r = m.equal_range(19);
  196. assert(r.first == next(m.begin(), 7));
  197. assert(r.second == next(m.begin(), 8));
  198. r = m.equal_range(4);
  199. assert(r.first == next(m.begin(), 0));
  200. assert(r.second == next(m.begin(), 0));
  201. r = m.equal_range(6);
  202. assert(r.first == next(m.begin(), 1));
  203. assert(r.second == next(m.begin(), 1));
  204. r = m.equal_range(8);
  205. assert(r.first == next(m.begin(), 2));
  206. assert(r.second == next(m.begin(), 2));
  207. r = m.equal_range(10);
  208. assert(r.first == next(m.begin(), 3));
  209. assert(r.second == next(m.begin(), 3));
  210. r = m.equal_range(12);
  211. assert(r.first == next(m.begin(), 4));
  212. assert(r.second == next(m.begin(), 4));
  213. r = m.equal_range(14);
  214. assert(r.first == next(m.begin(), 5));
  215. assert(r.second == next(m.begin(), 5));
  216. r = m.equal_range(16);
  217. assert(r.first == next(m.begin(), 6));
  218. assert(r.second == next(m.begin(), 6));
  219. r = m.equal_range(18);
  220. assert(r.first == next(m.begin(), 7));
  221. assert(r.second == next(m.begin(), 7));
  222. r = m.equal_range(20);
  223. assert(r.first == next(m.begin(), 8));
  224. assert(r.second == next(m.begin(), 8));
  225. }
  226. {
  227. typedef std::pair<M::const_iterator, M::const_iterator> R;
  228. V ar[] =
  229. {
  230. V(5, 5),
  231. V(7, 6),
  232. V(9, 7),
  233. V(11, 8),
  234. V(13, 9),
  235. V(15, 10),
  236. V(17, 11),
  237. V(19, 12)
  238. };
  239. const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
  240. R r = m.equal_range(5);
  241. assert(r.first == next(m.begin(), 0));
  242. assert(r.second == next(m.begin(), 1));
  243. r = m.equal_range(7);
  244. assert(r.first == next(m.begin(), 1));
  245. assert(r.second == next(m.begin(), 2));
  246. r = m.equal_range(9);
  247. assert(r.first == next(m.begin(), 2));
  248. assert(r.second == next(m.begin(), 3));
  249. r = m.equal_range(11);
  250. assert(r.first == next(m.begin(), 3));
  251. assert(r.second == next(m.begin(), 4));
  252. r = m.equal_range(13);
  253. assert(r.first == next(m.begin(), 4));
  254. assert(r.second == next(m.begin(), 5));
  255. r = m.equal_range(15);
  256. assert(r.first == next(m.begin(), 5));
  257. assert(r.second == next(m.begin(), 6));
  258. r = m.equal_range(17);
  259. assert(r.first == next(m.begin(), 6));
  260. assert(r.second == next(m.begin(), 7));
  261. r = m.equal_range(19);
  262. assert(r.first == next(m.begin(), 7));
  263. assert(r.second == next(m.begin(), 8));
  264. r = m.equal_range(4);
  265. assert(r.first == next(m.begin(), 0));
  266. assert(r.second == next(m.begin(), 0));
  267. r = m.equal_range(6);
  268. assert(r.first == next(m.begin(), 1));
  269. assert(r.second == next(m.begin(), 1));
  270. r = m.equal_range(8);
  271. assert(r.first == next(m.begin(), 2));
  272. assert(r.second == next(m.begin(), 2));
  273. r = m.equal_range(10);
  274. assert(r.first == next(m.begin(), 3));
  275. assert(r.second == next(m.begin(), 3));
  276. r = m.equal_range(12);
  277. assert(r.first == next(m.begin(), 4));
  278. assert(r.second == next(m.begin(), 4));
  279. r = m.equal_range(14);
  280. assert(r.first == next(m.begin(), 5));
  281. assert(r.second == next(m.begin(), 5));
  282. r = m.equal_range(16);
  283. assert(r.first == next(m.begin(), 6));
  284. assert(r.second == next(m.begin(), 6));
  285. r = m.equal_range(18);
  286. assert(r.first == next(m.begin(), 7));
  287. assert(r.second == next(m.begin(), 7));
  288. r = m.equal_range(20);
  289. assert(r.first == next(m.begin(), 8));
  290. assert(r.second == next(m.begin(), 8));
  291. }
  292. }
  293. #endif
  294. #if TEST_STD_VER > 11
  295. {
  296. typedef std::pair<const int, double> V;
  297. typedef std::map<int, double, std::less<>> M;
  298. typedef std::pair<M::iterator, M::iterator> R;
  299. V ar[] =
  300. {
  301. V(5, 5),
  302. V(7, 6),
  303. V(9, 7),
  304. V(11, 8),
  305. V(13, 9),
  306. V(15, 10),
  307. V(17, 11),
  308. V(19, 12)
  309. };
  310. M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
  311. R r = m.equal_range(5);
  312. assert(r.first == next(m.begin(), 0));
  313. assert(r.second == next(m.begin(), 1));
  314. r = m.equal_range(7);
  315. assert(r.first == next(m.begin(), 1));
  316. assert(r.second == next(m.begin(), 2));
  317. r = m.equal_range(9);
  318. assert(r.first == next(m.begin(), 2));
  319. assert(r.second == next(m.begin(), 3));
  320. r = m.equal_range(11);
  321. assert(r.first == next(m.begin(), 3));
  322. assert(r.second == next(m.begin(), 4));
  323. r = m.equal_range(13);
  324. assert(r.first == next(m.begin(), 4));
  325. assert(r.second == next(m.begin(), 5));
  326. r = m.equal_range(15);
  327. assert(r.first == next(m.begin(), 5));
  328. assert(r.second == next(m.begin(), 6));
  329. r = m.equal_range(17);
  330. assert(r.first == next(m.begin(), 6));
  331. assert(r.second == next(m.begin(), 7));
  332. r = m.equal_range(19);
  333. assert(r.first == next(m.begin(), 7));
  334. assert(r.second == next(m.begin(), 8));
  335. r = m.equal_range(4);
  336. assert(r.first == next(m.begin(), 0));
  337. assert(r.second == next(m.begin(), 0));
  338. r = m.equal_range(6);
  339. assert(r.first == next(m.begin(), 1));
  340. assert(r.second == next(m.begin(), 1));
  341. r = m.equal_range(8);
  342. assert(r.first == next(m.begin(), 2));
  343. assert(r.second == next(m.begin(), 2));
  344. r = m.equal_range(10);
  345. assert(r.first == next(m.begin(), 3));
  346. assert(r.second == next(m.begin(), 3));
  347. r = m.equal_range(12);
  348. assert(r.first == next(m.begin(), 4));
  349. assert(r.second == next(m.begin(), 4));
  350. r = m.equal_range(14);
  351. assert(r.first == next(m.begin(), 5));
  352. assert(r.second == next(m.begin(), 5));
  353. r = m.equal_range(16);
  354. assert(r.first == next(m.begin(), 6));
  355. assert(r.second == next(m.begin(), 6));
  356. r = m.equal_range(18);
  357. assert(r.first == next(m.begin(), 7));
  358. assert(r.second == next(m.begin(), 7));
  359. r = m.equal_range(20);
  360. assert(r.first == next(m.begin(), 8));
  361. assert(r.second == next(m.begin(), 8));
  362. r = m.equal_range(C2Int(5));
  363. assert(r.first == next(m.begin(), 0));
  364. assert(r.second == next(m.begin(), 1));
  365. r = m.equal_range(C2Int(7));
  366. assert(r.first == next(m.begin(), 1));
  367. assert(r.second == next(m.begin(), 2));
  368. r = m.equal_range(C2Int(9));
  369. assert(r.first == next(m.begin(), 2));
  370. assert(r.second == next(m.begin(), 3));
  371. r = m.equal_range(C2Int(11));
  372. assert(r.first == next(m.begin(), 3));
  373. assert(r.second == next(m.begin(), 4));
  374. r = m.equal_range(C2Int(13));
  375. assert(r.first == next(m.begin(), 4));
  376. assert(r.second == next(m.begin(), 5));
  377. r = m.equal_range(C2Int(15));
  378. assert(r.first == next(m.begin(), 5));
  379. assert(r.second == next(m.begin(), 6));
  380. r = m.equal_range(C2Int(17));
  381. assert(r.first == next(m.begin(), 6));
  382. assert(r.second == next(m.begin(), 7));
  383. r = m.equal_range(C2Int(19));
  384. assert(r.first == next(m.begin(), 7));
  385. assert(r.second == next(m.begin(), 8));
  386. r = m.equal_range(C2Int(4));
  387. assert(r.first == next(m.begin(), 0));
  388. assert(r.second == next(m.begin(), 0));
  389. r = m.equal_range(C2Int(6));
  390. assert(r.first == next(m.begin(), 1));
  391. assert(r.second == next(m.begin(), 1));
  392. r = m.equal_range(C2Int(8));
  393. assert(r.first == next(m.begin(), 2));
  394. assert(r.second == next(m.begin(), 2));
  395. r = m.equal_range(C2Int(10));
  396. assert(r.first == next(m.begin(), 3));
  397. assert(r.second == next(m.begin(), 3));
  398. r = m.equal_range(C2Int(12));
  399. assert(r.first == next(m.begin(), 4));
  400. assert(r.second == next(m.begin(), 4));
  401. r = m.equal_range(C2Int(14));
  402. assert(r.first == next(m.begin(), 5));
  403. assert(r.second == next(m.begin(), 5));
  404. r = m.equal_range(C2Int(16));
  405. assert(r.first == next(m.begin(), 6));
  406. assert(r.second == next(m.begin(), 6));
  407. r = m.equal_range(C2Int(18));
  408. assert(r.first == next(m.begin(), 7));
  409. assert(r.second == next(m.begin(), 7));
  410. r = m.equal_range(C2Int(20));
  411. assert(r.first == next(m.begin(), 8));
  412. assert(r.second == next(m.begin(), 8));
  413. }
  414. {
  415. typedef PrivateConstructor PC;
  416. typedef std::map<PC, double, std::less<>> M;
  417. typedef std::pair<M::iterator, M::iterator> R;
  418. M m;
  419. m [ PC::make(5) ] = 5;
  420. m [ PC::make(7) ] = 6;
  421. m [ PC::make(9) ] = 7;
  422. m [ PC::make(11) ] = 8;
  423. m [ PC::make(13) ] = 9;
  424. m [ PC::make(15) ] = 10;
  425. m [ PC::make(17) ] = 11;
  426. m [ PC::make(19) ] = 12;
  427. R r = m.equal_range(5);
  428. assert(r.first == next(m.begin(), 0));
  429. assert(r.second == next(m.begin(), 1));
  430. r = m.equal_range(7);
  431. assert(r.first == next(m.begin(), 1));
  432. assert(r.second == next(m.begin(), 2));
  433. r = m.equal_range(9);
  434. assert(r.first == next(m.begin(), 2));
  435. assert(r.second == next(m.begin(), 3));
  436. r = m.equal_range(11);
  437. assert(r.first == next(m.begin(), 3));
  438. assert(r.second == next(m.begin(), 4));
  439. r = m.equal_range(13);
  440. assert(r.first == next(m.begin(), 4));
  441. assert(r.second == next(m.begin(), 5));
  442. r = m.equal_range(15);
  443. assert(r.first == next(m.begin(), 5));
  444. assert(r.second == next(m.begin(), 6));
  445. r = m.equal_range(17);
  446. assert(r.first == next(m.begin(), 6));
  447. assert(r.second == next(m.begin(), 7));
  448. r = m.equal_range(19);
  449. assert(r.first == next(m.begin(), 7));
  450. assert(r.second == next(m.begin(), 8));
  451. r = m.equal_range(4);
  452. assert(r.first == next(m.begin(), 0));
  453. assert(r.second == next(m.begin(), 0));
  454. r = m.equal_range(6);
  455. assert(r.first == next(m.begin(), 1));
  456. assert(r.second == next(m.begin(), 1));
  457. r = m.equal_range(8);
  458. assert(r.first == next(m.begin(), 2));
  459. assert(r.second == next(m.begin(), 2));
  460. r = m.equal_range(10);
  461. assert(r.first == next(m.begin(), 3));
  462. assert(r.second == next(m.begin(), 3));
  463. r = m.equal_range(12);
  464. assert(r.first == next(m.begin(), 4));
  465. assert(r.second == next(m.begin(), 4));
  466. r = m.equal_range(14);
  467. assert(r.first == next(m.begin(), 5));
  468. assert(r.second == next(m.begin(), 5));
  469. r = m.equal_range(16);
  470. assert(r.first == next(m.begin(), 6));
  471. assert(r.second == next(m.begin(), 6));
  472. r = m.equal_range(18);
  473. assert(r.first == next(m.begin(), 7));
  474. assert(r.second == next(m.begin(), 7));
  475. r = m.equal_range(20);
  476. assert(r.first == next(m.begin(), 8));
  477. assert(r.second == next(m.begin(), 8));
  478. }
  479. #endif
  480. return 0;
  481. }