ListTests.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. #define IMPORT_CORE
  2. #include "../Tests.h"
  3. #include "core/List.h"
  4. #include "core/ToString.h"
  5. #include "core/Vector.h"
  6. LIST(size_t, Size)
  7. LIST_SOURCE(size_t, Size)
  8. LIST(Vector3, V3)
  9. LIST_SOURCE(Vector3, V3)
  10. LIST(int, Int)
  11. static void testAdd() {
  12. ListSize list;
  13. initListSize(&list);
  14. addListDataSize(&list, 5);
  15. TEST_SIZE(5, *getListIndexSize(&list, 0));
  16. TEST_SIZE(1, list.length);
  17. destroyListSize(&list);
  18. }
  19. static void testMultipleAdd() {
  20. ListSize list;
  21. initListSize(&list);
  22. addListDataSize(&list, 4);
  23. addListDataSize(&list, 3);
  24. addListDataSize(&list, 2);
  25. TEST_SIZE(4, *getListIndexSize(&list, 0));
  26. TEST_SIZE(3, *getListIndexSize(&list, 1));
  27. TEST_SIZE(2, *getListIndexSize(&list, 2));
  28. TEST_SIZE(2, *getListLastSize(&list));
  29. TEST_SIZE(3, list.length);
  30. destroyListSize(&list);
  31. }
  32. static void testAddLast() {
  33. ListSize list;
  34. initListSize(&list);
  35. addListDataSize(&list, 4);
  36. addListDataSize(&list, 3);
  37. addLastListDataSize(&list);
  38. TEST_SIZE(4, *getListIndexSize(&list, 0));
  39. TEST_SIZE(3, *getListIndexSize(&list, 1));
  40. TEST_SIZE(3, *getListIndexSize(&list, 2));
  41. TEST_SIZE(3, list.length);
  42. destroyListSize(&list);
  43. }
  44. static void testAddReplace() {
  45. ListSize list;
  46. initListSize(&list);
  47. addListDataSize(&list, 5);
  48. *getListIndexSize(&list, 0) = 3;
  49. TEST_SIZE(3, *getListIndexSize(&list, 0));
  50. destroyListSize(&list);
  51. }
  52. static void testClear() {
  53. ListSize list;
  54. initListSize(&list);
  55. addListDataSize(&list, 5);
  56. addListDataSize(&list, 4);
  57. clearListSize(&list);
  58. TEST_SIZE(0, list.length);
  59. destroyListSize(&list);
  60. }
  61. static void testBigAdd(bool light) {
  62. size_t limit = light ? 10000 : 100000;
  63. ListSize list;
  64. initListSize(&list);
  65. for(size_t i = 0; i < limit; i++) {
  66. addListDataSize(&list, i);
  67. }
  68. for(size_t i = 0; i < list.length; i++) {
  69. TEST_SIZE(i, *getListIndexSize(&list, i));
  70. }
  71. TEST_SIZE(limit, list.length);
  72. destroyListSize(&list);
  73. }
  74. static void testToString1() {
  75. ListSize list;
  76. initListSize(&list);
  77. addListDataSize(&list, 1);
  78. addListDataSize(&list, 243);
  79. addListDataSize(&list, 423);
  80. char buffer[128];
  81. size_t n = toStringListSize(&list, buffer, sizeof(buffer),
  82. (ToStringSize)toStringSize);
  83. TEST_SIZE(13, n);
  84. TEST_STRING("[1, 243, 423]", buffer);
  85. destroyListSize(&list);
  86. }
  87. static void testToString2() {
  88. ListSize list;
  89. initListSize(&list);
  90. addListDataSize(&list, 1);
  91. char buffer[128];
  92. size_t n = toStringListSize(&list, buffer, sizeof(buffer),
  93. (ToStringSize)toStringSize);
  94. TEST_SIZE(3, n);
  95. TEST_STRING("[1]", buffer);
  96. destroyListSize(&list);
  97. }
  98. static void testToString3() {
  99. ListSize list;
  100. initListSize(&list);
  101. char buffer[128];
  102. size_t n = toStringListSize(&list, buffer, sizeof(buffer),
  103. (ToStringSize)toStringSize);
  104. TEST_SIZE(2, n);
  105. TEST_STRING("[]", buffer);
  106. destroyListSize(&list);
  107. }
  108. static void testRemoveBySwap() {
  109. ListSize list;
  110. initListSize(&list);
  111. addListDataSize(&list, 4);
  112. addListDataSize(&list, 3);
  113. addListDataSize(&list, 2);
  114. removeListIndexBySwapSize(&list, 0);
  115. TEST_SIZE(2, *getListIndexSize(&list, 0));
  116. TEST_SIZE(3, *getListIndexSize(&list, 1));
  117. TEST_SIZE(2, list.length);
  118. removeListIndexBySwapSize(&list, 1);
  119. TEST_SIZE(2, *getListIndexSize(&list, 0));
  120. TEST_SIZE(1, list.length);
  121. removeListIndexBySwapSize(&list, 0);
  122. TEST_SIZE(0, list.length);
  123. destroyListSize(&list);
  124. }
  125. static void testRemove() {
  126. ListSize list;
  127. initListSize(&list);
  128. addListDataSize(&list, 4);
  129. addListDataSize(&list, 3);
  130. addListDataSize(&list, 2);
  131. removeListIndexSize(&list, 0);
  132. TEST_SIZE(3, *getListIndexSize(&list, 0));
  133. TEST_SIZE(2, *getListIndexSize(&list, 1));
  134. TEST_SIZE(2, list.length);
  135. removeListIndexSize(&list, 1);
  136. TEST_SIZE(3, *getListIndexSize(&list, 0));
  137. TEST_SIZE(1, list.length);
  138. removeListIndexSize(&list, 0);
  139. TEST_SIZE(0, list.length);
  140. destroyListSize(&list);
  141. }
  142. static void testRemoveLast() {
  143. ListSize list;
  144. initListSize(&list);
  145. addListDataSize(&list, 4);
  146. addListDataSize(&list, 3);
  147. addListDataSize(&list, 2);
  148. removeListLastSize(&list);
  149. TEST_SIZE(4, *getListIndexSize(&list, 0));
  150. TEST_SIZE(3, *getListIndexSize(&list, 1));
  151. TEST_SIZE(2, list.length);
  152. removeListLastSize(&list);
  153. TEST_SIZE(4, *getListIndexSize(&list, 0));
  154. TEST_SIZE(1, list.length);
  155. removeListLastSize(&list);
  156. TEST_SIZE(0, list.length);
  157. destroyListSize(&list);
  158. }
  159. static void testInvalidReserve() {
  160. ListSize list;
  161. initListSize(&list);
  162. reserveListEntriesSize(&list, 0);
  163. destroyListSize(&list);
  164. }
  165. static void testStruct() {
  166. ListV3 list;
  167. Vector3 v = {{1, 2, 3}};
  168. initListV3(&list);
  169. addListDataV3(&list, v);
  170. addListDataV3(&list, (Vector3){2, 3, 4});
  171. char buffer[128];
  172. size_t n = toStringListV3(&list, buffer, sizeof(buffer), coreToStringV3);
  173. TEST_SIZE(46, n);
  174. TEST_STRING("[[1.000, 2.000, 3.000], [2.000, 3.000, 4.000]]", buffer);
  175. addLastListDataV3(&list);
  176. addLastListDataV3(&list);
  177. TEST_SIZE(4, (size_t)(getListEndV3(&list) - getListStartV3(&list)));
  178. removeListIndexV3(&list, 1);
  179. removeListIndexBySwapV3(&list, 1);
  180. removeListLastV3(&list);
  181. Vector3* entry = getListIndexV3(&list, 0);
  182. TEST_V3(&v, entry);
  183. clearListV3(&list);
  184. TEST_SIZE(0, list.length);
  185. destroyListV3(&list);
  186. }
  187. static void testIntList() {
  188. ListInt list;
  189. initListInt(&list);
  190. addListDataInt(&list, 5);
  191. addListDataInt(&list, 7);
  192. char buffer[128];
  193. size_t n = toStringListInt(&list, buffer, sizeof(buffer),
  194. (ToStringInt)coreToStringInt);
  195. TEST_SIZE(6, n);
  196. TEST_STRING("[5, 7]", buffer);
  197. addLastListDataInt(&list);
  198. addLastListDataInt(&list);
  199. TEST_SIZE(4, (size_t)(getListEndInt(&list) - getListStartInt(&list)));
  200. removeListIndexInt(&list, 1);
  201. removeListIndexBySwapInt(&list, 1);
  202. removeListLastInt(&list);
  203. int* entry = getListIndexInt(&list, 0);
  204. TEST_INT(5, *entry);
  205. clearListInt(&list);
  206. TEST_SIZE(0, list.length);
  207. destroyListInt(&list);
  208. }
  209. void testList(bool light) {
  210. testAdd();
  211. testMultipleAdd();
  212. testAddLast();
  213. testAddReplace();
  214. testClear();
  215. testBigAdd(light);
  216. testToString1();
  217. testToString2();
  218. testToString3();
  219. testRemoveBySwap();
  220. testRemove();
  221. testRemoveLast();
  222. testInvalidReserve();
  223. testStruct();
  224. testIntList();
  225. }