MapVectorTest.cpp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. //===- unittest/ADT/MapVectorTest.cpp - MapVector unit tests ----*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "gtest/gtest.h"
  10. #include "llvm/ADT/MapVector.h"
  11. #include "llvm/ADT/iterator_range.h"
  12. #include <utility>
  13. using namespace llvm;
  14. TEST(MapVectorTest, swap) {
  15. MapVector<int, int> MV1, MV2;
  16. std::pair<MapVector<int, int>::iterator, bool> R;
  17. R = MV1.insert(std::make_pair(1, 2));
  18. ASSERT_EQ(R.first, MV1.begin());
  19. EXPECT_EQ(R.first->first, 1);
  20. EXPECT_EQ(R.first->second, 2);
  21. EXPECT_TRUE(R.second);
  22. EXPECT_FALSE(MV1.empty());
  23. EXPECT_TRUE(MV2.empty());
  24. MV2.swap(MV1);
  25. EXPECT_TRUE(MV1.empty());
  26. EXPECT_FALSE(MV2.empty());
  27. auto I = MV1.find(1);
  28. ASSERT_EQ(MV1.end(), I);
  29. I = MV2.find(1);
  30. ASSERT_EQ(I, MV2.begin());
  31. EXPECT_EQ(I->first, 1);
  32. EXPECT_EQ(I->second, 2);
  33. }
  34. TEST(MapVectorTest, insert_pop) {
  35. MapVector<int, int> MV;
  36. std::pair<MapVector<int, int>::iterator, bool> R;
  37. R = MV.insert(std::make_pair(1, 2));
  38. ASSERT_EQ(R.first, MV.begin());
  39. EXPECT_EQ(R.first->first, 1);
  40. EXPECT_EQ(R.first->second, 2);
  41. EXPECT_TRUE(R.second);
  42. R = MV.insert(std::make_pair(1, 3));
  43. ASSERT_EQ(R.first, MV.begin());
  44. EXPECT_EQ(R.first->first, 1);
  45. EXPECT_EQ(R.first->second, 2);
  46. EXPECT_FALSE(R.second);
  47. R = MV.insert(std::make_pair(4, 5));
  48. ASSERT_NE(R.first, MV.end());
  49. EXPECT_EQ(R.first->first, 4);
  50. EXPECT_EQ(R.first->second, 5);
  51. EXPECT_TRUE(R.second);
  52. EXPECT_EQ(MV.size(), 2u);
  53. EXPECT_EQ(MV[1], 2);
  54. EXPECT_EQ(MV[4], 5);
  55. MV.pop_back();
  56. EXPECT_EQ(MV.size(), 1u);
  57. EXPECT_EQ(MV[1], 2);
  58. R = MV.insert(std::make_pair(4, 7));
  59. ASSERT_NE(R.first, MV.end());
  60. EXPECT_EQ(R.first->first, 4);
  61. EXPECT_EQ(R.first->second, 7);
  62. EXPECT_TRUE(R.second);
  63. EXPECT_EQ(MV.size(), 2u);
  64. EXPECT_EQ(MV[1], 2);
  65. EXPECT_EQ(MV[4], 7);
  66. }
  67. TEST(MapVectorTest, erase) {
  68. MapVector<int, int> MV;
  69. MV.insert(std::make_pair(1, 2));
  70. MV.insert(std::make_pair(3, 4));
  71. MV.insert(std::make_pair(5, 6));
  72. ASSERT_EQ(MV.size(), 3u);
  73. MV.erase(MV.find(1));
  74. ASSERT_EQ(MV.size(), 2u);
  75. ASSERT_EQ(MV.find(1), MV.end());
  76. ASSERT_EQ(MV[3], 4);
  77. ASSERT_EQ(MV[5], 6);
  78. ASSERT_EQ(MV.erase(3), 1u);
  79. ASSERT_EQ(MV.size(), 1u);
  80. ASSERT_EQ(MV.find(3), MV.end());
  81. ASSERT_EQ(MV[5], 6);
  82. ASSERT_EQ(MV.erase(79), 0u);
  83. ASSERT_EQ(MV.size(), 1u);
  84. }
  85. TEST(MapVectorTest, remove_if) {
  86. MapVector<int, int> MV;
  87. MV.insert(std::make_pair(1, 11));
  88. MV.insert(std::make_pair(2, 12));
  89. MV.insert(std::make_pair(3, 13));
  90. MV.insert(std::make_pair(4, 14));
  91. MV.insert(std::make_pair(5, 15));
  92. MV.insert(std::make_pair(6, 16));
  93. ASSERT_EQ(MV.size(), 6u);
  94. MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; });
  95. ASSERT_EQ(MV.size(), 3u);
  96. ASSERT_EQ(MV.find(1), MV.end());
  97. ASSERT_EQ(MV.find(3), MV.end());
  98. ASSERT_EQ(MV.find(5), MV.end());
  99. ASSERT_EQ(MV[2], 12);
  100. ASSERT_EQ(MV[4], 14);
  101. ASSERT_EQ(MV[6], 16);
  102. }
  103. TEST(MapVectorTest, iteration_test) {
  104. MapVector<int, int> MV;
  105. MV.insert(std::make_pair(1, 11));
  106. MV.insert(std::make_pair(2, 12));
  107. MV.insert(std::make_pair(3, 13));
  108. MV.insert(std::make_pair(4, 14));
  109. MV.insert(std::make_pair(5, 15));
  110. MV.insert(std::make_pair(6, 16));
  111. ASSERT_EQ(MV.size(), 6u);
  112. int count = 1;
  113. for (auto P : make_range(MV.begin(), MV.end())) {
  114. ASSERT_EQ(P.first, count);
  115. count++;
  116. }
  117. count = 6;
  118. for (auto P : make_range(MV.rbegin(), MV.rend())) {
  119. ASSERT_EQ(P.first, count);
  120. count--;
  121. }
  122. }
  123. TEST(SmallMapVectorSmallTest, insert_pop) {
  124. SmallMapVector<int, int, 32> MV;
  125. std::pair<SmallMapVector<int, int, 32>::iterator, bool> R;
  126. R = MV.insert(std::make_pair(1, 2));
  127. ASSERT_EQ(R.first, MV.begin());
  128. EXPECT_EQ(R.first->first, 1);
  129. EXPECT_EQ(R.first->second, 2);
  130. EXPECT_TRUE(R.second);
  131. R = MV.insert(std::make_pair(1, 3));
  132. ASSERT_EQ(R.first, MV.begin());
  133. EXPECT_EQ(R.first->first, 1);
  134. EXPECT_EQ(R.first->second, 2);
  135. EXPECT_FALSE(R.second);
  136. R = MV.insert(std::make_pair(4, 5));
  137. ASSERT_NE(R.first, MV.end());
  138. EXPECT_EQ(R.first->first, 4);
  139. EXPECT_EQ(R.first->second, 5);
  140. EXPECT_TRUE(R.second);
  141. EXPECT_EQ(MV.size(), 2u);
  142. EXPECT_EQ(MV[1], 2);
  143. EXPECT_EQ(MV[4], 5);
  144. MV.pop_back();
  145. EXPECT_EQ(MV.size(), 1u);
  146. EXPECT_EQ(MV[1], 2);
  147. R = MV.insert(std::make_pair(4, 7));
  148. ASSERT_NE(R.first, MV.end());
  149. EXPECT_EQ(R.first->first, 4);
  150. EXPECT_EQ(R.first->second, 7);
  151. EXPECT_TRUE(R.second);
  152. EXPECT_EQ(MV.size(), 2u);
  153. EXPECT_EQ(MV[1], 2);
  154. EXPECT_EQ(MV[4], 7);
  155. }
  156. TEST(SmallMapVectorSmallTest, erase) {
  157. SmallMapVector<int, int, 32> MV;
  158. MV.insert(std::make_pair(1, 2));
  159. MV.insert(std::make_pair(3, 4));
  160. MV.insert(std::make_pair(5, 6));
  161. ASSERT_EQ(MV.size(), 3u);
  162. MV.erase(MV.find(1));
  163. ASSERT_EQ(MV.size(), 2u);
  164. ASSERT_EQ(MV.find(1), MV.end());
  165. ASSERT_EQ(MV[3], 4);
  166. ASSERT_EQ(MV[5], 6);
  167. ASSERT_EQ(MV.erase(3), 1u);
  168. ASSERT_EQ(MV.size(), 1u);
  169. ASSERT_EQ(MV.find(3), MV.end());
  170. ASSERT_EQ(MV[5], 6);
  171. ASSERT_EQ(MV.erase(79), 0u);
  172. ASSERT_EQ(MV.size(), 1u);
  173. }
  174. TEST(SmallMapVectorSmallTest, remove_if) {
  175. SmallMapVector<int, int, 32> MV;
  176. MV.insert(std::make_pair(1, 11));
  177. MV.insert(std::make_pair(2, 12));
  178. MV.insert(std::make_pair(3, 13));
  179. MV.insert(std::make_pair(4, 14));
  180. MV.insert(std::make_pair(5, 15));
  181. MV.insert(std::make_pair(6, 16));
  182. ASSERT_EQ(MV.size(), 6u);
  183. MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; });
  184. ASSERT_EQ(MV.size(), 3u);
  185. ASSERT_EQ(MV.find(1), MV.end());
  186. ASSERT_EQ(MV.find(3), MV.end());
  187. ASSERT_EQ(MV.find(5), MV.end());
  188. ASSERT_EQ(MV[2], 12);
  189. ASSERT_EQ(MV[4], 14);
  190. ASSERT_EQ(MV[6], 16);
  191. }
  192. TEST(SmallMapVectorSmallTest, iteration_test) {
  193. SmallMapVector<int, int, 32> MV;
  194. MV.insert(std::make_pair(1, 11));
  195. MV.insert(std::make_pair(2, 12));
  196. MV.insert(std::make_pair(3, 13));
  197. MV.insert(std::make_pair(4, 14));
  198. MV.insert(std::make_pair(5, 15));
  199. MV.insert(std::make_pair(6, 16));
  200. ASSERT_EQ(MV.size(), 6u);
  201. int count = 1;
  202. for (auto P : make_range(MV.begin(), MV.end())) {
  203. ASSERT_EQ(P.first, count);
  204. count++;
  205. }
  206. count = 6;
  207. for (auto P : make_range(MV.rbegin(), MV.rend())) {
  208. ASSERT_EQ(P.first, count);
  209. count--;
  210. }
  211. }
  212. TEST(SmallMapVectorLargeTest, insert_pop) {
  213. SmallMapVector<int, int, 1> MV;
  214. std::pair<SmallMapVector<int, int, 1>::iterator, bool> R;
  215. R = MV.insert(std::make_pair(1, 2));
  216. ASSERT_EQ(R.first, MV.begin());
  217. EXPECT_EQ(R.first->first, 1);
  218. EXPECT_EQ(R.first->second, 2);
  219. EXPECT_TRUE(R.second);
  220. R = MV.insert(std::make_pair(1, 3));
  221. ASSERT_EQ(R.first, MV.begin());
  222. EXPECT_EQ(R.first->first, 1);
  223. EXPECT_EQ(R.first->second, 2);
  224. EXPECT_FALSE(R.second);
  225. R = MV.insert(std::make_pair(4, 5));
  226. ASSERT_NE(R.first, MV.end());
  227. EXPECT_EQ(R.first->first, 4);
  228. EXPECT_EQ(R.first->second, 5);
  229. EXPECT_TRUE(R.second);
  230. EXPECT_EQ(MV.size(), 2u);
  231. EXPECT_EQ(MV[1], 2);
  232. EXPECT_EQ(MV[4], 5);
  233. MV.pop_back();
  234. EXPECT_EQ(MV.size(), 1u);
  235. EXPECT_EQ(MV[1], 2);
  236. R = MV.insert(std::make_pair(4, 7));
  237. ASSERT_NE(R.first, MV.end());
  238. EXPECT_EQ(R.first->first, 4);
  239. EXPECT_EQ(R.first->second, 7);
  240. EXPECT_TRUE(R.second);
  241. EXPECT_EQ(MV.size(), 2u);
  242. EXPECT_EQ(MV[1], 2);
  243. EXPECT_EQ(MV[4], 7);
  244. }
  245. TEST(SmallMapVectorLargeTest, erase) {
  246. SmallMapVector<int, int, 1> MV;
  247. MV.insert(std::make_pair(1, 2));
  248. MV.insert(std::make_pair(3, 4));
  249. MV.insert(std::make_pair(5, 6));
  250. ASSERT_EQ(MV.size(), 3u);
  251. MV.erase(MV.find(1));
  252. ASSERT_EQ(MV.size(), 2u);
  253. ASSERT_EQ(MV.find(1), MV.end());
  254. ASSERT_EQ(MV[3], 4);
  255. ASSERT_EQ(MV[5], 6);
  256. ASSERT_EQ(MV.erase(3), 1u);
  257. ASSERT_EQ(MV.size(), 1u);
  258. ASSERT_EQ(MV.find(3), MV.end());
  259. ASSERT_EQ(MV[5], 6);
  260. ASSERT_EQ(MV.erase(79), 0u);
  261. ASSERT_EQ(MV.size(), 1u);
  262. }
  263. TEST(SmallMapVectorLargeTest, remove_if) {
  264. SmallMapVector<int, int, 1> MV;
  265. MV.insert(std::make_pair(1, 11));
  266. MV.insert(std::make_pair(2, 12));
  267. MV.insert(std::make_pair(3, 13));
  268. MV.insert(std::make_pair(4, 14));
  269. MV.insert(std::make_pair(5, 15));
  270. MV.insert(std::make_pair(6, 16));
  271. ASSERT_EQ(MV.size(), 6u);
  272. MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; });
  273. ASSERT_EQ(MV.size(), 3u);
  274. ASSERT_EQ(MV.find(1), MV.end());
  275. ASSERT_EQ(MV.find(3), MV.end());
  276. ASSERT_EQ(MV.find(5), MV.end());
  277. ASSERT_EQ(MV[2], 12);
  278. ASSERT_EQ(MV[4], 14);
  279. ASSERT_EQ(MV[6], 16);
  280. }
  281. TEST(SmallMapVectorLargeTest, iteration_test) {
  282. SmallMapVector<int, int, 1> MV;
  283. MV.insert(std::make_pair(1, 11));
  284. MV.insert(std::make_pair(2, 12));
  285. MV.insert(std::make_pair(3, 13));
  286. MV.insert(std::make_pair(4, 14));
  287. MV.insert(std::make_pair(5, 15));
  288. MV.insert(std::make_pair(6, 16));
  289. ASSERT_EQ(MV.size(), 6u);
  290. int count = 1;
  291. for (auto P : make_range(MV.begin(), MV.end())) {
  292. ASSERT_EQ(P.first, count);
  293. count++;
  294. }
  295. count = 6;
  296. for (auto P : make_range(MV.rbegin(), MV.rend())) {
  297. ASSERT_EQ(P.first, count);
  298. count--;
  299. }
  300. }