This commit is contained in:
Simon CATANESE 2024-06-29 00:09:48 +02:00
parent 07a187dc5a
commit da0baa0a2a
12 changed files with 64 additions and 68 deletions

View File

@ -51,6 +51,11 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version> <version>${maven-surefire-plugin.version}</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>

View File

@ -79,4 +79,9 @@ public class Chessboard {
} }
System.out.println("\n\n"); System.out.println("\n\n");
} }
public Position[] getQueensPositions() {
Position[] a = new Position[queensPosition.size()];
return queensPosition.toArray(a);
}
} }

View File

@ -86,8 +86,8 @@ class ChessboardTest {
return x >= 0 && x < Chessboard.SIZE && y >= 0 && y < Chessboard.SIZE; return x >= 0 && x < Chessboard.SIZE && y >= 0 && y < Chessboard.SIZE;
} }
// méthode appelée par d'autres tests
void testWinningSolution(Chessboard chessboard) { private void testWinningSolution(Chessboard chessboard) {
assertEquals(Chessboard.SIZE, chessboard.getNumberOfQueen(),"Devrait etre egal a "+Chessboard.SIZE); assertEquals(Chessboard.SIZE, chessboard.getNumberOfQueen(),"Devrait etre egal a "+Chessboard.SIZE);
for(int i = 0; i< Chessboard.SIZE ;i++){ for(int i = 0; i< Chessboard.SIZE ;i++){
for(int j = 0; j< Chessboard.SIZE ;j++){ for(int j = 0; j< Chessboard.SIZE ;j++){

View File

@ -12,6 +12,4 @@ import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
@SelectClasspathResource("features") @SelectClasspathResource("features")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "fr.iut_fbleau.but3.dev6_2.steps") @ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "fr.iut_fbleau.but3.dev6_2.steps")
public class CucumberTest { public class CucumberTest {
} }

View File

@ -5,6 +5,9 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail; 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.Chessboard;
import fr.iut_fbleau.but3.dev6_2.EightQueensSolver; import fr.iut_fbleau.but3.dev6_2.EightQueensSolver;
import fr.iut_fbleau.but3.dev6_2.Position; import fr.iut_fbleau.but3.dev6_2.Position;
@ -50,7 +53,7 @@ public class EightQueensSolverSteps {
lastRemovedQueen = new Position(x, y); lastRemovedQueen = new Position(x, y);
} }
@Then("{int} reine(s) sur l'échiquier") @Then("{int} reine\\(s) sur l'échiquier")
public void reineSurLEchiquier(int queensOnChessboard) { public void reineSurLEchiquier(int queensOnChessboard) {
assertEquals(queensOnChessboard, this.solver.getChessboard().getNumberOfQueen()); assertEquals(queensOnChessboard, this.solver.getChessboard().getNumberOfQueen());
} }
@ -89,14 +92,42 @@ public class EightQueensSolverSteps {
} }
} }
@Then("la case de la reine retirée est libre") @Then("la case {int}, {int} est libre")
public void caseReineRetireeEstLibre(){ public void caseReineRetireeEstLibre(int x, int y){
if(lastRemovedQueen != null){ assertTrue(this.solver.getChessboard().VerifAccessible(x, y), "La case (" + x + ", " +y + ") est capturée mais ne devrait pas l'être.");
assertTrue(this.solver.getChessboard().VerifAccessible(lastRemovedQueen.x(), lastRemovedQueen.y()), "La case (" + lastRemovedQueen.x() + ", " + lastRemovedQueen.y() + ") est capturée mais ne devrait pas l'être."); }
lastRemovedQueen = null;
@When("le solveur Sim termine de résoudre le problème")
public void le_solveurSim_termine_de_résoudre_le_problème() {
this.solver.SolverSim(0);
}
@When("le solveur Vic termine de résoudre le problème")
public void le_solveurVic_termine_de_résoudre_le_problème() {
this.solver.SolverVic(0);
}
@Then("toutes les lignes doivent avoir une reine")
public void toutes_les_lignes_doivent_avoir_une_reine() {
Set<Integer> lignes = new HashSet<>();
for (Position position : solver.getChessboard().getQueensPositions()) {
lignes.add(position.x());
} }
else{ // Vérifie que toutes les lignes de 0 à n-1 ont une reine
fail("Aucune reine n'a été retirée, ce test ne peut avoir lieu"); for (int i = 0; i < Chessboard.SIZE; i++) {
assert lignes.contains(i) : "La ligne " + i + " n'a pas de reine";
}
}
@Then("toutes les colonnes doivent avoir une reine")
public void toutes_les_colonnes_doivent_avoir_une_reine() {
Set<Integer> colonnes = new HashSet<>();
for (Position position : solver.getChessboard().getQueensPositions()) {
colonnes.add(position.x());
}
// 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";
} }
} }

View File

@ -1,24 +0,0 @@
package fr.iut_fbleau.but3.dev6_2.steps;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import fr.iut_fbleau.but3.dev6_2.Chessboard;
class ChessboardTest {
private Chessboard chessboard;
@BeforeEach
public void beforeEach(){
this.chessboard = new Chessboard();
}
@Test
void placeAQueen(){
this.chessboard.placeQueen(0,0);
assertEquals(1, this.chessboard.getNumberOfQueen());
}
}

View File

@ -6,18 +6,3 @@ Feature: Placer une reine
When placer une reine en 0, 0 When placer une reine en 0, 0
Then 1 reine(s) sur l'échiquier Then 1 reine(s) sur l'échiquier
Scenario: Capturer toutes les cases de la colonne d'une reine
Given un echiquier vide
When placer une reine en 4, 4
Then la colonne 4 est capturée
Scenario: Capturer toutes les cases de la ligne d'une reine
Given un echiquier vide
When placer une reine en 4, 4
Then toutes les cases de la ligne 4 sont prises
Scenario : Capturer toutes les cases en diagonales d'une reine
Given un echiquier vide
When placer une reine en 4, 4
Then la diagonnale montante 0, 0 est capturée
And la diagonale descendante 8, 0 est capturée

View File

@ -3,13 +3,6 @@ Feature: Retirer une reine
Scenario: Retirer une reine en 0, 0 Scenario: Retirer une reine en 0, 0
Given un echiquier avec 5 reines valides Given un echiquier avec 5 reines valides
When retirer la 4e reine When retirer une reine en 2, 3
Then 4 reine(s) sur l'échiquier Then 4 reine(s) sur l'échiquier
And la case de la reine retirée est libre And la case 2, 3 est libre
5, 4
7, 5
4, 6
0, 7

View File

@ -1,14 +1,17 @@
Feature: Résoudre le problème Feature: Résoudre le problème
Scenario: Vérification des positions des reines Scenario: Vérification de la résolution du problème par le solveur de Simon
Given un echiquier vide Given un echiquier vide
When le solveur termine de résoudre le problème When le solveur Sim termine de résoudre le problème
Then chaque reine est placée sur une case différente Then chaque reine est placée sur une case différente
And aucune reine ne doit être menacée par une autre And aucune reine ne doit être menacée par une autre
And toutes les lignes doivent avoir une reine
Scenario: Vérification de la complétude de la solution
Given un echiquier vide
When le solveur termine de résoudre le problème
Then toutes les lignes doivent avoir une reine
And toutes les colonnes doivent avoir une reine And toutes les colonnes doivent avoir une reine
And chaque diagonale au maximum 1 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
And toutes les lignes doivent avoir une reine
And toutes les colonnes doivent avoir une reine