From 64c2e016cd597014daaf368d72e797be0022dd1c Mon Sep 17 00:00:00 2001
From: "remi.greub" <remi.greub@hes-so.ch>
Date: Fri, 4 Apr 2025 01:02:43 +0200
Subject: [PATCH] update du makefile avec tests unitaires

---
 puissance4_GRB/Makefile     |  11 ++-
 puissance4_GRB/unit_tests.c | 165 ++++++++++++++++++++++++++++++++++++
 2 files changed, 174 insertions(+), 2 deletions(-)
 create mode 100644 puissance4_GRB/unit_tests.c

diff --git a/puissance4_GRB/Makefile b/puissance4_GRB/Makefile
index 21fe1a0..71d861b 100644
--- a/puissance4_GRB/Makefile
+++ b/puissance4_GRB/Makefile
@@ -4,17 +4,24 @@ LDFLAGS:=-lm
 EXEC:=puissance4
 
 
+
 puissance4: main.c puissance4.o
 	$(CC) $(CFLAGS) $^ -o $(EXEC) $(LDFLAGS)
 
+unit_tests: unit_tests.c puissance4.o
+	$(CC) $(CFLAGS) $^ -o unit_tests $(LDFLAGS)
+
 puissance4.o: puissance4.c puissance4.h
 
 clean:
-	rm -rf *.o $(EXEC)
+	rm -rf *.o $(EXEC) unit_tests
 	$(MAKE) -C testbed clean
 
 run: $(EXEC_EXO)
 	./$<
 
+run_tests: unit_tests
+	./$<
+
 tests: puissance4
