#include #include #include #include #include #include "../Chains_across_the_Island/Fundamentals/basics/basics.h" // Test pour list_append Test(basics_suite, test_append) { struct list *l = NULL; l = list_append(l, 42); cr_assert_not_null(l, "La liste ne doit pas être NULL après le premier ajout."); cr_assert_eq(l->data, 42, "La donnée du premier nœud doit être 42."); l = list_append(l, 7); cr_assert_not_null(l->next, "Le deuxième nœud doit exister."); cr_assert_eq(l->next->data, 7, "La donnée du deuxième nœud doit être 7."); list_destroy(l); } // Test pour list_count Test(basics_suite, test_count) { struct list *l = NULL; cr_assert_eq(list_count(l), 0, "Une liste vide doit avoir une taille de 0."); l = list_append(l, 10); l = list_append(l, 20); l = list_append(l, 30); //printf("%i\n", list_count(l)); cr_assert_eq(list_count(l), 3, "La liste doit contenir 3 éléments."); // printf("%i\n", list_count(l)); list_destroy(l); } // Test pour list_insert Test(basics_suite, test_insert) { struct list *l = NULL; // Insertion dans une liste vide int res1 = list_insert(&l, 0, 100); cr_assert_eq(res1, 0, "L'insertion à l'index 0 doit réussir."); cr_assert_eq(l->data, 100, "La valeur insérée doit être 100."); // Insertion hors limite int res2 = list_insert(&l, 5, 200); cr_assert_eq(res2, 1, "L'insertion hors limite doit échouer et renvoyer 1."); list_destroy(l); } //Test pour list_get Test(basics_suite, test_get){ struct list *l = NULL; l = list_append(l, 30); // l = [30] -> NULL l = list_append(l, 20); // l = [20] -> [30] -> NULL l = list_append(l, 10); // l = [10] -> [20] -> [30] -> NULL struct list *rslt = list_get(l,0); cr_assert_eq(rslt->data, 10, "pointer to node with data=10"); rslt = list_get(l, 2); cr_assert_eq(rslt->data, 30, "pointer to node with data=30"); rslt = list_get(l, 5); cr_assert_null(rslt, "Poit doit etre null"); list_destroy(l); list_destroy(rslt); } //Test list_find Test(basics_suite, test_find){ struct list *l = NULL; l = list_append(l, 3); l = list_append(l, 7); l = list_append(l, 1); struct list *rslt = list_find(l, 7); cr_assert_eq(rslt->data, 7, "pointer to node with data=7"); rslt = list_find(l, 42); cr_assert_null(rslt, "pointeur doit etre null"); list_destroy(l); list_destroy(rslt); } //Test list_delete_at Test(basics_suite, test_delete_at){ struct list *l = NULL; l = list_append(l, 30); l = list_append(l, 20); l = list_append(l, 10); struct list *rslt = NULL; rslt = list_delete_at(&l, 1); // returns pointer to node with data=20, l = [10] -> [30] cr_assert_eq(rslt->data, 20, "La data du noeud supprimé doit etre de 20"); size_t count = 0; count = list_count(l); cr_assert_eq(count, 2, "La taille de la liste doit etre de 2"); rslt = list_get(l, 0); cr_assert_eq(rslt->data, 10, "La data du noeud 1 doit etre de 10"); rslt = list_get(l, 1); cr_assert_eq(rslt->data, 30, "La data du noeud 2 doit etre de 30"); rslt = list_get(l, 3); cr_assert_null(rslt, "Le pointeur doit etre null"); list_destroy(l); list_destroy(rslt); } //Test list_remove Test(basics_suite, test_list_remove){ struct list *l = NULL; l = list_append(l, 7); l = list_append(l, 3); l = list_append(l, 7); l = list_append(l, 1); int rm = 0; struct list *tmp = l; rm = list_remove(&l, 7); // returns 1, l = [1] -> [3] -> [7] cr_assert_eq(rm, 1, "Le noeud 7 doit etre supprimé"); tmp = list_get(l, 0); cr_assert_eq(tmp->data, 1, "Le noeud 1 a changé !"); tmp = list_get(l, 1); cr_assert_eq(tmp->data, 3, "Le noeud 2 doit etre egal a 3"); tmp = list_get(l, 2); cr_assert_eq(tmp->data, 7, "Le 3 eme noeud doit etre de 7"); l = tmp; rm = list_remove(&l, 42); // returns 0, list unchanged cr_assert_eq(rm, 0, "Doit renvoyer 0 !"); cr_assert_eq(l, tmp, "La liste ne doit pas changer"); list_destroy(l); list_destroy(tmp); }