diff --git a/src/main/java/fr/iut_fbleau/but3/dev6_2/Chessboard.java b/src/main/java/fr/iut_fbleau/but3/dev6_2/Chessboard.java index 33448bc..ca3002e 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev6_2/Chessboard.java +++ b/src/main/java/fr/iut_fbleau/but3/dev6_2/Chessboard.java @@ -21,6 +21,11 @@ public class Chessboard { currentSize = size; } + public Position[] getQueensPositions(){ + Position[] a = new Position[queensPosition.size()]; + return queensPosition.toArray(a); + } + public int getTile(int x,int y){ return gameBoard[x][y]; } @@ -79,9 +84,4 @@ public class Chessboard { } System.out.println("\n\n"); } - - public Position[] getQueensPositions() { - Position[] a = new Position[queensPosition.size()]; - return queensPosition.toArray(a); - } } diff --git a/src/test/java/fr/iut_fbleau/but3/dev6_2/steps/EightQueensSolverSteps.java b/src/test/java/fr/iut_fbleau/but3/dev6_2/steps/EightQueensSolverSteps.java index 1e12e6d..dbfaaf1 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev6_2/steps/EightQueensSolverSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev6_2/steps/EightQueensSolverSteps.java @@ -3,10 +3,6 @@ package fr.iut_fbleau.but3.dev6_2.steps; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.util.HashSet; -import java.util.Set; import fr.iut_fbleau.but3.dev6_2.Chessboard; import fr.iut_fbleau.but3.dev6_2.EightQueensSolver; @@ -109,25 +105,36 @@ public class EightQueensSolverSteps { @Then("toutes les lignes doivent avoir une reine") public void toutes_les_lignes_doivent_avoir_une_reine() { - Set lignes = new HashSet<>(); - for (Position position : solver.getChessboard().getQueensPositions()) { - lignes.add(position.x()); - } - // Vérifie que toutes les lignes de 0 à n-1 ont une reine - for (int i = 0; i < Chessboard.SIZE; i++) { - assert lignes.contains(i) : "La ligne " + i + " n'a pas de reine"; + for (int row = 0; row < Chessboard.SIZE; row++) { + int queenCount = 0; + for (int col = 0; col < Chessboard.SIZE; col++) { + if (solver.getChessboard().getTile(row, col) == 1) { + queenCount++; + } + } + assertTrue(1 == queenCount, "La ligne " + row + " n'a pas exactement une reine"); } } @Then("toutes les colonnes doivent avoir une reine") public void toutes_les_colonnes_doivent_avoir_une_reine() { - Set colonnes = new HashSet<>(); - for (Position position : solver.getChessboard().getQueensPositions()) { - colonnes.add(position.x()); + for (int col = 0; col < Chessboard.SIZE; col++) { + int queenCount = 0; + for (int row = 0; row < Chessboard.SIZE; row++) { + if (solver.getChessboard().getTile(row, col) == 1) { + queenCount++; + } + } + assertTrue(1 == queenCount, "La colonne " + col + " n'a pas exactement une reine"); } - // Vérifie que toutes les colonnes de 0 à n-1 ont une reine - for (int i = 0; i < Chessboard.SIZE; i++) { - assert colonnes.contains(i) : "La colonne " + i + " n'a pas de reine"; + } + + @Then("aucune reine ne doit être menacée par une autre") + public void aucune_reine_ne_doit_être_menacée_par_une_autre() { + for(Position pos : this.solver.getChessboard().getQueensPositions()){ + this.solver.getChessboard().removeQueen(pos.x(), pos.y()); + assertTrue(this.solver.getChessboard().VerifAccessible(pos.x(), pos.y()), "La case (" + pos.x() + ", " + pos.y() + ") est capturée mais ne devrait pas l'être."); + this.solver.getChessboard().placeQueen(pos.x(), pos.y()); } } diff --git a/src/test/resources/features/solveProblem.feature b/src/test/resources/features/solveProblem.feature index bab7d80..4e00dfd 100644 --- a/src/test/resources/features/solveProblem.feature +++ b/src/test/resources/features/solveProblem.feature @@ -3,15 +3,13 @@ Feature: Résoudre le problème Scenario: Vérification de la résolution du problème par le solveur de Simon Given un echiquier vide When le solveur Sim termine de résoudre le problème - Then chaque reine est placée sur une case différente - And aucune reine ne doit être menacée par une autre + Then aucune reine ne doit être menacée par une autre And toutes les lignes doivent avoir une reine And toutes les colonnes doivent avoir une reine Scenario: Vérification de la résolution du problème par le solveur de Victor Given un echiquier vide When le solveur Vic termine de résoudre le problème - Then chaque reine est placée sur une case différente - And aucune reine ne doit être menacée par une autre + Then aucune reine ne doit être menacée par une autre And toutes les lignes doivent avoir une reine And toutes les colonnes doivent avoir une reine \ No newline at end of file