ListTests.c 8.2 KB

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