|
@@ -0,0 +1,268 @@
|
|
|
|
+#include "../Tests.h"
|
|
|
|
+#include "core/List.h"
|
|
|
|
+#include "core/Utility.h"
|
|
|
|
+
|
|
|
|
+static void testAdd() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 5, size_t);
|
|
|
|
+ CORE_TEST_SIZE(5, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(5, coreListGetC(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(1, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testMultipleAdd() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGet(&list, 2, size_t));
|
|
|
|
+ CORE_TEST_SIZE(4, coreListGetC(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGetC(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGetC(&list, 2, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testAddReplace() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 5, size_t);
|
|
|
|
+ coreListGet(&list, 0, size_t) = 3;
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testClear() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 5, size_t);
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreClearList(&list);
|
|
|
|
+ CORE_TEST_SIZE(0, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testShrink() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 5, size_t);
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+ CORE_TEST_TRUE(list.capacity >= 3);
|
|
|
|
+ coreShrinkList(&list);
|
|
|
|
+ CORE_TEST_SIZE(3, list.length);
|
|
|
|
+ CORE_TEST_SIZE(3, list.capacity);
|
|
|
|
+ CORE_TEST_SIZE(5, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(4, coreListGet(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 2, size_t));
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testBigAdd(bool light) {
|
|
|
|
+ size_t limit = light ? 10000 : 100000;
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ for(size_t i = 0; i < limit; i++) {
|
|
|
|
+ coreListAdd(&list, i, size_t);
|
|
|
|
+ }
|
|
|
|
+ for(size_t i = 0; i < list.length; i++) {
|
|
|
|
+ CORE_TEST_SIZE(i, coreListGet(&list, i, size_t));
|
|
|
|
+ }
|
|
|
|
+ CORE_TEST_SIZE(limit, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testCopy() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 1, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+
|
|
|
|
+ CoreList copy = CORE_LIST(0);
|
|
|
|
+ coreCopyList(©, &list);
|
|
|
|
+ coreCopyList(©, ©);
|
|
|
|
+ CORE_TEST_SIZE(list.length, copy.length);
|
|
|
|
+ size_t limit = coreMinSize(copy.length, list.length);
|
|
|
|
+ for(size_t i = 0; i < limit; i++) {
|
|
|
|
+ CORE_TEST_SIZE(coreListGet(&list, i, size_t),
|
|
|
|
+ coreListGet(©, i, size_t));
|
|
|
|
+ }
|
|
|
|
+ coreDestroyList(©);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testMove() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 1, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+
|
|
|
|
+ CoreList move = CORE_LIST(0);
|
|
|
|
+ coreMoveList(&move, &list);
|
|
|
|
+ coreMoveList(&move, &move);
|
|
|
|
+ CORE_TEST_SIZE(0, list.length);
|
|
|
|
+ CORE_TEST_SIZE(3, move.length);
|
|
|
|
+ CORE_TEST_SIZE(1, coreListGet(&move, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGet(&move, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&move, 2, size_t));
|
|
|
|
+ coreDestroyList(&move);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testToString1() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 1, size_t);
|
|
|
|
+ coreListAdd(&list, 243, size_t);
|
|
|
|
+ coreListAdd(&list, 423, size_t);
|
|
|
|
+ char buffer[128];
|
|
|
|
+ size_t n =
|
|
|
|
+ coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
|
|
|
|
+ CORE_TEST_SIZE(13, n);
|
|
|
|
+ CORE_TEST_STRING("[1, 243, 423]", buffer);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testToString2() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 1, size_t);
|
|
|
|
+ char buffer[128];
|
|
|
|
+ size_t n =
|
|
|
|
+ coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
|
|
|
|
+ CORE_TEST_SIZE(3, n);
|
|
|
|
+ CORE_TEST_STRING("[1]", buffer);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testToString3() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ char buffer[128];
|
|
|
|
+ size_t n =
|
|
|
|
+ coreToStringList(&list, buffer, sizeof(buffer), coreToStringSize);
|
|
|
|
+ CORE_TEST_SIZE(2, n);
|
|
|
|
+ CORE_TEST_STRING("[]", buffer);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testRemoveBySwap() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ coreListRemoveBySwap(&list, 0);
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, list.length);
|
|
|
|
+ coreListRemoveBySwap(&list, 1);
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(1, list.length);
|
|
|
|
+ coreListRemoveBySwap(&list, 0);
|
|
|
|
+ CORE_TEST_SIZE(0, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testRemove() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ coreListRemove(&list, 0);
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, coreListGet(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, list.length);
|
|
|
|
+ coreListRemove(&list, 1);
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(1, list.length);
|
|
|
|
+ coreListRemove(&list, 0);
|
|
|
|
+ CORE_TEST_SIZE(0, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testRemoveLast() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListAdd(&list, 4, size_t);
|
|
|
|
+ coreListAdd(&list, 3, size_t);
|
|
|
|
+ coreListAdd(&list, 2, size_t);
|
|
|
|
+ coreListRemoveLast(&list);
|
|
|
|
+ CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(3, coreListGet(&list, 1, size_t));
|
|
|
|
+ CORE_TEST_SIZE(2, list.length);
|
|
|
|
+ coreListRemoveLast(&list);
|
|
|
|
+ CORE_TEST_SIZE(4, coreListGet(&list, 0, size_t));
|
|
|
|
+ CORE_TEST_SIZE(1, list.length);
|
|
|
|
+ coreListRemoveLast(&list);
|
|
|
|
+ CORE_TEST_SIZE(0, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testResize() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreResizeListV(&list, 5, 10, size_t);
|
|
|
|
+ CORE_TEST_SIZE(5, list.length);
|
|
|
|
+ for(size_t i = 0; i < 5; i++) {
|
|
|
|
+ CORE_TEST_SIZE(10, coreListGet(&list, i, size_t));
|
|
|
|
+ }
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testDefaultResize() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreResizeList(&list, 5);
|
|
|
|
+ CORE_TEST_SIZE(5, list.length);
|
|
|
|
+ for(size_t i = 0; i < 5; i++) {
|
|
|
|
+ CORE_TEST_SIZE(0, coreListGet(&list, i, size_t));
|
|
|
|
+ }
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testInvalidReserve() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreListReserve(&list, 0);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testShrinkExact() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreResizeList(&list, 50);
|
|
|
|
+ coreShrinkList(&list);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testShrinkResize() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ coreResizeList(&list, 50);
|
|
|
|
+ CORE_TEST_SIZE(50, list.length);
|
|
|
|
+ coreResizeListV(&list, 20, 5, size_t);
|
|
|
|
+ CORE_TEST_SIZE(20, list.length);
|
|
|
|
+ coreResizeList(&list, 10);
|
|
|
|
+ CORE_TEST_SIZE(10, list.length);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void testCopyEmpty() {
|
|
|
|
+ CoreList list = CORE_LIST(sizeof(size_t));
|
|
|
|
+ CoreList copy = CORE_LIST(0);
|
|
|
|
+ coreCopyList(©, &list);
|
|
|
|
+ coreDestroyList(©);
|
|
|
|
+ coreDestroyList(&list);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void coreTestList(bool light) {
|
|
|
|
+ testAdd();
|
|
|
|
+ testMultipleAdd();
|
|
|
|
+ testAddReplace();
|
|
|
|
+ testClear();
|
|
|
|
+ testShrink();
|
|
|
|
+ testBigAdd(light);
|
|
|
|
+ testCopy();
|
|
|
|
+ testMove();
|
|
|
|
+ testToString1();
|
|
|
|
+ testToString2();
|
|
|
|
+ testToString3();
|
|
|
|
+ testRemoveBySwap();
|
|
|
|
+ testRemove();
|
|
|
|
+ testRemoveLast();
|
|
|
|
+ testResize();
|
|
|
|
+ testDefaultResize();
|
|
|
|
+ testInvalidReserve();
|
|
|
|
+ testShrinkExact();
|
|
|
|
+ testShrinkResize();
|
|
|
|
+ testCopyEmpty();
|
|
|
|
+}
|