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); }
|
void dlist_destroypsv(DList* dlist) { free(dlist); }
|
||||||
|
|
||||||
// Check whether the buffer is overflowing and resize it if necessary.
|
// Check whether the buffer is about to overflow and resize it if necessary.
|
||||||
void dlist_check_resz(DList* dlist, size_t ln) {
|
void dlist_check_resz(DList* dlist) {
|
||||||
while (dlist->ln + ln + 1 > dlist->sz) {
|
while ((dlist->ln + 1) * sizeof(void*) >= dlist->sz) {
|
||||||
// Double the buffer size when overflown.
|
// Double the buffer size when overflown.
|
||||||
dlist->sz *= 2;
|
dlist->sz *= 2;
|
||||||
dlist->buf = realloc(dlist->buf, dlist->sz);
|
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) {
|
void dlist_append(DList* dest, void* src) {
|
||||||
dlist_check_resz(dest, 1);
|
dlist_check_resz(dest);
|
||||||
|
|
||||||
dest->buf[dest->ln] = src;
|
dest->buf[dest->ln] = src;
|
||||||
dest->ln += 1;
|
dest->ln++;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define DLIST_INITSZ 128
|
#define DLIST_INITSZ 128 * sizeof(void*)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void** buf; // The buffer containing the list.
|
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