equal_range.pass.cpp 12 KB

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