ListTests.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #define IMPORT_CORE
  2. #include "../Tests.h"
  3. #include "core/List.h"
  4. #include "core/ToString.h"
  5. #include "core/Vector.h"
  6. static void testAdd() {
  7. List list;
  8. initList(&list, sizeof(size_t));
  9. addListType(&list, size_t, 5);
  10. TEST_SIZE(5, getTypedListIndex(&list, 0, size_t));
  11. TEST_SIZE(1, list.length);
  12. destroyList(&list);
  13. }
  14. static void testMultipleAdd() {
  15. List list;
  16. initList(&list, sizeof(size_t));
  17. addListType(&list, size_t, 4);
  18. addListType(&list, size_t, 3);
  19. addListType(&list, size_t, 2);
  20. TEST_SIZE(4, getTypedListIndex(&list, 0, size_t));
  21. TEST_SIZE(3, getTypedListIndex(&list, 1, size_t));
  22. TEST_SIZE(2, getTypedListIndex(&list, 2, size_t));
  23. TEST_SIZE(2, getTypedListLast(&list, size_t));
  24. TEST_SIZE(3, list.length);
  25. destroyList(&list);
  26. }
  27. static void testAddLast() {
  28. List list;
  29. initList(&list, sizeof(size_t));
  30. addListType(&list, size_t, 4);
  31. addListType(&list, size_t, 3);
  32. addLastListData(&list);
  33. TEST_SIZE(4, getTypedListIndex(&list, 0, size_t));
  34. TEST_SIZE(3, getTypedListIndex(&list, 1, size_t));
  35. TEST_SIZE(3, getTypedListIndex(&list, 2, size_t));
  36. TEST_SIZE(3, list.length);
  37. destroyList(&list);
  38. }
  39. static void testAddReplace() {
  40. List list;
  41. initList(&list, sizeof(size_t));
  42. addListType(&list, size_t, 5);
  43. getTypedListIndex(&list, 0, size_t) = 3;
  44. TEST_SIZE(3, getTypedListIndex(&list, 0, size_t));
  45. destroyList(&list);
  46. }
  47. static void testClear() {
  48. List list;
  49. initList(&list, sizeof(size_t));
  50. addListType(&list, size_t, 5);
  51. addListType(&list, size_t, 4);
  52. clearList(&list);
  53. TEST_SIZE(0, list.length);
  54. destroyList(&list);
  55. }
  56. static void testBigAdd(bool light) {
  57. size_t limit = light ? 10000 : 100000;
  58. List list;
  59. initList(&list, sizeof(size_t));
  60. for(size_t i = 0; i < limit; i++) {
  61. addListType(&list, size_t, i);
  62. }
  63. for(size_t i = 0; i < list.length; i++) {
  64. TEST_SIZE(i, getTypedListIndex(&list, i, size_t));
  65. }
  66. TEST_SIZE(limit, list.length);
  67. destroyList(&list);
  68. }
  69. static void testToString1() {
  70. List list;
  71. initList(&list, sizeof(size_t));
  72. addListType(&list, size_t, 1);
  73. addListType(&list, size_t, 243);
  74. addListType(&list, size_t, 423);
  75. char buffer[128];
  76. size_t n = toString(&list, buffer, sizeof(buffer), toStringSize);
  77. TEST_SIZE(13, n);
  78. TEST_STRING("[1, 243, 423]", buffer);
  79. destroyList(&list);
  80. }
  81. static void testToString2() {
  82. List list;
  83. initList(&list, sizeof(size_t));
  84. addListType(&list, size_t, 1);
  85. char buffer[128];
  86. size_t n = toString(&list, buffer, sizeof(buffer), toStringSize);
  87. TEST_SIZE(3, n);
  88. TEST_STRING("[1]", buffer);
  89. destroyList(&list);
  90. }
  91. static void testToString3() {
  92. List list;
  93. initList(&list, sizeof(size_t));
  94. char buffer[128];
  95. size_t n = toString(&list, buffer, sizeof(buffer), toStringSize);
  96. TEST_SIZE(2, n);
  97. TEST_STRING("[]", buffer);
  98. destroyList(&list);
  99. }
  100. static void testRemoveBySwap() {
  101. List list;
  102. initList(&list, sizeof(size_t));
  103. addListType(&list, size_t, 4);
  104. addListType(&list, size_t, 3);
  105. addListType(&list, size_t, 2);
  106. removeListIndexBySwap(&list, 0);
  107. TEST_SIZE(2, getTypedListIndex(&list, 0, size_t));
  108. TEST_SIZE(3, getTypedListIndex(&list, 1, size_t));
  109. TEST_SIZE(2, list.length);
  110. removeListIndexBySwap(&list, 1);
  111. TEST_SIZE(2, getTypedListIndex(&list, 0, size_t));
  112. TEST_SIZE(1, list.length);
  113. removeListIndexBySwap(&list, 0);
  114. TEST_SIZE(0, list.length);
  115. destroyList(&list);
  116. }
  117. static void testRemove() {
  118. List list;
  119. initList(&list, sizeof(size_t));
  120. addListType(&list, size_t, 4);
  121. addListType(&list, size_t, 3);
  122. addListType(&list, size_t, 2);
  123. removeListIndex(&list, 0);
  124. TEST_SIZE(3, getTypedListIndex(&list, 0, size_t));
  125. TEST_SIZE(2, getTypedListIndex(&list, 1, size_t));
  126. TEST_SIZE(2, list.length);
  127. removeListIndex(&list, 1);
  128. TEST_SIZE(3, getTypedListIndex(&list, 0, size_t));
  129. TEST_SIZE(1, list.length);
  130. removeListIndex(&list, 0);
  131. TEST_SIZE(0, list.length);
  132. destroyList(&list);
  133. }
  134. static void testRemoveLast() {
  135. List list;
  136. initList(&list, sizeof(size_t));
  137. addListType(&list, size_t, 4);
  138. addListType(&list, size_t, 3);
  139. addListType(&list, size_t, 2);
  140. removeListLast(&list);
  141. TEST_SIZE(4, getTypedListIndex(&list, 0, size_t));
  142. TEST_SIZE(3, getTypedListIndex(&list, 1, size_t));
  143. TEST_SIZE(2, list.length);
  144. removeListLast(&list);
  145. TEST_SIZE(4, getTypedListIndex(&list, 0, size_t));
  146. TEST_SIZE(1, list.length);
  147. removeListLast(&list);
  148. TEST_SIZE(0, list.length);
  149. destroyList(&list);
  150. }
  151. static void testInvalidReserve() {
  152. List list;
  153. initList(&list, sizeof(size_t));
  154. reserveListEntries(&list, 0);
  155. destroyList(&list);
  156. }
  157. static void testStruct() {
  158. List list;
  159. Vector3 v = {{1, 2, 3}};
  160. initList(&list, sizeof(v));
  161. addListData(&list, &v);
  162. addListType(&list, Vector3, {2, 3, 4});
  163. Vector3* entry = getListIndex(&list, 0);
  164. TEST_V3(&v, entry);
  165. destroyList(&list);
  166. }
  167. void testList(bool light) {
  168. testAdd();
  169. testMultipleAdd();
  170. testAddLast();
  171. testAddReplace();
  172. testClear();
  173. testBigAdd(light);
  174. testToString1();
  175. testToString2();
  176. testToString3();
  177. testRemoveBySwap();
  178. testRemove();
  179. testRemoveLast();
  180. testInvalidReserve();
  181. testStruct();
  182. }