From be3baee74e6eb7df16fd15769a61c6b92230903f Mon Sep 17 00:00:00 2001 From: Jacob Signorovitch Date: Tue, 4 Feb 2025 16:40:58 -0500 Subject: [PATCH] Fixed dlists. Also added tests. --- src/dlist.c | 10 +++++----- src/include/dlist.h | 2 +- test/test_dlist.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 test/test_dlist.c diff --git a/src/dlist.c b/src/dlist.c index b87d926..51f38d2 100644 --- a/src/dlist.c +++ b/src/dlist.c @@ -21,9 +21,9 @@ void dlist_destroy(DList* dlist) { void dlist_destroypsv(DList* dlist) { free(dlist); } -// Check whether the buffer is overflowing and resize it if necessary. -void dlist_check_resz(DList* dlist, size_t ln) { - while (dlist->ln + ln + 1 > dlist->sz) { +// Check whether the buffer is about to overflow and resize it if necessary. +void dlist_check_resz(DList* dlist) { + while ((dlist->ln + 1) * sizeof(void*) >= dlist->sz) { // Double the buffer size when overflown. dlist->sz *= 2; dlist->buf = realloc(dlist->buf, dlist->sz); @@ -34,8 +34,8 @@ void dlist_check_resz(DList* dlist, size_t ln) { } void dlist_append(DList* dest, void* src) { - dlist_check_resz(dest, 1); + dlist_check_resz(dest); dest->buf[dest->ln] = src; - dest->ln += 1; + dest->ln++; } diff --git a/src/include/dlist.h b/src/include/dlist.h index 0c8a8ee..dd57e36 100644 --- a/src/include/dlist.h +++ b/src/include/dlist.h @@ -3,7 +3,7 @@ #include -#define DLIST_INITSZ 128 +#define DLIST_INITSZ 128 * sizeof(void*) typedef struct { void** buf; // The buffer containing the list. diff --git a/test/test_dlist.c b/test/test_dlist.c new file mode 100644 index 0000000..f840125 --- /dev/null +++ b/test/test_dlist.c @@ -0,0 +1,41 @@ +#include "../src/include/dlist.h" +#include "Unity/src/unity.h" + +void setUp() {}; +void tearDown() {}; + +void test_dlist_init() { + DList* dlist = dlist_init(); + TEST_ASSERT_EQUAL(0, dlist->ln); + TEST_ASSERT_EQUAL(DLIST_INITSZ, dlist->sz); +} + +void test_dlist_append() { + DList* dlist; + + // Test simple appending. + dlist = dlist_init(); + int* n = malloc(sizeof(int)); + *n = 1; + dlist_append(dlist, n); + + TEST_ASSERT_EQUAL(n, dlist->buf[0]); + TEST_ASSERT_EQUAL(1, dlist->ln); + + dlist_destroy(dlist); + + // Test buffer doubling. + dlist = dlist_init(); + + for (int i = 0; i < 129; i++) dlist_append(dlist, &i); + + TEST_ASSERT_EQUAL(129, dlist->ln); + TEST_ASSERT_EQUAL(DLIST_INITSZ*2, dlist->sz); +} + +int main() { + UNITY_BEGIN(); + RUN_TEST(test_dlist_init); + RUN_TEST(test_dlist_append); + return UNITY_END(); +}