ListTests.c 6.5 KB

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