#include #include #include #include #include "../Chains_across_the_Island/Fundamentals/basics/basics.h" #include "../Chains_across_the_Island/Fundamentals/double/double.h" #include // 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 peux pas etre null apres un ajout"); cr_assert_eq(l->data, 42, "la data du 1er noeud doit être 42"); l = list_append(l, 7); cr_assert_not_null(l->next, "le deuxieme noeud doit exister"); cr_assert_eq(l->data, 7, "Le premier noeud doit etre 7"); cr_assert_eq(l->next->data, 42, "Le second noeud doit etre 42"); list_destroy(l); } // Test pour list_count Test(basics_suite, test_count) { struct list *l = NULL; cr_assert_eq(list_count(l), 0, "doit renvoyer 0, c'est un liste vide"); l = list_append(l, 10); l = list_append(l, 20); l = list_append(l, 30); cr_assert_eq(list_count(l), 3, "La liste doit contenir 3 éléments."); list_destroy(l); } // Test pour list_insert Test(basics_suite, test_insert) { struct list *l = NULL; int res1 = list_insert(&l, 0, 100); cr_assert_eq(res1, 0, "L'insertion à l'index 0 doit réussir."); cr_assert_not_null(l, "La liste ne doit pas être NULL."); cr_assert_eq(l->data, 100, "La valeur insérée doit être 100."); int res2 = list_insert(&l, 5, 200); cr_assert_eq(res2, 1, "Out of Range !"); list_destroy(l); } //Test pour list_get Test(basics_suite, test_get){ struct list *l = NULL; l = list_append(l, 30); l = list_append(l, 20); l = list_append(l, 10); struct list *rslt = list_get(l, 0); cr_assert_not_null(rslt, "Le pointeur ne doit pas être NULL pour l'index 0"); cr_assert_eq(rslt->data, 10, "pointer to node with data=10"); rslt = list_get(l, 2); cr_assert_not_null(rslt, "Le pointeur ne doit pas être NULL pour l'index 2"); cr_assert_eq(rslt->data, 30, "pointer to node with data=30"); rslt = list_get(l, 5); cr_assert_null(rslt, "Le pointeur doit etre null"); list_destroy(l); } //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_not_null(rslt, "Le noeud doit être trouvé"); 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); } //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); // [10] -> [20] -> [30] struct list *rslt = NULL; rslt = list_delete_at(&l, 1); // Retire le 20. l devient [10] -> [30] cr_assert_not_null(rslt, "Le noeud retiré ne doit pas être NULL"); cr_assert_eq(rslt->data, 20, "La data du noeud supprimé doit etre de 20"); size_t count = list_count(l); cr_assert_eq(count, 2, "La taille de la liste doit etre de 2"); struct list *tmp = list_get(l, 0); cr_assert_not_null(tmp, "Le noeud 0 ne doit pas être NULL"); cr_assert_eq(tmp->data, 10, "La data du noeud 1 doit etre de 10"); tmp = list_get(l, 1); cr_assert_not_null(tmp, "Le noeud 1 ne doit pas être NULL"); cr_assert_eq(tmp->data, 30, "La data du noeud 2 doit etre de 30"); tmp = list_get(l, 3); cr_assert_null(tmp, "Le pointeur doit etre null"); list_destroy(l); free(rslt); // rslt est totalement détaché de l, on le libère avec un simple free() } //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); // [1] -> [7] -> [3] -> [7] int rm = list_remove(&l, 7); // Retire le premier 7. l devient [1] -> [3] -> [7] cr_assert_eq(rm, 1, "Le noeud 7 doit etre supprimé"); struct list *tmp = list_get(l, 0); cr_assert_not_null(tmp, "Le noeud 0 existe"); cr_assert_eq(tmp->data, 1, "Le noeud 1 a changé et devient 1 !"); tmp = list_get(l, 1); cr_assert_not_null(tmp, "Le noeud 1 existe"); cr_assert_eq(tmp->data, 3, "Le noeud 2 doit etre egal a 3"); tmp = list_get(l, 2); cr_assert_not_null(tmp, "Le noeud 2 existe"); cr_assert_eq(tmp->data,7, "Le 3 eme noeud doit etre de 7"); rm = list_remove(&l, 42); cr_assert_eq(rm, 0, "Doit renvoyer 0 car 42 n'existe pas !"); list_destroy(l); } // TEST POUR double void dlist_destroy(struct dlist *l){ struct dlist *tmp = l; struct dlist *nex = NULL; while(tmp != NULL) { nex = tmp->next; free(tmp); tmp = nex; } } int dlist_count(struct dlist *l){ struct dlist *tmp = l; int ind = 0; while(tmp != NULL) { ind ++; tmp = tmp->next; } return ind; } struct dlist *dlist_get(struct dlist *l, size_t index){ struct dlist *tmp = l; size_t ind = 0; while(tmp != NULL && ind < index){ tmp = tmp->next; ind ++; } return tmp; } //Test dlist_append Test(double_suite, test_append){ struct dlist *l = NULL; l = dlist_append(l, 3); // [3] cr_assert_not_null(l, "la liste ne peux pas etre null apres un ajout"); cr_assert_eq(l->data, 3, "la data du 1er noeud doit être 3"); l = dlist_append(l, 2); // [2] <-> [3] cr_assert_not_null(l->next, "le deuxieme noeud doit exister"); cr_assert_eq(l->data, 2, "Le premier noeud doit etre 2"); l = dlist_append(l, 1); // [1] <-> [2] <-> [3] cr_assert_not_null(l->next, "le troisieme noeud doit exister"); cr_assert_eq(l->data, 1, "Le premier noeud doit etre 1"); cr_assert_eq(l->next->data, 2, "Le second noeud doit etre 2"); dlist_destroy(l); } Test(double_suite, test_insert){ struct dlist *l = NULL; int res1 = dlist_insert(&l, 0, 100); cr_assert_eq(res1, 0, "L'insertion à l'index 0 doit réussir."); cr_assert_not_null(l, "La liste ne doit pas être NULL."); cr_assert_eq(l->data, 100, "La valeur insérée doit être 100."); int res2 = dlist_insert(&l, 5, 200); cr_assert_eq(res2, 1, "Out of Range !"); dlist_destroy(l); } Test(double_suite, test_delete_at){ struct dlist *l = NULL; l = dlist_append(l, 30); l = dlist_append(l, 20); l = dlist_append(l, 10); // [10] <-> [20] <-> [30] struct dlist *rslt = NULL; rslt = dlist_delete_at(&l, 1); // Retire le 20. l devient [10] -> [30] cr_assert_not_null(rslt, "Le noeud retiré ne doit pas être NULL"); cr_assert_eq(rslt->data, 20, "La data du noeud supprimé doit etre de 20"); size_t count = dlist_count(l); cr_assert_eq(count, 2, "La taille de la liste doit etre de 2"); struct dlist *tmp = dlist_get(l, 0); cr_assert_not_null(tmp, "Le noeud 0 ne doit pas être NULL"); cr_assert_eq(tmp->data, 10, "La data du noeud 1 doit etre de 10"); tmp = dlist_get(l, 1); cr_assert_not_null(tmp, "Le noeud 1 ne doit pas être NULL"); cr_assert_eq(tmp->data, 30, "La data du noeud 2 doit etre de 30"); tmp = dlist_get(l, 3); cr_assert_null(tmp, "Le pointeur doit etre null"); dlist_destroy(l); } Test(double_suite, test_remove){ struct dlist *l = NULL; l = dlist_append(l, 7); l = dlist_append(l, 3); l = dlist_append(l, 7); l = dlist_append(l, 1); // [1] <-> [7] <-> [3] <-> [7] int rm = dlist_remove(&l, 7); // Retire le premier 7. l devient [1] <-> [3] <-> [7] cr_assert_eq(rm, 1, "Le noeud 7 doit etre supprimé"); struct dlist *tmp = dlist_get(l, 0); cr_assert_not_null(tmp, "Le noeud 0 existe"); cr_assert_eq(tmp->data, 1, "Le noeud 1 a changé et devient 1 !"); tmp = dlist_get(l, 1); cr_assert_not_null(tmp, "Le noeud 1 existe"); cr_assert_eq(tmp->data, 3, "Le noeud 2 doit etre egal a 3"); tmp = dlist_get(l, 2); cr_assert_not_null(tmp, "Le noeud 2 existe"); cr_assert_eq(tmp->data,7, "Le 3 eme noeud doit etre de 7"); rm = dlist_remove(&l, 42); cr_assert_eq(rm, 0, "Doit renvoyer 0 car 42 n'existe pas !"); dlist_destroy(l); }