aboutsummaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-07-29 14:21:36 +0200
committerLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-07-29 14:21:36 +0200
commitb4bf8d387e430600790f6b30d9e88ec785148cd7 (patch)
treefdf6df1437823c9880b031405be498782109fdd8 /Tests
parentParse rational numbers in Z3PolyhedronSolver (diff)
downloadVIATRA-Generator-b4bf8d387e430600790f6b30d9e88ec785148cd7.tar.gz
VIATRA-Generator-b4bf8d387e430600790f6b30d9e88ec785148cd7.tar.zst
VIATRA-Generator-b4bf8d387e430600790f6b30d9e88ec785148cd7.zip
Make CbcPolyhedronSolver more robust
Diffstat (limited to 'Tests')
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/CbcPolyhedronSolverTest.xtend14
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend107
2 files changed, 106 insertions, 15 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/CbcPolyhedronSolverTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/CbcPolyhedronSolverTest.xtend
index a51aa082..b22e2a20 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/CbcPolyhedronSolverTest.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/CbcPolyhedronSolverTest.xtend
@@ -7,11 +7,19 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.Polyhedr
7import org.junit.Test 7import org.junit.Test
8 8
9import static org.junit.Assert.* 9import static org.junit.Assert.*
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearConstraint
10 11
11class CbcPolyhedronSolverTest extends IntegerPolyhedronSolverTest { 12class CbcPolyhedronSolverTest extends IntegerPolyhedronSolverTest {
12 13
13 override protected createSolver() { 14 override protected createSolver() {
14 new CbcPolyhedronSolver(10, true) 15 new CbcPolyhedronSolver(false, 10, true)
16 }
17}
18
19class RelaxedCbcPolyhedronSolverTest extends RelaxedPolyhedronSolverTest {
20
21 override protected createSolver() {
22 new CbcPolyhedronSolver(true, 10, true)
15 } 23 }
16} 24}
17 25
@@ -19,9 +27,9 @@ class CbcPolyhedronSolverTimeoutTest {
19 27
20 @Test 28 @Test
21 def void timeoutTest() { 29 def void timeoutTest() {
22 val solver = new CbcPolyhedronSolver(0, true) 30 val solver = new CbcPolyhedronSolver(false, 0, true)
23 val x = new Dimension("x", 0, 1) 31 val x = new Dimension("x", 0, 1)
24 val polyhedron = new Polyhedron(#[x], #[], #[x]) 32 val polyhedron = new Polyhedron(#[x], #[new LinearConstraint(#{x -> 1}, null, 0)], #[x])
25 val operator = solver.createSaturationOperator(polyhedron) 33 val operator = solver.createSaturationOperator(polyhedron)
26 try { 34 try {
27 val result = operator.saturate 35 val result = operator.saturate
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend
index 1b2dcb00..47534618 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend
@@ -80,26 +80,52 @@ abstract class PolyhedronSolverTest {
80 80
81 @Test 81 @Test
82 def void singleDimensionUnboundedFromAboveTest() { 82 def void singleDimensionUnboundedFromAboveTest() {
83 val x = new Dimension("x", 0, null) 83 val x = new Dimension("x", -2, null)
84 createSaturationOperator(new Polyhedron(#[x], #[], #[x])) 84 createSaturationOperator(new Polyhedron(#[x], #[], #[x]))
85 85
86 val result = saturate() 86 val result = saturate()
87 87
88 assertEquals(PolyhedronSaturationResult.SATURATED, result) 88 assertEquals(PolyhedronSaturationResult.SATURATED, result)
89 assertEquals(0, x.lowerBound) 89 assertEquals(-2, x.lowerBound)
90 assertEquals(null, x.upperBound) 90 assertEquals(null, x.upperBound)
91 } 91 }
92 92
93 @Test 93 @Test
94 def void singleDimensionUnboundedFromBelowTest() { 94 def void singleDimensionUnboundedFromBelowTest() {
95 val x = new Dimension("x", null, 0) 95 val x = new Dimension("x", null, 2)
96 createSaturationOperator(new Polyhedron(#[x], #[], #[x])) 96 createSaturationOperator(new Polyhedron(#[x], #[], #[x]))
97 97
98 val result = saturate() 98 val result = saturate()
99 99
100 assertEquals(PolyhedronSaturationResult.SATURATED, result) 100 assertEquals(PolyhedronSaturationResult.SATURATED, result)
101 assertEquals(null, x.lowerBound) 101 assertEquals(null, x.lowerBound)
102 assertEquals(0, x.upperBound) 102 assertEquals(2, x.upperBound)
103 }
104
105 @Test
106 def void singleDimensionUnboundedTest() {
107 val x = new Dimension("x", null, null)
108 createSaturationOperator(new Polyhedron(#[x], #[], #[x]))
109
110 val result = saturate()
111
112 assertEquals(PolyhedronSaturationResult.SATURATED, result)
113 assertEquals(null, x.lowerBound)
114 assertEquals(null, x.upperBound)
115 }
116
117 @Test
118 def void singleDimensionUnboundedObjectiveTest() {
119 val x = new Dimension("x", null, null)
120 val y = new Dimension("y", 0, 1)
121 val objective = new LinearConstraint(#{x -> 1, y -> 1}, null, null)
122 createSaturationOperator(new Polyhedron(#[x, y], #[], #[objective]))
123
124 val result = saturate()
125
126 assertEquals(PolyhedronSaturationResult.SATURATED, result)
127 assertEquals(null, objective.lowerBound)
128 assertEquals(null, objective.upperBound)
103 } 129 }
104 130
105 @Test 131 @Test
@@ -174,6 +200,25 @@ abstract class PolyhedronSolverTest {
174 200
175 assertEquals(PolyhedronSaturationResult.EMPTY, result) 201 assertEquals(PolyhedronSaturationResult.EMPTY, result)
176 } 202 }
203
204 @Test
205 def void unboundedRelaxationWithIntegerSolutionTest() {
206 val x = new Dimension("x", 1, 3)
207 val y = new Dimension("y", null, null)
208 createSaturationOperator(new Polyhedron(
209 #[x, y],
210 #[new LinearConstraint(#{x -> 2}, 2, 6)],
211 #[x, y]
212 ))
213
214 val result = saturate()
215
216 assertEquals(PolyhedronSaturationResult.SATURATED, result)
217 assertEquals(1, x.lowerBound)
218 assertEquals(3, x.upperBound)
219 assertEquals(null, y.lowerBound)
220 assertEquals(null, y.upperBound)
221 }
177 222
178 protected def createSaturationOperator(Polyhedron polyhedron) { 223 protected def createSaturationOperator(Polyhedron polyhedron) {
179 destroyOperatorIfExists() 224 destroyOperatorIfExists()
@@ -228,7 +273,7 @@ abstract class IntegerPolyhedronSolverTest extends PolyhedronSolverTest {
228 @Test 273 @Test
229 def void unboundedRelaxationWithNoIntegerSolutionTest() { 274 def void unboundedRelaxationWithNoIntegerSolutionTest() {
230 val x = new Dimension("x", 0, 1) 275 val x = new Dimension("x", 0, 1)
231 val y = new Dimension("y", 0, null) 276 val y = new Dimension("y", null, null)
232 createSaturationOperator(new Polyhedron( 277 createSaturationOperator(new Polyhedron(
233 #[x, y], 278 #[x, y],
234 #[new LinearConstraint(#{x -> 2}, 1, 1)], 279 #[new LinearConstraint(#{x -> 2}, 1, 1)],
@@ -282,21 +327,59 @@ abstract class RelaxedPolyhedronSolverTest extends PolyhedronSolverTest {
282 } 327 }
283 328
284 @Test 329 @Test
285 def void unboundedRelaxationWithNoIntegerSolutionTest() { 330 def void unboundedRelaxationWithNoIntegerSolutionUnconstrainedVariableTest() {
286 val x = new Dimension("x", 0, 1) 331 val x = new Dimension("x", 1, 2)
287 val y = new Dimension("y", 0, null) 332 val y = new Dimension("y", null, null)
288 createSaturationOperator(new Polyhedron( 333 createSaturationOperator(new Polyhedron(
289 #[x, y], 334 #[x, y],
290 #[new LinearConstraint(#{x -> 2}, 1, 1)], 335 #[new LinearConstraint(#{x -> 2}, 3, 3)],
291 #[x, y] 336 #[x, y]
292 )) 337 ))
293 338
294 val result = saturate() 339 val result = saturate()
295 340
296 assertEquals(PolyhedronSaturationResult.SATURATED, result) 341 assertEquals(PolyhedronSaturationResult.SATURATED, result)
297 assertEquals(0, x.lowerBound) 342 assertEquals(1, x.lowerBound)
298 assertEquals(1, x.upperBound) 343 assertEquals(2, x.upperBound)
299 assertEquals(0, y.lowerBound) 344 assertEquals(null, y.lowerBound)
300 assertEquals(null, y.upperBound) 345 assertEquals(null, y.upperBound)
301 } 346 }
347
348 @Test
349 def void unboundedRelaxationWithNoIntegerSolutionConstrainedVariableTest() {
350 val x = new Dimension("x", 1, 2)
351 val y = new Dimension("y", null, null)
352 createSaturationOperator(new Polyhedron(
353 #[x, y],
354 #[new LinearConstraint(#{x -> 2}, 3, 3), new LinearConstraint(#{y -> 1}, null, 1)],
355 #[x, y]
356 ))
357
358 val result = saturate()
359
360 assertEquals(PolyhedronSaturationResult.SATURATED, result)
361 assertEquals(1, x.lowerBound)
362 assertEquals(2, x.upperBound)
363 assertEquals(null, y.lowerBound)
364 assertEquals(1, y.upperBound)
365 }
366
367 @Test
368 def void unboundedRelaxationWithNoIntegerSolutionBoundedVariableTest() {
369 val x = new Dimension("x", 1, 2)
370 val y = new Dimension("y", null, 1)
371 createSaturationOperator(new Polyhedron(
372 #[x, y],
373 #[new LinearConstraint(#{x -> 2}, 3, 3)],
374 #[x, y]
375 ))
376
377 val result = saturate()
378
379 assertEquals(PolyhedronSaturationResult.SATURATED, result)
380 assertEquals(1, x.lowerBound)
381 assertEquals(2, x.upperBound)
382 assertEquals(null, y.lowerBound)
383 assertEquals(1, y.upperBound)
384 }
302} 385}