From 69e5c14e71d462d3b36595e13637ced224e6983c Mon Sep 17 00:00:00 2001 From: massat <jean-luc.massat@univ-amu.fr> Date: Thu, 3 Oct 2024 17:11:15 +0200 Subject: [PATCH] Add tests --- .gitignore | 5 +- .idea/workspace.xml | 102 ++++++++++++-- src/main/java/fr/univamu/solver/Main.java | 2 +- .../java/fr/univamu/solver/TestInterval.java | 29 ++++ .../java/fr/univamu/solver/TestSolver.java | 129 ++++++++++++++++++ 5 files changed, 251 insertions(+), 16 deletions(-) create mode 100644 src/test/java/fr/univamu/solver/TestInterval.java create mode 100644 src/test/java/fr/univamu/solver/TestSolver.java diff --git a/.gitignore b/.gitignore index b63da45..e7a3b7d 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,7 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store +/src/test/java/fr/univamu/solver/PrivateTestInterval.java +/src/test/java/fr/univamu/solver/PrivateTestReducer.java +/src/test/java/fr/univamu/solver/PrivateTestSolver.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 625c556..eeb497a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,18 +4,12 @@ <option name="autoReloadType" value="SELECTIVE" /> </component> <component name="ChangeListManager"> - <list default="true" id="a17b64ea-8b68-4cd2-aba6-1780c674b35e" name="Changes" comment=""> - <change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/.idea/gradle.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/build.gradle.kts" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.jar" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/gradlew" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/gradlew.bat" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/settings.gradle.kts" afterDir="false" /> - <change afterPath="$PROJECT_DIR$/src/main/java/fr/univamu/solver/Main.java" afterDir="false" /> + <list default="true" id="a17b64ea-8b68-4cd2-aba6-1780c674b35e" name="Changes" comment="Create"> + <change afterPath="$PROJECT_DIR$/src/test/java/fr/univamu/solver/TestInterval.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/test/java/fr/univamu/solver/TestSolver.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/univamu/solver/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/fr/univamu/solver/Main.java" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -41,13 +35,21 @@ </component> <component name="PropertiesComponent"><![CDATA[{ "keyToString": { + "Gradle.GL-Solver [:fr.univamu.solver.Main.main()].executor": "Run", + "Gradle.Tests in 'GL-Solver'.executor": "Run", + "Gradle.Tests in 'fr.univamu.solver'.executor": "Run", "RunOnceActivity.ShowReadmeOnStart": "true", "git-widget-placeholder": "master", + "kotlin-language-version-configured": "true", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", "nodejs_package_manager_path": "npm", "vue.rearranger.settings.migration": "true" } }]]></component> - <component name="RunManager"> + <component name="RunManager" selected="Gradle.Tests in 'GL-Solver'"> <configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <option name="MAIN_CLASS_NAME" value="fr.univamu.solver.Main" /> <module name="GL-Solver.main" /> @@ -61,8 +63,56 @@ <option name="Make" enabled="true" /> </method> </configuration> + <configuration name="Tests in 'GL-Solver'" type="GradleRunConfiguration" factoryName="Gradle" temporary="true"> + <ExternalSystemSettings> + <option name="executionName" /> + <option name="externalProjectPath" value="$PROJECT_DIR$" /> + <option name="externalSystemIdString" value="GRADLE" /> + <option name="scriptParameters" value="" /> + <option name="taskDescriptions"> + <list /> + </option> + <option name="taskNames"> + <list> + <option value=":test" /> + </list> + </option> + <option name="vmOptions" /> + </ExternalSystemSettings> + <ExternalSystemDebugServerProcess>false</ExternalSystemDebugServerProcess> + <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess> + <DebugAllEnabled>false</DebugAllEnabled> + <RunAsTest>true</RunAsTest> + <method v="2" /> + </configuration> + <configuration name="Tests in 'fr.univamu.solver'" type="GradleRunConfiguration" factoryName="Gradle" temporary="true"> + <ExternalSystemSettings> + <option name="executionName" /> + <option name="externalProjectPath" value="$PROJECT_DIR$" /> + <option name="externalSystemIdString" value="GRADLE" /> + <option name="scriptParameters" value="" /> + <option name="taskDescriptions"> + <list /> + </option> + <option name="taskNames"> + <list> + <option value=":test" /> + <option value="--tests" /> + <option value=""fr.univamu.solver.*"" /> + </list> + </option> + <option name="vmOptions" /> + </ExternalSystemSettings> + <ExternalSystemDebugServerProcess>false</ExternalSystemDebugServerProcess> + <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess> + <DebugAllEnabled>false</DebugAllEnabled> + <RunAsTest>true</RunAsTest> + <method v="2" /> + </configuration> <recent_temporary> <list> + <item itemvalue="Gradle.Tests in 'GL-Solver'" /> + <item itemvalue="Gradle.Tests in 'fr.univamu.solver'" /> <item itemvalue="Application.Main" /> </list> </recent_temporary> @@ -83,8 +133,32 @@ <option name="number" value="Default" /> <option name="presentableId" value="Default" /> <updated>1727967430355</updated> - <workItem from="1727967431394" duration="53000" /> + <workItem from="1727967431394" duration="749000" /> + </task> + <task id="LOCAL-00001" summary="Create"> + <option name="closed" value="true" /> + <created>1727967673293</created> + <option name="number" value="00001" /> + <option name="presentableId" value="LOCAL-00001" /> + <option name="project" value="LOCAL" /> + <updated>1727967673293</updated> </task> + <task id="LOCAL-00002" summary="Create"> + <option name="closed" value="true" /> + <created>1727967931296</created> + <option name="number" value="00002" /> + <option name="presentableId" value="LOCAL-00002" /> + <option name="project" value="LOCAL" /> + <updated>1727967931296</updated> + </task> + <option name="localTasksCounter" value="3" /> <servers /> </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="version" value="3" /> + </component> + <component name="VcsManagerConfiguration"> + <MESSAGE value="Create" /> + <option name="LAST_COMMIT_MESSAGE" value="Create" /> + </component> </project> \ No newline at end of file diff --git a/src/main/java/fr/univamu/solver/Main.java b/src/main/java/fr/univamu/solver/Main.java index 364b9bc..2ac06cf 100644 --- a/src/main/java/fr/univamu/solver/Main.java +++ b/src/main/java/fr/univamu/solver/Main.java @@ -2,6 +2,6 @@ package fr.univamu.solver; public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + System.out.println("Solver!"); } } \ No newline at end of file diff --git a/src/test/java/fr/univamu/solver/TestInterval.java b/src/test/java/fr/univamu/solver/TestInterval.java new file mode 100644 index 0000000..43f7069 --- /dev/null +++ b/src/test/java/fr/univamu/solver/TestInterval.java @@ -0,0 +1,29 @@ +package fr.univamu.solver; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +public class TestInterval { + + @Test + void testEmpty() { + var i = new Interval(20, 10); + assertTrue(i.isEmpty()); + } + + @Test + void testFixed() { + var i = new Interval(20, 20); + assertTrue(i.isFixed()); + } + + @Test + void testAdd() { + var a = new Interval(20, 30); + var b = new Interval(-33, -5); + assertEquals("[-13,25]", a.add(b).toString()); + } + +} diff --git a/src/test/java/fr/univamu/solver/TestSolver.java b/src/test/java/fr/univamu/solver/TestSolver.java new file mode 100644 index 0000000..37900a7 --- /dev/null +++ b/src/test/java/fr/univamu/solver/TestSolver.java @@ -0,0 +1,129 @@ + +package fr.univamu.solver; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class TestSolver { + + @Test + public void testDomain() { + var solver = new Solver(); + solver.newVar().domain(0, 9); + solver.newVar().domain(100, 109); + assertEquals(100, solver.solve()); + } + + @Test + public void testDomainEmpty() { + var solver = new Solver(); + solver.newVar().domain(20, 10); + assertEquals(0, solver.solve()); + } + + @Test + public void testConstraintAdd() { + var solver = new Solver(); + var a = solver.newVar().domain(0, 9); + var b = solver.newVar().domain(0, 9); + solver.addConstraint(5, "=", a, "+", b);// 5=A+B + assertEquals(6, solver.solve()); + } + + @Test + public void testConstraintSub() { + var solver = new Solver(); + var a = solver.newVar().domain(0, 9); + var b = solver.newVar().domain(0, 9); + solver.addConstraint(5, "=", a, "-", b);// 5=A-B + assertEquals(5, solver.solve()); + } + + @Test + public void testConstraintMul() { + var solver = new Solver(); + var a = solver.newVar().domain(0, 9); + var b = solver.newVar().domain(0, 9); + solver.addConstraint(a, "=", b, "*", 2);// A=B*2 + assertEquals(5, solver.solve()); + } + + @Test + public void testConstraintDiv() { + var solver = new Solver(); + var a = solver.newVar().domain(0, 99); + var b = solver.newVar().domain(0, 9); + solver.addConstraint(a, "=", b, "/", 2);// A=B/2 + assertEquals(10, solver.solve()); + } + + @Test + public void testConstraintEq() { + var solver = new Solver(); + var a = solver.newVar().domain(0, 5); + var b = solver.newVar().domain(4, 9); + solver.addConstraint(a, "=", b); + assertEquals(2, solver.solve()); + } + + @Test + public void testConstraintDiff() { + var solver = new Solver(); + var a = solver.newVar("A").domain(0, 9); + solver.addConstraint(a, "<>", 5); + assertEquals(9, solver.solve()); + } + + @Test + public void testConstraintGreater() { + var solver = new Solver(); + var a = solver.newVar("A").domain(0, 9); + solver.addConstraint(a, ">", 5); + assertEquals(4, solver.solve()); + } + + @Test + public void testConstraintGreaterEqual() { + var solver = new Solver(); + var a = solver.newVar("A").domain(0, 9); + solver.addConstraint(a, ">=", 5); + assertEquals(5, solver.solve()); + } + + @Test + public void testConstraintLess() { + var solver = new Solver(); + var a = solver.newVar("A").domain(0, 9); + solver.addConstraint(a, "<", 3); + assertEquals(3, solver.solve()); + } + + @Test + public void testConstraintLessEqual() { + var solver = new Solver(); + var a = solver.newVar("A").domain(0, 9); + solver.addConstraint(a, "<=", 6); + assertEquals(7, solver.solve()); + } + + @Test + public void testABC() { + // résoudre AB + BA = CBC + var solver = new Solver(); + var a = solver.newVar("A").domain(1, 9); + var b = solver.newVar("B").domain(1, 9); + var c = solver.newVar("C").domain(1, 9); + solver.addConstraint(// + a, "*", 10, "+", b, "+", // AB + + b, "*", 10, "+", a, "=", // BA = + c, "*", 100, "+", b, "*", 10, "+", c); // CBC + assertEquals(1, solver.solve()); + assertEquals(6499207L, solver.getNodesCounter()); + // nouvelle stratégie + solver.reduceAndCheckIntervalsStrategy(); + assertEquals(1, solver.solve()); + assertEquals(954264L, solver.getNodesCounter()); + } + +} -- GitLab