Initial commit
This commit is contained in:
141
test/test_list.c
Normal file
141
test/test_list.c
Normal file
@ -0,0 +1,141 @@
|
||||
#include "alloc.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <refcount/list.h>
|
||||
#include <string.h>
|
||||
|
||||
int main() {
|
||||
refcount_global_allocator = &COUNTING_ALLOCATOR;
|
||||
|
||||
assert(refcount_list_length(NULL) == 0);
|
||||
refcount_list_free(NULL, counting_free);
|
||||
|
||||
check_allocator_status();
|
||||
|
||||
RefcountList *l = NULL;
|
||||
l = refcount_list_push(l, counting_strdup("str1"));
|
||||
assert(!l->prev);
|
||||
assert(refcount_list_length(l) == 1);
|
||||
assert(strcmp(refcount_list_peek(l), "str1") == 0);
|
||||
assert(refcount_list_peek(l) == refcount_list_nth(l, 0));
|
||||
|
||||
l = refcount_list_push(l, counting_strdup("str2"));
|
||||
assert(!l->prev);
|
||||
assert(l == l->next->prev);
|
||||
assert(refcount_list_length(l) == 2);
|
||||
assert(strcmp(refcount_list_peek(l), "str2") == 0);
|
||||
assert(refcount_list_peek(l) == refcount_list_nth(l, 0));
|
||||
|
||||
l = refcount_list_push(l, counting_strdup("str3"));
|
||||
assert(refcount_list_length(l) == 3);
|
||||
assert(strcmp(refcount_list_peek(l), "str3") == 0);
|
||||
assert(refcount_list_peek(l) == refcount_list_nth(l, 0));
|
||||
|
||||
l = refcount_list_push_back(l, counting_strdup("str4"));
|
||||
assert(refcount_list_length(l) == 4);
|
||||
assert(strcmp(refcount_list_peek(l), "str3") == 0);
|
||||
assert(refcount_list_drop(l, 2) == refcount_list_drop(l, 3)->prev);
|
||||
assert(refcount_list_drop(l, 2) == refcount_list_drop(l, 3)->prev);
|
||||
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 2), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 3), "str4") == 0);
|
||||
assert(!refcount_list_nth(l, 4));
|
||||
|
||||
RefcountList *sl = refcount_list_drop(l, 2);
|
||||
assert(strcmp(refcount_list_nth(sl, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(sl, 1), "str4") == 0);
|
||||
|
||||
sl = sl->next;
|
||||
l = refcount_list_remove(l, sl->prev, counting_free);
|
||||
assert(sl->prev == refcount_list_drop(l, 1));
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 2), "str4") == 0);
|
||||
assert(!refcount_list_nth(l, 3));
|
||||
|
||||
l = refcount_list_pop(l, counting_free);
|
||||
assert(refcount_list_length(l) == 2);
|
||||
assert(strcmp(refcount_list_peek(l), "str2") == 0);
|
||||
|
||||
l = refcount_list_pop(l, counting_free);
|
||||
assert(refcount_list_length(l) == 1);
|
||||
assert(strcmp(refcount_list_peek(l), "str4") == 0);
|
||||
|
||||
l = refcount_list_pop(l, counting_free);
|
||||
assert(!l);
|
||||
assert(refcount_list_length(l) == 0);
|
||||
|
||||
l = refcount_list_build(5, counting_strdup("str1"), counting_strdup("str2"),
|
||||
counting_strdup("str3"), counting_strdup("str4"),
|
||||
counting_strdup("str5"));
|
||||
assert(refcount_list_length(l) == 5);
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 2), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 3), "str4") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 4), "str5") == 0);
|
||||
|
||||
RefcountList *l2 = refcount_list_copy(l, (void *) counting_strdup);
|
||||
|
||||
refcount_list_free(l, counting_free);
|
||||
|
||||
assert(refcount_list_length(l2) == 5);
|
||||
assert(strcmp(refcount_list_nth(l2, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 1), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 2), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 3), "str4") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 4), "str5") == 0);
|
||||
|
||||
l2 = refcount_list_reverse(l2);
|
||||
|
||||
assert(refcount_list_length(l2) == 5);
|
||||
assert(strcmp(refcount_list_nth(l2, 0), "str5") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 1), "str4") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 2), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 3), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l2, 4), "str1") == 0);
|
||||
|
||||
refcount_list_free(l2, counting_free);
|
||||
|
||||
l = refcount_list_build(2, counting_strdup("str1"),
|
||||
counting_strdup("str2"));
|
||||
l2 = refcount_list_build(2, counting_strdup("str3"),
|
||||
counting_strdup("str4"));
|
||||
l = refcount_list_join(l, l2);
|
||||
assert(refcount_list_length(l) == 4);
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 2), "str3") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 3), "str4") == 0);
|
||||
|
||||
sl = refcount_list_drop(l, 3);
|
||||
l = refcount_list_remove(l, sl, counting_free);
|
||||
assert(refcount_list_length(l) == 3);
|
||||
assert(strcmp(refcount_list_nth(l, 2), "str3") == 0);
|
||||
assert(!refcount_list_nth(l, 3));
|
||||
|
||||
refcount_list_free(l, counting_free);
|
||||
|
||||
l = refcount_list_build(2, counting_strdup("str1"),
|
||||
counting_strdup("str2"));
|
||||
l = refcount_list_join(NULL, l);
|
||||
assert(refcount_list_length(l) == 2);
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
|
||||
refcount_list_free(l, counting_free);
|
||||
|
||||
l = refcount_list_build(2, counting_strdup("str1"),
|
||||
counting_strdup("str2"));
|
||||
l = refcount_list_join(l, NULL);
|
||||
assert(refcount_list_length(l) == 2);
|
||||
assert(strcmp(refcount_list_nth(l, 0), "str1") == 0);
|
||||
assert(strcmp(refcount_list_nth(l, 1), "str2") == 0);
|
||||
|
||||
refcount_list_free(l, counting_free);
|
||||
|
||||
check_allocator_status();
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user