diff options
Diffstat (limited to 'Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend')
-rw-r--r-- | Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend | 107 |
1 files changed, 95 insertions, 12 deletions
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 | } |