#include "test.h" #include "libft.h" #include #include /* Helper for comparing ints stored as void* */ static int cmp_int(void *a, void *b) { return (*(int*)a != *(int*)b); } /* Helper for freeing ints stored as void* (no-op here, but for completeness) */ static void del_int(void *a) { (void)a; } /* Helper for iterating: increments the int value */ static void inc_int(void *a) { (*(int*)a)++; } /* ---- TESTS ---- */ TEST(test_lstnew) { int x = 42; t_list *node = ft_lstnew(&x); ASSERT(node != NULL); ASSERT(node->data == &x); ASSERT(node->next == NULL); free(node); } TEST(test_lstpush_and_size) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstpush(&lst, ft_lstnew(&c)); ASSERT(ft_lstsize(lst) == 3); ft_lstclear(&lst); } TEST(test_lstunshift) { int a = 1, b = 2; t_list *lst = NULL; ft_lstunshift(&lst, ft_lstnew(&a)); ft_lstunshift(&lst, ft_lstnew(&b)); // b should be at head ASSERT(lst && lst->data == &b); ft_lstclear(&lst); } TEST(test_lstpop) { int a = 1, b = 2; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); t_list *node = ft_lstpop(&lst); ASSERT(node && node->data == &b); free(node); ASSERT(ft_lstsize(lst) == 1); ft_lstclear(&lst); } TEST(test_lstshift) { int a = 1, b = 2; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); t_list *node = ft_lstshift(&lst); ASSERT(node && node->data == &a); free(node); ASSERT(ft_lstsize(lst) == 1); ft_lstclear(&lst); } TEST(test_lstclear) { int a = 1, b = 2; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstclear(&lst); ASSERT(lst == NULL); } TEST(test_lstreverse) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstpush(&lst, ft_lstnew(&c)); // c->b->a ft_lstreverse(&lst); // should be a->b->c ASSERT(lst && *(int*)lst->data == 1); ASSERT(lst->next && *(int*)lst->next->data == 2); ASSERT(lst->next->next && *(int*)lst->next->next->data == 3); ft_lstclear(&lst); } TEST(test_lstempty) { t_list *lst = NULL; ASSERT(ft_lstempty(lst) == 1); int x = 42; lst = ft_lstnew(&x); ASSERT(ft_lstempty(lst) == 0); ft_lstclear(&lst); } TEST(test_lstiter) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstpush(&lst, ft_lstnew(&c)); ft_lstiter(lst, inc_int); ASSERT(a == 2 && b == 3 && c == 4); ft_lstclear(&lst); } TEST(test_lstrm) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstpush(&lst, ft_lstnew(&c)); // c->b->a ft_lstrm(&lst, &b, cmp_int, del_int); // remove b ASSERT(ft_lstsize(lst) == 2); ASSERT(ft_lstfind(lst, &b, cmp_int) == NULL); ft_lstclear(&lst); } TEST(test_lstfind) { int a = 1, b = 2; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); t_list *found = ft_lstfind(lst, &b, cmp_int); ASSERT(found && found->data == &b); ft_lstclear(&lst); } TEST(test_lstinsert) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); // a ft_lstinsert(&lst, ft_lstnew(&b), 1); // a->b ft_lstinsert(&lst, ft_lstnew(&c), 1); // a->c->b ASSERT(ft_lstsize(lst) == 3); ASSERT(*(int*)ft_lstget(lst, 0)->data == 1); ASSERT(*(int*)ft_lstget(lst, 1)->data == 3); ASSERT(*(int*)ft_lstget(lst, 2)->data == 2); ft_lstclear(&lst); } TEST(test_lstget) { int a = 1, b = 2, c = 3; t_list *lst = NULL; ft_lstpush(&lst, ft_lstnew(&a)); ft_lstpush(&lst, ft_lstnew(&b)); ft_lstpush(&lst, ft_lstnew(&c)); // c->b->a ASSERT(*(int*)ft_lstget(lst, 0)->data == 3); ASSERT(*(int*)ft_lstget(lst, 1)->data == 2); ASSERT(*(int*)ft_lstget(lst, 2)->data == 1); ASSERT(ft_lstget(lst, 3) == NULL); ft_lstclear(&lst); } /* ---- MAIN ---- */ int main(void) { RUN_TEST(test_lstnew); RUN_TEST(test_lstpush_and_size); RUN_TEST(test_lstunshift); RUN_TEST(test_lstpop); RUN_TEST(test_lstshift); RUN_TEST(test_lstclear); RUN_TEST(test_lstreverse); RUN_TEST(test_lstempty); RUN_TEST(test_lstiter); RUN_TEST(test_lstrm); RUN_TEST(test_lstfind); RUN_TEST(test_lstinsert); RUN_TEST(test_lstget); return 0; }