MainTest.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. #include <iostream>
  2. #include "data/UnsortedArrayList.h"
  3. #include "data/HashMap.h"
  4. using namespace std;
  5. // -----------------------------------------------------------------------------
  6. // test feedback
  7. // -----------------------------------------------------------------------------
  8. const char* RED = "\033[0;31m";
  9. const char* GREEN = "\033[0;32m";
  10. int tests = 0;
  11. int successTests = 0;
  12. void notifySuccess(string text)
  13. {
  14. tests++;
  15. successTests++;
  16. cout << GREEN << tests << ". " << text << endl;
  17. }
  18. void notifyFail(string text)
  19. {
  20. tests++;
  21. cout << RED << tests << ". " << text << endl;
  22. }
  23. void finalizeTest()
  24. {
  25. cout << successTests << " / " << tests << " succeeded" << endl;
  26. tests = 0;
  27. successTests = 0;
  28. }
  29. // -----------------------------------------------------------------------------
  30. // checks
  31. // -----------------------------------------------------------------------------
  32. void checkEqual(int a, int b, string text)
  33. {
  34. if(a == b)
  35. {
  36. notifySuccess(text);
  37. }
  38. else
  39. {
  40. notifyFail(text + " - expected " + std::to_string(a) + " got " + std::to_string(b));
  41. }
  42. }
  43. void checkBool(bool a, bool b, string text)
  44. {
  45. if(a == b)
  46. {
  47. notifySuccess(text);
  48. }
  49. else
  50. {
  51. notifyFail(text + " - expected " + std::to_string(a) + " got " + std::to_string(b));
  52. }
  53. }
  54. void checkGreaterOrEqual(int a, int b, string text)
  55. {
  56. if(a >= b)
  57. {
  58. notifySuccess(text);
  59. }
  60. else
  61. {
  62. notifyFail(text + " - expected " + std::to_string(a) + " >= " + std::to_string(b));
  63. }
  64. }
  65. // -----------------------------------------------------------------------------
  66. // tests of UnsortedArrayList
  67. // -----------------------------------------------------------------------------
  68. void testUnsortedArrayList1(string text)
  69. {
  70. UnsortedArrayList<int> list;
  71. list.add(1);
  72. list.add(5);
  73. list.add(10);
  74. checkEqual(3, list.getSize(), text);
  75. checkEqual(1, list.get(0, -1), text);
  76. checkEqual(5, list.get(1, -1), text);
  77. checkEqual(10, list.get(2, -1), text);
  78. }
  79. void testUnsortedArrayList2(string text)
  80. {
  81. UnsortedArrayList<int> list;
  82. list.add(1);
  83. list.add(5);
  84. list.add(10);
  85. list.removeIndex(1);
  86. checkEqual(2, list.getSize(), text);
  87. checkEqual(1, list.get(0, -1), text);
  88. checkEqual(10, list.get(1, -1), text);
  89. }
  90. void testUnsortedArrayList3(string text)
  91. {
  92. UnsortedArrayList<int> list;
  93. list.add(1);
  94. list.add(5);
  95. list.add(10);
  96. list.removeIndex(0);
  97. list.add(20);
  98. checkEqual(3, list.getSize(), text);
  99. checkEqual(10, list.get(0, -1), text);
  100. checkEqual(5, list.get(1, -1), text);
  101. checkEqual(20, list.get(2, -1), text);
  102. }
  103. void testUnsortedArrayList4(string text)
  104. {
  105. UnsortedArrayList<int> list;
  106. list.add(1);
  107. list.add(5);
  108. list.add(10);
  109. list.removeIndex(-5);
  110. list.removeIndex(5);
  111. checkEqual(3, list.getSize(), text);
  112. checkEqual(1, list.get(0, -1), text);
  113. checkEqual(5, list.get(1, -1), text);
  114. checkEqual(10, list.get(2, -1), text);
  115. }
  116. void testUnsortedArrayList5(string text)
  117. {
  118. UnsortedArrayList<int> list;
  119. list.add(1);
  120. list.add(5);
  121. list.add(1);
  122. list.add(20);
  123. list.remove(2);
  124. checkEqual(4, list.getSize(), text);
  125. checkEqual(1, list.get(0, -1), text);
  126. checkEqual(5, list.get(1, -1), text);
  127. checkEqual(1, list.get(2, -1), text);
  128. checkEqual(20, list.get(3, -1), text);
  129. }
  130. void testUnsortedArrayList6(string text)
  131. {
  132. UnsortedArrayList<int> list;
  133. int r = rand();
  134. checkEqual(r, list.get(-100, r), text);
  135. r = rand();
  136. checkEqual(r, list.get(100, r), text);
  137. }
  138. void testUnsortedArrayList7(string text)
  139. {
  140. UnsortedArrayList<int> list;
  141. list.add(1);
  142. list.add(1);
  143. list.add(5);
  144. list.add(1);
  145. list.add(20);
  146. list.remove(1);
  147. checkEqual(2, list.getSize(), text);
  148. checkEqual(20, list.get(0, -1), text);
  149. checkEqual(5, list.get(1, -1), text);
  150. }
  151. void testUnsortedArrayList()
  152. {
  153. testUnsortedArrayList1("add, size and get");
  154. testUnsortedArrayList2("remove index");
  155. testUnsortedArrayList3("add after remove index, move last to first");
  156. testUnsortedArrayList4("remove of non existent element");
  157. testUnsortedArrayList5("remove index of non existent index");
  158. testUnsortedArrayList6("get returns error value");
  159. testUnsortedArrayList7("remove deletes all occurencies");
  160. finalizeTest();
  161. }
  162. // -----------------------------------------------------------------------------
  163. // tests of HashMap
  164. // -----------------------------------------------------------------------------
  165. unsigned int hashInt(int i)
  166. {
  167. return i;
  168. }
  169. void testHashMap1(string text)
  170. {
  171. HashMap<int, int> map(16, hashInt);
  172. int cap = map.getCapacity();
  173. checkGreaterOrEqual(cap, 16, text);
  174. HashMap<int, int> map2(cap, hashInt);
  175. HashMap<int, int> map3(cap + 1, hashInt);
  176. checkEqual(cap, map2.getCapacity(), text);
  177. checkGreaterOrEqual(map3.getCapacity(), cap + 1, text);
  178. }
  179. void testHashMap2(string text)
  180. {
  181. HashMap<int, int> map(16, hashInt);
  182. for(int i = 0; i < 5; i++)
  183. {
  184. map.put(i, i);
  185. }
  186. checkEqual(5, map.getSize(), text);
  187. }
  188. void testHashMap3(string text)
  189. {
  190. HashMap<int, int> map(16, hashInt);
  191. int cap = map.getCapacity();
  192. if(cap < 0)
  193. {
  194. cap = 0;
  195. }
  196. cap += 3;
  197. for(int i = 0; i < cap; i++)
  198. {
  199. map.put(i, i);
  200. }
  201. checkEqual(cap, map.getSize(), text);
  202. }
  203. void testHashMap4(string text)
  204. {
  205. HashMap<int, int> map(16, hashInt);
  206. for(int i = 0; i < 3; i++)
  207. {
  208. map.put(i, i + 20);
  209. }
  210. for(int i = 0; i < 3; i++)
  211. {
  212. checkEqual(i + 20, map.get(i, -1), text);
  213. }
  214. }
  215. void testHashMap5(string text)
  216. {
  217. HashMap<int, int> map(16, hashInt);
  218. int cap = map.getCapacity();
  219. if(cap < 0)
  220. {
  221. cap = 0;
  222. }
  223. cap += 3;
  224. for(int i = 0; i < cap; i++)
  225. {
  226. map.put(i, i + 20);
  227. }
  228. checkBool(true, map.remove(cap / 2), text);
  229. checkEqual(-1, map.get(cap / 2, -1), text);
  230. checkEqual(cap - 1, map.getSize(), text);
  231. }
  232. void testHashMap6(string text)
  233. {
  234. HashMap<int, int> map(16, hashInt);
  235. int cap = map.getCapacity();
  236. if(cap < 0)
  237. {
  238. cap = 0;
  239. }
  240. cap += 3;
  241. for(int i = 0; i < cap; i++)
  242. {
  243. map.put(i, i + 20);
  244. }
  245. checkBool(false, map.remove(cap + 5), text);
  246. checkBool(false, map.remove(cap + 20), text);
  247. checkBool(false, map.remove(cap + 25), text);
  248. checkEqual(cap, map.getSize(), text);
  249. }
  250. void testHashMap7(string text)
  251. {
  252. HashMap<int, int> map(16, hashInt);
  253. for(int i = 0; i < 3; i++)
  254. {
  255. map.put(i, i + 20);
  256. }
  257. checkEqual(3, map.getSize(), text);
  258. map.clear();
  259. checkEqual(0, map.getSize(), text);
  260. checkEqual(-1, map.get(0, -1), text);
  261. checkEqual(-1, map.get(1, -1), text);
  262. checkEqual(-1, map.get(2, -1), text);
  263. }
  264. void testHashMap8(string text)
  265. {
  266. HashMap<int, int> map(16, hashInt);
  267. for(int i = 0; i < 3; i++)
  268. {
  269. map.put(i, i + 20);
  270. }
  271. for(int i = 0; i < 3; i++)
  272. {
  273. map.put(i, i + 25);
  274. }
  275. for(int i = 0; i < 3; i++)
  276. {
  277. checkEqual(i + 25, map.get(i, -1), text);
  278. }
  279. }
  280. void testHashMap9(string text)
  281. {
  282. HashMap<int, int> map(16, hashInt);
  283. int cap = map.getCapacity();
  284. if(cap < 0)
  285. {
  286. cap = 0;
  287. }
  288. cap += 3;
  289. for(int i = 0; i < cap; i++)
  290. {
  291. map.put(i, i + 20);
  292. }
  293. checkEqual(cap / 2 + 20, map.remove(cap / 2, -1), text);
  294. checkEqual(cap - 1, map.getSize(), text);
  295. }
  296. void testHashMap10(string text)
  297. {
  298. HashMap<int, int> map(16, hashInt);
  299. int cap = map.getCapacity();
  300. if(cap < 0)
  301. {
  302. cap = 0;
  303. }
  304. cap += 3;
  305. for(int i = 0; i < cap; i++)
  306. {
  307. map.put(i, i + 20);
  308. }
  309. checkEqual(-1, map.remove(cap + 5, -1), text);
  310. checkEqual(-1, map.remove(cap + 20, -1), text);
  311. checkEqual(-1, map.remove(cap + 25, -1), text);
  312. checkEqual(cap, map.getSize(), text);
  313. }
  314. void testHashMap()
  315. {
  316. testHashMap1("capacity greater or equal than inital value");
  317. testHashMap2("put increases size");
  318. testHashMap3("put over capacity");
  319. testHashMap4("get");
  320. testHashMap5("remove of existent value");
  321. testHashMap6("remove of non existent value");
  322. testHashMap7("clear");
  323. testHashMap8("put overwrites old value");
  324. testHashMap9("remove with return value of existent value");
  325. testHashMap10("remove with return value of non existent value");
  326. finalizeTest();
  327. }
  328. // -----------------------------------------------------------------------------
  329. // main
  330. // -----------------------------------------------------------------------------
  331. int main(int argc, char** argv)
  332. {
  333. testUnsortedArrayList();
  334. testHashMap();
  335. return 0;
  336. }