-	$(MAKE) -C testbed
\ No newline at end of file
+	$(MAKE) -C testbed
diff --git a/puissance4_GRB/unit_tests.c b/puissance4_GRB/unit_tests.c
new file mode 100644
index 0000000..5457540
--- /dev/null
+++ b/puissance4_GRB/unit_tests.c
@@ -0,0 +1,165 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+
+#include "puissance4.h"
+
+int main(){
+    //test de la lib cells creation des cellules / destruction
+    struct game *games = malloc(sizeof(struct game));
+    int res1 = init_puissance4(games, 10, 10);
+    assert(res1==0);
+    assert(games != NULL);
+    //test et destruction de la structure grid
+    printf("===================================================\n");
+    printf("before kill_game: %p\n", (void*)games);
+    kill_game(&games);
+    printf("after kill_game: %p\n", (void*)games);
+
+    games = malloc(sizeof(struct game));
+    printf("Init test + delete test passed\n");
+    printf("===================================================\n\n");
+
+    printf("===================================================\n");
+    int res2 = init_puissance4(games, 0,0);
+    printf("init 0x0 structure, return should be : -1 , returned=%d\n",res2);
+    assert(res2==-1);
+    printf("test passed\n");
+    printf("===================================================\n\n");
+
+    printf("===================================================\n");
+    printf("init a new game struct with 6x7 grid\n");
+    init_puissance4(games, 6, 7);
+
+    //test avec la fonction is grid full false
+    printf("return should be : false, returned=%s \n",Is_Grid_full(*games) ? "true":"false" );
+    assert(Is_Grid_full(*games)==false);
+    printf("grid empty test passed\n");
+    printf("===================================================\n\n");
+    
+    printf("===================================================\n");
+    //tests put cells
+    printf("test du put cells : \n");
+    int i = put_free_cell(games, 0, CROSS);
+    assert(games->cells[0][i].symbol==CROSS);
+    printf("passed\n");
+    i = put_free_cell(games, 0, CIRCLE);
+    assert(games->cells[0][i].symbol==CIRCLE);
+    printf("passed\n");
+    i = put_free_cell(games, 3, CROSS);
+    assert(games->cells[3][i].symbol==CROSS);
+    printf("put cells passed\n");
+    printf("===================================================\n\n");
+
+    printf("===================================================\n");
+    printf("test column overflow\n");
+    //tests de overflow d'une colonne
+    i = put_free_cell(games, 0, CROSS);
+    assert(games->cells[0][i].symbol==CROSS);
+    i = put_free_cell(games, 0, CIRCLE);
+    assert(games->cells[0][i].symbol==CIRCLE);
+    i = put_free_cell(games, 0, CROSS);
+    assert(games->cells[0][i].symbol==CROSS);
+    i = put_free_cell(games, 0, CIRCLE);
+    assert(games->cells[0][i].symbol==CIRCLE);
+    //jetoin de trop
+    i = put_free_cell(games, 0, CIRCLE);
+    assert(i==-1);
+    printf("passed\n");
+    i = put_free_cell(games, 0, CROSS);
+    assert(i==-1);
+    printf("passed\n");
+    printf("overflow column passed\n");
+    printf("===================================================\n\n");
+
+    //test de la grille pleine
+    printf("===================================================\n");
+    kill_game(&games);
+    games = malloc(sizeof(struct game));
+    init_puissance4(games, 6 , 7);
+    i = put_free_cell(games, 0, CROSS);
+    i = put_free_cell(games, 1, CIRCLE);
+    i = put_free_cell(games, 2, CROSS);
+    i = put_free_cell(games, 3, CIRCLE);
+    i = put_free_cell(games, 4, CROSS);
+    i = put_free_cell(games, 5, CIRCLE);
+    i = put_free_cell(games, 6, CROSS);
+
+    i = put_free_cell(games, 1, CIRCLE);
+    i = put_free_cell(games, 2, CROSS);
+    i = put_free_cell(games, 3, CIRCLE);
+    i = put_free_cell(games, 4, CROSS);
+    i = put_free_cell(games, 5, CIRCLE);
+    i = put_free_cell(games, 6, CROSS);
+
+    i = put_free_cell(games, 2, CIRCLE);
+    i = put_free_cell(games, 3, CROSS);
+    i = put_free_cell(games, 4, CIRCLE);
+    i = put_free_cell(games, 5, CROSS);
+    i = put_free_cell(games, 6, CIRCLE);
+
+    i = put_free_cell(games, 3, CROSS);
+    i = put_free_cell(games, 4, CIRCLE);
+    i = put_free_cell(games, 5, CROSS);
+    i = put_free_cell(games, 6, CIRCLE);
+
+    i = put_free_cell(games, 4, CROSS);
+    i = put_free_cell(games, 5, CIRCLE);
+    i = put_free_cell(games, 6, CROSS);
+
+    i = put_free_cell(games, 5, CIRCLE);
+    i = put_free_cell(games, 6, CROSS);
+
+    i = put_free_cell(games, 0, CIRCLE);
+    i = put_free_cell(games, 1, CROSS);
+    i = put_free_cell(games, 0, CIRCLE);
+
+    i = put_free_cell(games, 2, CROSS);
+    i = put_free_cell(games, 1, CIRCLE);
+    i = put_free_cell(games, 0, CROSS);
+
+    i = put_free_cell(games, 3, CIRCLE);
+    i = put_free_cell(games, 2, CROSS);
+    i = put_free_cell(games, 1, CIRCLE);
+    i = put_free_cell(games, 0, CROSS);
+
+    i = put_free_cell(games, 3, CIRCLE);
+    i = put_free_cell(games, 2, CROSS);
+    i = put_free_cell(games, 1, CIRCLE);
+    i = put_free_cell(games, 0, CROSS);
+    i = put_free_cell(games, 4, CIRCLE);
+    printf("return should be : true, returned=%s \n",Is_Grid_full(*games) ? "true":"false" );
+    print_game(*games);
+    assert(games->gamePlayed==0);
+    assert(Is_Grid_full(*games)==true);
+    printf("\ngrid overflow passed\n");
+
+    printf("winner test should return equal/empty (2) : returns %d\n",Find_winner(games, games->cells, games->cells[4][i]));
+    printf("===================================================\n\n");
+
+    printf("===================================================\n");
+    games->cells[5][0].symbol = CROSS;
+    assert(Find_winner(games, games->cells, games->cells[5][0])==CROSS);
+    printf("should return CROSS wins (1) : returns=%d\n",Find_winner(games, games->cells, games->cells[5][0]));
+    games->cells[5][0].symbol = CIRCLE;
+    games->cells[4][4].symbol = CIRCLE;
+    assert(Find_winner(games, games->cells, games->cells[4][4])==CIRCLE);
+    printf("should return CIRCLE wins (0) : returns=%d\n",Find_winner(games, games->cells, games->cells[4][4]));
+    games->cells[4][4].symbol = CROSS;
+    assert(Find_winner(games, games->cells, games->cells[4][4])==EMPTY);
+    printf("should return EQUAL/EMPTY wins (2) : returns=%d\n",Find_winner(games, games->cells, games->cells[4][4]));
+    games->cells[1][2].symbol = CIRCLE;
+    assert(Find_winner(games, games->cells, games->cells[1][2])==CIRCLE);
+    printf("should return CIRCLE wins (0) : returns=%d\n",Find_winner(games, games->cells, games->cells[1][2]));
+    printf("passed\n");
+    printf("===================================================\n\n");
+    kill_game(&games);
+    printf("Tests tous reussis !\n");
+    //test de detection de wins
+    //test is cell free
+    //test put cells ?? (pas obligé je dis)
+    //
+    return EXIT_SUCCESS;
+}
\ No newline at end of file
-- 
GitLab