Fixed dlists.
Also added tests.
This commit is contained in:
parent
d5a07fae56
commit
be3baee74e
10
src/dlist.c
10
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++;
|
||||
}
|
||||
|
@ -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
41
test/test_dlist.c
Normal 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();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user