aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java')
-rw-r--r--subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java b/subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java
new file mode 100644
index 00000000..95c4ac68
--- /dev/null
+++ b/subprojects/store-reasoning-scope/src/test/java/tools/refinery/store/reasoning/scope/MPSolverTest.java
@@ -0,0 +1,83 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.reasoning.scope;
7
8import com.google.ortools.Loader;
9import com.google.ortools.linearsolver.MPSolver;
10import org.junit.jupiter.api.BeforeAll;
11import org.junit.jupiter.api.Test;
12
13import static org.hamcrest.MatcherAssert.assertThat;
14import static org.hamcrest.Matchers.closeTo;
15import static org.hamcrest.Matchers.is;
16
17class MPSolverTest {
18 @BeforeAll
19 static void beforeAll() {
20 Loader.loadNativeLibraries();
21 }
22
23 @Test
24 void updateProblemTest() {
25 var solver = MPSolver.createSolver("GLOP");
26 var x = solver.makeNumVar(0, Double.POSITIVE_INFINITY, "x");
27 var y = solver.makeNumVar(0, 1, "y");
28 var constraint = solver.makeConstraint(5, 5);
29 constraint.setCoefficient(x, 1);
30 constraint.setCoefficient(y, 1);
31 var objective = solver.objective();
32
33 objective.setCoefficient(x, 1);
34 objective.setMinimization();
35 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
36 assertThat(objective.value(), closeTo(4, 0.01));
37
38 objective.setMaximization();
39 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
40 assertThat(objective.value(), closeTo(5, 0.01));
41
42 objective.setCoefficient(x, 0);
43 objective.setCoefficient(y, 1);
44 objective.setMinimization();
45 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
46 assertThat(objective.value(), closeTo(0, 0.01));
47
48 objective.setMaximization();
49 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
50 assertThat(objective.value(), closeTo(1, 0.01));
51 }
52
53 @Test
54 void unboundedIsInfeasibleTest() {
55 var solver = MPSolver.createSolver("GLOP");
56 var x = solver.makeNumVar(0, Double.POSITIVE_INFINITY, "x");
57 var objective = solver.objective();
58 objective.setCoefficient(x, 1);
59
60 objective.setMinimization();
61 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
62 assertThat(objective.value(), closeTo(0, 0.01));
63
64 objective.setMaximization();
65 assertThat(solver.solve(), is(MPSolver.ResultStatus.INFEASIBLE));
66 }
67
68 @Test
69 void constantTest() {
70 var solver = MPSolver.createSolver("GLOP");
71 var x = solver.makeNumVar(1, 1, "x");
72 var objective = solver.objective();
73 objective.setCoefficient(x, 1);
74
75 objective.setMinimization();
76 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
77 assertThat(objective.value(), closeTo(1, 0.01));
78
79 objective.setMaximization();
80 assertThat(solver.solve(), is(MPSolver.ResultStatus.OPTIMAL));
81 assertThat(objective.value(), closeTo(1, 0.01));
82 }
83}