This repository has been archived on 2026-05-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
prog-104-p-02-2030/tests/test_basics.c
T
lucas f5c181b822
Tests Basics avec Criterion / test (push) Successful in 5s
correction
2026-04-02 15:52:42 +02:00

163 lines
4.2 KiB
C

#include <criterion/criterion.h>
#include <criterion/internal/assert.h>
#include <criterion/internal/test.h>
#include <stddef.h>
#include <stdio.h>
#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);
}