From 7349b885c3dbb73f8ea47a1e15b263ce04a7f294 Mon Sep 17 00:00:00 2001
From: Sabrina <sabrinalap98@gmail.com>
Date: Fri, 4 Apr 2025 22:42:06 +0200
Subject: [PATCH] Modify unit Tests

---
 UnitTests/Makefile    |  13 +++++++----
 UnitTests/unitTests.c |  52 +++++++++++++++---------------------------
 UnitTests/unit_tests  | Bin 0 -> 21904 bytes
 3 files changed, 28 insertions(+), 37 deletions(-)
 create mode 100755 UnitTests/unit_tests

diff --git a/UnitTests/Makefile b/UnitTests/Makefile
index 69f006e..8087f36 100644
--- a/UnitTests/Makefile
+++ b/UnitTests/Makefile
@@ -1,6 +1,11 @@
-unitTests: unitTests.o
-	gcc unitTests.o -o unit_tests
+SRC = unitTests.c \
+      ../src/board.c \
+      ../src/winnerCheck.c \
+      ../src/smartAI.c
 
 
-unitTests.o : unitTests.c
-	gcc -Wall -Wextra -c unitTests.c
\ No newline at end of file
+unit_tests: $(SRC:.c=.o)
+	gcc $(SRC:.c=.o) -o unit_tests
+
+unittests.o: unitTests.c
+	gcc -Wall -Wextra  -c unitTests -o unittests
\ No newline at end of file
diff --git a/UnitTests/unitTests.c b/UnitTests/unitTests.c
index 0dac56e..0b8994b 100644
--- a/UnitTests/unitTests.c
+++ b/UnitTests/unitTests.c
@@ -5,12 +5,12 @@
 
 void TestCreateBoard() {
     struct board board = create_board(7,6);
-    assert(board.col != 0 && "Fail of board creation"); 
-    assert(board.line != 0 && "Fail of board creation"); 
-    assert(board.last_pos_x != -1 && "Fail of board creation"); 
-    assert(board.last_pos_y != -1 && "Fail of board creation"); 
-    assert(board.last_symbole != Vide && "Fail of board creation"); 
-    printf("Sucess of board creation\n");
+    assert(board.col != 0 && "Fail to board creation"); 
+    assert(board.line != 0 && "Fail to board creation"); 
+    assert(board.last_pos_x == -1 && "Fail to board creation"); 
+    assert(board.last_pos_y == -1 && "Fail to board creation"); 
+    assert(board.last_symbole == Vide && "Fail to board creation"); 
+    printf("Sucess to board creation\n");
 }
 
 void TestInitBoard() {
@@ -18,28 +18,29 @@ void TestInitBoard() {
     init_board(&board);
     for(int i = 0; i < 6; i++){
         for(int j = 0; j < 7; j++){
-            assert(board.data[i][j] != Vide && "Fail of init case"); 
+            assert(board.data[i][j] == Vide && "Fail to init case"); 
 
         }
     }
-    printf("Success of init board\n");
+    printf("Success to init board\n");
 }
 
 void TestCurrentLine() {
     struct board board = create_board(7,6);
     init_board(&board);
     int no_col1 = 2;
-    int no_col2 = 7;
+    int no_col2 = 6;
     board.data[5][no_col1] = Croix;
     board.data[4][no_col1] = Cercle;
-    assert(current_line(board, no_col1) == 3 && "Fail of get line to column");
-    assert(current_line(board, no_col2) == 5 && "Fail of get line to column");
-    printf("Success of get lines to column %d and %d\n", no_col1,no_col2);
+    assert(current_line(board, no_col1) == 3 && "Fail to get line to column");
+    assert(current_line(board, no_col2) == 5 && "Fail to get line to column");
+    printf("Success to get lines to column %d and %d\n", no_col1,no_col2);
 }
 
 void TestFullBoard() {
     struct board board = create_board(7,6);
     init_board(&board);
+    assert(is_full_board(board) == false && "Fail to check if the board is full");
     for(int i = 0; i < 6; i++){
         for(int j = 0; j < 7; j++){
             board.data[i][j] = Croix; 
@@ -49,20 +50,6 @@ void TestFullBoard() {
     printf("Success to check if the board is full\n");
 }
 
-void TestCheckRowof4() {
-    struct board board = create_board(7,6);
-    init_board(&board);
-    board.data[5][0] = Croix;
-    board.data[5][1] = Croix;
-    board.data[5][2] = Croix;
-    board.data[5][3] = Croix;
-    board.data[4][0] = Cercle;
-    board.data[4][1] = Cercle;
-    board.data[4][2] = Cercle;
-    assert(row_of_four(&board) == false && "Fail to check a row of 4\n");
-    printf("Success to check a row of 4\n");
-}
-
 void TestCheckColof4() {
     struct board board = create_board(7,6);
     init_board(&board);
@@ -73,7 +60,7 @@ void TestCheckColof4() {
     board.data[5][0] = Cercle;
     board.data[4][0] = Cercle;
     board.data[3][0] = Cercle;
-    assert(col_of_four(&board) == false && "Fail to check a col of 4\n");
+    assert(col_of_four(&board) == true && "Fail to check a col of 4\n");
     printf("Success to check a col of 4\n");
 }
 
@@ -91,7 +78,7 @@ void TestCheckDiagRLof4() {
     board.data[5][3] = Cercle;
     board.data[4][3] = Cercle;
     board.data[3][3] = Cercle;
-    assert(diag_of_four_right_left(&board) == false && "Fail to check a diag RL of 4\n");
+    assert(diag_of_four_right_left(&board) == true && "Fail to check a diag RL of 4\n");
     printf("Success to check a diag RL of 4\n");
 }
 
@@ -108,7 +95,7 @@ void TestCheckDiagLRof4() {
     board.data[3][1] = Cercle;
     board.data[4][2] = Cercle;
     board.data[5][3] = Cercle;
-    assert(diag_of_four_left_right(&board) == false && "Fail to check a diag LR of 4\n");
+    assert(diag_of_four_left_right(&board) == true && "Fail to check a diag LR of 4\n");
     printf("Success to check a dia LR of 4\n");
 }
 
@@ -122,7 +109,7 @@ void TestSimulateWin() {
     board.data[5][1] = Cercle;
     board.data[5][2] = Cercle;
     board.data[5][4] = Cercle;
-    assert(simulate_for_win(&board) == -1 && "Fail to win on the next round\n");
+    assert(simulate_for_win(&board) != -1 && "Fail to win on the next round\n");
     printf("Success to win on the next round\n");
 }
 
@@ -135,16 +122,15 @@ void TestSimulateBlock() {
     board.data[3][0] = Croix;
     board.data[5][1] = Cercle;
     board.data[5][4] = Cercle;
-    assert(simulate_for_block_player(&board) == -1 && "Fail to block the player\n");
+    assert(simulate_for_block_player(&board) != -1 && "Fail to block the player\n");
     printf("Success to block the player\n");
 }
 
 int main(){
     TestCreateBoard();
     TestInitBoard();
-    TestFullBoard();
     TestCurrentLine();
-    TestCheckRowof4();
+    TestFullBoard();
     TestCheckColof4();
     TestCheckDiagLRof4();
     TestCheckDiagRLof4();
diff --git a/UnitTests/unit_tests b/UnitTests/unit_tests
new file mode 100755
index 0000000000000000000000000000000000000000..dc34154bdc69eb95c020d1dde49bf94d15a0eec1
GIT binary patch
literal 21904
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
I8ql~502Z06%m4rY

literal 0
HcmV?d00001

-- 
GitLab