#define IMPORT_CORE #include "../Tests.h" #include "core/List.h" #include "core/ToString.h" #include "core/Vector.h" static void testAdd() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 5); TEST_SIZE(5, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(1, list.length); destroyList(&list); } static void testMultipleAdd() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 4); addListType(&list, size_t, 3); addListType(&list, size_t, 2); TEST_SIZE(4, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(3, getTypedListIndex(&list, 1, size_t)); TEST_SIZE(2, getTypedListIndex(&list, 2, size_t)); TEST_SIZE(2, getTypedListLast(&list, size_t)); TEST_SIZE(3, list.length); destroyList(&list); } static void testAddLast() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 4); addListType(&list, size_t, 3); addLastListData(&list); TEST_SIZE(4, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(3, getTypedListIndex(&list, 1, size_t)); TEST_SIZE(3, getTypedListIndex(&list, 2, size_t)); TEST_SIZE(3, list.length); destroyList(&list); } static void testAddReplace() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 5); getTypedListIndex(&list, 0, size_t) = 3; TEST_SIZE(3, getTypedListIndex(&list, 0, size_t)); destroyList(&list); } static void testClear() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 5); addListType(&list, size_t, 4); clearList(&list); TEST_SIZE(0, list.length); destroyList(&list); } static void testBigAdd(bool light) { size_t limit = light ? 10000 : 100000; List list; initList(&list, sizeof(size_t)); for(size_t i = 0; i < limit; i++) { addListType(&list, size_t, i); } for(size_t i = 0; i < list.length; i++) { TEST_SIZE(i, getTypedListIndex(&list, i, size_t)); } TEST_SIZE(limit, list.length); destroyList(&list); } static void testToString1() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 1); addListType(&list, size_t, 243); addListType(&list, size_t, 423); char buffer[128]; size_t n = toString(&list, buffer, sizeof(buffer), toStringSize); TEST_SIZE(13, n); TEST_STRING("[1, 243, 423]", buffer); destroyList(&list); } static void testToString2() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 1); char buffer[128]; size_t n = toString(&list, buffer, sizeof(buffer), toStringSize); TEST_SIZE(3, n); TEST_STRING("[1]", buffer); destroyList(&list); } static void testToString3() { List list; initList(&list, sizeof(size_t)); char buffer[128]; size_t n = toString(&list, buffer, sizeof(buffer), toStringSize); TEST_SIZE(2, n); TEST_STRING("[]", buffer); destroyList(&list); } static void testRemoveBySwap() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 4); addListType(&list, size_t, 3); addListType(&list, size_t, 2); removeListIndexBySwap(&list, 0); TEST_SIZE(2, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(3, getTypedListIndex(&list, 1, size_t)); TEST_SIZE(2, list.length); removeListIndexBySwap(&list, 1); TEST_SIZE(2, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(1, list.length); removeListIndexBySwap(&list, 0); TEST_SIZE(0, list.length); destroyList(&list); } static void testRemove() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 4); addListType(&list, size_t, 3); addListType(&list, size_t, 2); removeListIndex(&list, 0); TEST_SIZE(3, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(2, getTypedListIndex(&list, 1, size_t)); TEST_SIZE(2, list.length); removeListIndex(&list, 1); TEST_SIZE(3, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(1, list.length); removeListIndex(&list, 0); TEST_SIZE(0, list.length); destroyList(&list); } static void testRemoveLast() { List list; initList(&list, sizeof(size_t)); addListType(&list, size_t, 4); addListType(&list, size_t, 3); addListType(&list, size_t, 2); removeListLast(&list); TEST_SIZE(4, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(3, getTypedListIndex(&list, 1, size_t)); TEST_SIZE(2, list.length); removeListLast(&list); TEST_SIZE(4, getTypedListIndex(&list, 0, size_t)); TEST_SIZE(1, list.length); removeListLast(&list); TEST_SIZE(0, list.length); destroyList(&list); } static void testInvalidReserve() { List list; initList(&list, sizeof(size_t)); reserveListEntries(&list, 0); destroyList(&list); } static void testStruct() { List list; Vector3 v = {{1, 2, 3}}; initList(&list, sizeof(v)); addListData(&list, &v); addListType(&list, Vector3, {2, 3, 4}); Vector3* entry = getListIndex(&list, 0); TEST_V3(&v, entry); destroyList(&list); } void testList(bool light) { testAdd(); testMultipleAdd(); testAddLast(); testAddReplace(); testClear(); testBigAdd(light); testToString1(); testToString2(); testToString3(); testRemoveBySwap(); testRemove(); testRemoveLast(); testInvalidReserve(); testStruct(); }