ListTests.c 8.7 KB

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