Fixed dlists.

Also added tests.
This commit is contained in:
Jacob Signorovitch 2025-02-04 16:40:58 -05:00
parent d5a07fae56
commit be3baee74e
3 changed files with 47 additions and 6 deletions

View File

@ -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++;
}

View File

@ -3,7 +3,7 @@
#include <stdlib.h>
#define DLIST_INITSZ 128
#define DLIST_INITSZ 128 * sizeof(void*)
typedef struct {
void** buf; // The buffer containing the list.

41
test/test_dlist.c Normal file
View File

@ -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();
}