commit 0b8f7c5a767786c397ad90cac13075a8328ab9d3 Author: Victor Date: Fri Jun 21 22:10:13 2024 +0200 first commit de mes deux diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..f5308a1 --- /dev/null +++ b/README.MD @@ -0,0 +1,49 @@ +# Problème des Huit Dames + +## Préambule + +La moyenne de votre classe concernant mon module sont très mauvaises **(7 de moyenne)**. Je vous propose donc un exercice optionnel qui a pour **date limite de rendu le 28 juin**. **Il sera coefficient 0.75** (le projet était coefficient 1). + +## La méthode d'évaluation est la suivante : + +* La qualité de code (7 points) +* Vérification par le lancement des tests : + * les tests unitaires (7 points) + * les tests Cucumber (6 points) + +## Description + +Le problème des huit dames est un puzzle classique qui consiste à placer huit reines sur un échiquier de 8x8 de manière à ce qu'aucune reine ne puisse en attaquer une autre. Les règles sont les suivantes : +- Une reine peut attaquer toute pièce se trouvant sur la même ligne, colonne ou diagonale qu'elle. +- Aucune des huit reines ne doit être en position d'attaquer une autre reine. + +## Objectif + +L'objectif de cet exercice est de trouver une solution au problème des huit dames en utilisant des tests unitaires et des tests de comportement dirigé par le développement (BDD) avec Cucumber. + +## Installation + +0. Installation maven : +* Windows simple : https://community.chocolatey.org/packages/maven +* Mac simple : https://mkyong.com/maven/install-maven-on-mac-osx/ +* Installation normal (Mac, Windows, Linux) : https://www.baeldung.com/install-maven-on-windows-linux-mac + +1. Clonez ce dépôt : + ```bash + git clone https://github.com/MaximePIERRONT/optional-java-bdd-exercice + cd optional-java-bdd-exercice + ``` + +2. Construisez le projet avec Maven : + ```bash + mvn clean install + ``` + +## Exécution des tests + +Pour exécuter les tests unitaires et les tests Cucumber, utilisez la commande suivante : +```bash +mvn test +``` + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a319fbb --- /dev/null +++ b/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + fr.iut_fbleau.but3.dev6_2 + optional-java-bdd-exercice + 1.0-SNAPSHOT + + + 5.10.2 + 1.10.1 + 7.18.0 + 3.2.5 + 17 + 17 + UTF-8 + + + + + org.junit.jupiter + junit-jupiter + ${junit-jupiter.version} + test + + + org.junit.platform + junit-platform-suite + ${junit-platform-suite.version} + test + + + io.cucumber + cucumber-java + ${cucumber.version} + test + + + io.cucumber + cucumber-junit-platform-engine + ${cucumber.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + \ No newline at end of file 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 new file mode 100644 index 0000000..348cbd8 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev6_2/Chessboard.java @@ -0,0 +1,24 @@ +package fr.iut_fbleau.but3.dev6_2; + +import java.util.ArrayList; +import java.util.List; + +public class Chessboard { + private static final int SIZE = 8; + private final int[][] gameBoard = new int[SIZE][SIZE]; + + private final List queensPosition = new ArrayList<>(); + + public Chessboard(){ + + } + + public void placeQueen(int x, int y){ + gameBoard[x][y] = 1; + queensPosition.add(new Position(x,y)); + } + + public int getNumberOfQueen() { + return queensPosition.size(); + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolver.java b/src/main/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolver.java new file mode 100644 index 0000000..e5b2a11 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolver.java @@ -0,0 +1,13 @@ +package fr.iut_fbleau.but3.dev6_2; + +public class EightQueensSolver { + private Chessboard chessboard = new Chessboard(); + + public EightQueensSolver(){ + + } + + public Chessboard getChessboard() { + return chessboard; + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev6_2/Position.java b/src/main/java/fr/iut_fbleau/but3/dev6_2/Position.java new file mode 100644 index 0000000..1fa9e81 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev6_2/Position.java @@ -0,0 +1,4 @@ +package fr.iut_fbleau.but3.dev6_2; + +public record Position(int x, int y) { +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev6_2/ChessboardTest.java b/src/test/java/fr/iut_fbleau/but3/dev6_2/ChessboardTest.java new file mode 100644 index 0000000..e1bd675 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev6_2/ChessboardTest.java @@ -0,0 +1,22 @@ +package fr.iut_fbleau.but3.dev6_2; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +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()); + } +} \ No newline at end of file diff --git a/src/test/java/fr/iut_fbleau/but3/dev6_2/CucumberTest.java b/src/test/java/fr/iut_fbleau/but3/dev6_2/CucumberTest.java new file mode 100644 index 0000000..74139e2 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev6_2/CucumberTest.java @@ -0,0 +1,15 @@ +package fr.iut_fbleau.but3.dev6_2; + +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; + +import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; + +@Suite +@IncludeEngines("cucumber") +@SelectClasspathResource("features") +@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "fr.iut_fbleau.but3.dev6_2.steps") +public class CucumberTest { +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolverTest.java b/src/test/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolverTest.java new file mode 100644 index 0000000..6946bce --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev6_2/EightQueensSolverTest.java @@ -0,0 +1,22 @@ +package fr.iut_fbleau.but3.dev6_2; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class EightQueensSolverTest { + + private EightQueensSolver eightQueensSolver; + + @BeforeEach + public void beforeEach(){ + this.eightQueensSolver = new EightQueensSolver(); + } + + @Test + void getChessBoardOfSolver(){ + Chessboard chessboard = this.eightQueensSolver.getChessboard(); + assertNotNull(chessboard); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..79d4ff8 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev6_2/steps/EightQueensSolverSteps.java @@ -0,0 +1,27 @@ +package fr.iut_fbleau.but3.dev6_2.steps; + +import fr.iut_fbleau.but3.dev6_2.EightQueensSolver; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class EightQueensSolverSteps { + private EightQueensSolver eightQueensSolver; + + @Given("un echiquier") + public void unEchiquier() { + this.eightQueensSolver = new EightQueensSolver(); + } + + @When("placer une reine en {int}, {int}") + public void placerUnReineEn(int x, int y) { + this.eightQueensSolver.getChessboard().placeQueen(x,y); + } + + @Then("{int} reine sur l'échiquier") + public void reineSurLEchiquier(int queensOnChessboard) { + assertEquals(1, this.eightQueensSolver.getChessboard().getNumberOfQueen()); + } +} diff --git a/src/test/resources/features/placeAQueen.feature b/src/test/resources/features/placeAQueen.feature new file mode 100644 index 0000000..0115038 --- /dev/null +++ b/src/test/resources/features/placeAQueen.feature @@ -0,0 +1,7 @@ +Feature: Placer une reine + Placer une reine sur l'échiquier + + Scenario: Placer une reine en 0, 0 + Given un echiquier + When placer une reine en 0, 0 + Then 1 reine sur l'échiquier \ No newline at end of file