ListTests.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #include "../Tests.h"
  2. #include "core/List.h"
  3. #include "core/Utility.h"
  4. #include "core/Vector.h"
  5. static void testAdd() {
  6. CoreList list = CORE_LIST(sizeof(size_t));
  7. coreListAdd(&list, size_t, 5);
  8. CORE_TEST_SIZE(5, coreListGet(&list, 0, size_t));
  9. CORE_TEST_SIZE(5, coreListGetC(&list, 0, size_t));
  10. CORE_TEST_SIZE(1, list.length);
  11. coreDestroyList(&list);
  12. }
  13. static void testMultipleAdd() {
  14. CoreList list = CORE_LIST(sizeof(size_t));
  15. coreListAdd(&list, size_t, 4);
  16. coreListAdd(&list, size_t, 3);
  17. coreListAdd(&list, size_t, 2);
  18. CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
  19. CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
  20. CORE_TEST_SIZE(2, coreListGet(&list, 2, size_t));
  21. CORE_TEST_SIZE(2, coreListLast(&list, size_t));
  22. CORE_TEST_SIZE(4, coreListGetC(&list, 0, size_t));
  23. CORE_TEST_SIZE(3, coreListGetC(&list, 1, size_t));
  24. CORE_TEST_SIZE(2, coreListGetC(&list, 2, size_t));
  25. CORE_TEST_SIZE(2, coreListLastC(&list, size_t));
  26. CORE_TEST_SIZE(3, list.length);
  27. coreDestroyList(&list);
  28. }
  29. static void testAddLast() {
  30. CoreList list = CORE_LIST(sizeof(size_t));
  31. coreListAdd(&list, size_t, 4);
  32. coreListAdd(&list, size_t, 3);
  33. coreListAddLast(&list);
  34. CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
  35. CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
  36. CORE_TEST_SIZE(3, coreListGet(&list, 2, size_t));
  37. CORE_TEST_SIZE(3, list.length);
  38. coreDestroyList(&list);
  39. }
  40. static void testAddReplace() {
  41. CoreList list = CORE_LIST(sizeof(size_t));
  42. coreListAdd(&list, size_t, 5);
  43. coreListGet(&list, 0, size_t) = 3;
  44. CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
  45. coreDestroyList(&list);
  46. }
  47. static void testClear() {
  48. CoreList list = CORE_LIST(sizeof(size_t));
  49. coreListAdd(&list, size_t, 5);
  50. coreListAdd(&list, size_t, 4);
  51. coreClearList(&list);
  52. CORE_TEST_SIZE(0, list.length);
  53. coreDestroyList(&list);
  54. }
  55. static void testShrink() {
  56. CoreList list = CORE_LIST(sizeof(size_t));
  57. coreListAdd(&list, size_t, 5);
  58. coreListAdd(&list, size_t, 4);
  59. coreListAdd(&list, size_t, 3);
  60. CORE_TEST_TRUE(list.capacity >= 3);
  61. coreShrinkList(&list);
  62. CORE_TEST_SIZE(3, list.length);
  63. CORE_TEST_SIZE(3, list.capacity);
  64. CORE_TEST_SIZE(5, coreListGet(&list, 0, size_t));
  65. CORE_TEST_SIZE(4, coreListGet(&list, 1, size_t));
  66. CORE_TEST_SIZE(3, coreListGet(&list, 2, size_t));
  67. coreDestroyList(&list);
  68. }
  69. static void testBigAdd(bool light) {
  70. size_t limit = light ? 10000 : 100000;
  71. CoreList list = CORE_LIST(sizeof(size_t));
  72. for(size_t i = 0; i < limit; i++) {
  73. coreListAdd(&list, size_t, i);
  74. }
  75. for(size_t i = 0; i < list.length; i++) {
  76. CORE_TEST_SIZE(i, coreListGet(&list, i, size_t));
  77. }
  78. CORE_TEST_SIZE(limit, list.length);
  79. coreDestroyList(&list);
  80. }
  81. static void testCopy() {
  82. CoreList list = CORE_LIST(sizeof(size_t));
  83. coreListAdd(&list, size_t, 1);
  84. coreListAdd(&list, size_t, 2);
  85. coreListAdd(&list, size_t, 3);
  86. CoreList copy = CORE_LIST(0);
  87. coreCopyList(&copy, &list);
  88. coreCopyList(&copy, &copy);
  89. CORE_TEST_SIZE(list.length, copy.length);
  90. size_t limit = coreMinSize(copy.length, list.length);
  91. for(size_t i = 0; i < limit; i++) {
  92. CORE_TEST_SIZE(coreListGet(&list, i, size_t),
  93. coreListGet(&copy, i, size_t));
  94. }
  95. coreDestroyList(&copy);
  96. coreDestroyList(&list);
  97. }
  98. static void testMove() {
  99. CoreList list = CORE_LIST(sizeof(size_t));
  100. coreListAdd(&list, size_t, 1);
  101. coreListAdd(&list, size_t, 2);
  102. coreListAdd(&list, size_t, 3);
  103. CoreList move = CORE_LIST(0);
  104. coreMoveList(&move, &list);
  105. coreMoveList(&move, &move);
  106. CORE_TEST_SIZE(0, list.length);
  107. CORE_TEST_SIZE(3, move.length);
  108. CORE_TEST_SIZE(1, coreListGet(&move, 0, size_t));
  109. CORE_TEST_SIZE(2, coreListGet(&move, 1, size_t));
  110. CORE_TEST_SIZE(3, coreListGet(&move, 2, size_t));
  111. coreDestroyList(&move);
  112. }
  113. static void testToString1() {
  114. CoreList list = CORE_LIST(sizeof(size_t));
  115. coreListAdd(&list, size_t, 1);
  116. coreListAdd(&list, size_t, 243);
  117. coreListAdd(&list, size_t, 423);
  118. char buffer[128];
  119. size_t n =
  120. coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
  121. CORE_TEST_SIZE(13, n);
  122. CORE_TEST_STRING("[1, 243, 423]", buffer);
  123. coreDestroyList(&list);
  124. }
  125. static void testToString2() {
  126. CoreList list = CORE_LIST(sizeof(size_t));
  127. coreListAdd(&list, size_t, 1);
  128. char buffer[128];
  129. size_t n =
  130. coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
  131. CORE_TEST_SIZE(3, n);
  132. CORE_TEST_STRING("[1]", buffer);
  133. coreDestroyList(&list);
  134. }
  135. static void testToString3() {
  136. CoreList list = CORE_LIST(sizeof(size_t));
  137. char buffer[128];
  138. size_t n =
  139. coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
  140. CORE_TEST_SIZE(2, n);
  141. CORE_TEST_STRING("[]", buffer);
  142. coreDestroyList(&list);
  143. }
  144. static void testRemoveBySwap() {
  145. CoreList list = CORE_LIST(sizeof(size_t));
  146. coreListAdd(&list, size_t, 4);
  147. coreListAdd(&list, size_t, 3);
  148. coreListAdd(&list, size_t, 2);
  149. coreListRemoveBySwap(&list, 0);
  150. CORE_TEST_SIZE(2, coreListGet(&list, 0, size_t));
  151. CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
  152. CORE_TEST_SIZE(2, list.length);
  153. coreListRemoveBySwap(&list, 1);
  154. CORE_TEST_SIZE(2, coreListGet(&list, 0, size_t));
  155. CORE_TEST_SIZE(1, list.length);
  156. coreListRemoveBySwap(&list, 0);
  157. CORE_TEST_SIZE(0, list.length);
  158. coreDestroyList(&list);
  159. }
  160. static void testRemove() {
  161. CoreList list = CORE_LIST(sizeof(size_t));
  162. coreListAdd(&list, size_t, 4);
  163. coreListAdd(&list, size_t, 3);
  164. coreListAdd(&list, size_t, 2);
  165. coreListRemove(&list, 0);
  166. CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
  167. CORE_TEST_SIZE(2, coreListGet(&list, 1, size_t));
  168. CORE_TEST_SIZE(2, list.length);
  169. coreListRemove(&list, 1);
  170. CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
  171. CORE_TEST_SIZE(1, list.length);
  172. coreListRemove(&list, 0);
  173. CORE_TEST_SIZE(0, list.length);
  174. coreDestroyList(&list);
  175. }
  176. static void testRemoveLast() {
  177. CoreList list = CORE_LIST(sizeof(size_t));
  178. coreListAdd(&list, size_t, 4);
  179. coreListAdd(&list, size_t, 3);
  180. coreListAdd(&list, size_t, 2);
  181. coreListRemoveLast(&list);
  182. CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
  183. CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
  184. CORE_TEST_SIZE(2, list.length);
  185. coreListRemoveLast(&list);
  186. CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
  187. CORE_TEST_SIZE(1, list.length);
  188. coreListRemoveLast(&list);
  189. CORE_TEST_SIZE(0, list.length);
  190. coreDestroyList(&list);
  191. }
  192. static void testResize() {
  193. CoreList list = CORE_LIST(sizeof(size_t));
  194. coreResizeListV(&list, 5, size_t, 10);
  195. CORE_TEST_SIZE(5, list.length);
  196. for(size_t i = 0; i < 5; i++) {
  197. CORE_TEST_SIZE(10, coreListGet(&list, i, size_t));
  198. }
  199. coreDestroyList(&list);
  200. }
  201. static void testDefaultResize() {
  202. CoreList list = CORE_LIST(sizeof(size_t));
  203. coreResizeList(&list, 5);
  204. CORE_TEST_SIZE(5, list.length);
  205. for(size_t i = 0; i < 5; i++) {
  206. CORE_TEST_SIZE(0, coreListGet(&list, i, size_t));
  207. }
  208. coreDestroyList(&list);
  209. }
  210. static void testInvalidReserve() {
  211. CoreList list = CORE_LIST(sizeof(size_t));
  212. coreListReserve(&list, 0);
  213. coreDestroyList(&list);
  214. }
  215. static void testShrinkExact() {
  216. CoreList list = CORE_LIST(sizeof(size_t));
  217. coreResizeList(&list, 50);
  218. coreShrinkList(&list);
  219. coreDestroyList(&list);
  220. }
  221. static void testShrinkResize() {
  222. CoreList list = CORE_LIST(sizeof(size_t));
  223. coreResizeList(&list, 50);
  224. CORE_TEST_SIZE(50, list.length);
  225. coreResizeListV(&list, 20, size_t, 5);
  226. CORE_TEST_SIZE(20, list.length);
  227. coreResizeList(&list, 10);
  228. CORE_TEST_SIZE(10, list.length);
  229. coreDestroyList(&list);
  230. }
  231. static void testCopyEmpty() {
  232. CoreList list = CORE_LIST(sizeof(size_t));
  233. CoreList copy = CORE_LIST(0);
  234. coreCopyList(&copy, &list);
  235. coreDestroyList(&copy);
  236. coreDestroyList(&list);
  237. }
  238. static void testStruct() {
  239. CoreList list = CORE_LIST(sizeof(CoreVector3));
  240. CoreVector3 v = {{1, 2, 3}};
  241. coreListAddPointer(&list, &v);
  242. coreListAdd(&list, CoreVector3, {2, 3, 4});
  243. CORE_TEST_V3(&v, coreListGetPointer(&list, 0, CoreVector3));
  244. coreDestroyList(&list);
  245. }
  246. void coreTestList(bool light) {
  247. testAdd();
  248. testMultipleAdd();
  249. testAddLast();
  250. testAddReplace();
  251. testClear();
  252. testShrink();
  253. testBigAdd(light);
  254. testCopy();
  255. testMove();
  256. testToString1();
  257. testToString2();
  258. testToString3();
  259. testRemoveBySwap();
  260. testRemove();
  261. testRemoveLast();
  262. testResize();
  263. testDefaultResize();
  264. testInvalidReserve();
  265. testShrinkExact();
  266. testShrinkResize();
  267. testCopyEmpty();
  268. testStruct();
  269. }