aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/cardinality/PolyhedronSolverTest.xtend
diff options
context:
space:
mode:
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.xtend130
1 files changed, 97 insertions, 33 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 15758985..1b2dcb00 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
@@ -79,19 +79,6 @@ abstract class PolyhedronSolverTest {
79 } 79 }
80 80
81 @Test 81 @Test
82 def void singleDimensionConstraintIntegerTest() {
83 val x = new Dimension("x", null, null)
84 val constraint = new LinearConstraint(#{x -> 2}, 0, 3)
85 createSaturationOperator(new Polyhedron(#[x], #[constraint], #[x]))
86
87 val result = saturate()
88
89 assertEquals(PolyhedronSaturationResult.SATURATED, result)
90 assertEquals(0, x.lowerBound)
91 assertEquals(1, x.upperBound)
92 }
93
94 @Test
95 def void singleDimensionUnboundedFromAboveTest() { 82 def void singleDimensionUnboundedFromAboveTest() {
96 val x = new Dimension("x", 0, null) 83 val x = new Dimension("x", 0, null)
97 createSaturationOperator(new Polyhedron(#[x], #[], #[x])) 84 createSaturationOperator(new Polyhedron(#[x], #[], #[x]))
@@ -165,6 +152,60 @@ abstract class PolyhedronSolverTest {
165 } 152 }
166 153
167 @Test 154 @Test
155 def void emptyConstraintTest() {
156 val x = new Dimension("x", 0, 1)
157 val constraint = new LinearConstraint(emptyMap, 0, 1)
158 createSaturationOperator(new Polyhedron(#[x], #[constraint], #[constraint]))
159
160 val result = saturate()
161
162 assertEquals(PolyhedronSaturationResult.SATURATED, result)
163 assertEquals(0, constraint.lowerBound)
164 assertEquals(0, constraint.upperBound)
165 }
166
167 @Test
168 def void emptyConstraintUnsatisfiableTest() {
169 val x = new Dimension("x", 0, 1)
170 val constraint = new LinearConstraint(emptyMap, 1, 0)
171 createSaturationOperator(new Polyhedron(#[x], #[constraint], #[constraint]))
172
173 val result = saturate()
174
175 assertEquals(PolyhedronSaturationResult.EMPTY, result)
176 }
177
178 protected def createSaturationOperator(Polyhedron polyhedron) {
179 destroyOperatorIfExists()
180 operator = solver.createSaturationOperator(polyhedron)
181 }
182
183 protected def destroyOperatorIfExists() {
184 if (operator !== null) {
185 operator.close
186 }
187 }
188
189 protected def saturate() {
190 operator.saturate
191 }
192}
193
194abstract class IntegerPolyhedronSolverTest extends PolyhedronSolverTest {
195 @Test
196 def void singleDimensionConstraintNonIntegerTest() {
197 val x = new Dimension("x", null, null)
198 val constraint = new LinearConstraint(#{x -> 2}, 0, 3)
199 createSaturationOperator(new Polyhedron(#[x], #[constraint], #[x]))
200
201 val result = saturate()
202
203 assertEquals(PolyhedronSaturationResult.SATURATED, result)
204 assertEquals(0, x.lowerBound)
205 assertEquals(1, x.upperBound)
206 }
207
208 @Test
168 def void unsatisfiableMultipleInheritanceTest() { 209 def void unsatisfiableMultipleInheritanceTest() {
169 val x = new Dimension("x", 0, 1) 210 val x = new Dimension("x", 0, 1)
170 val y = new Dimension("y", 0, 1) 211 val y = new Dimension("y", 0, 1)
@@ -198,41 +239,64 @@ abstract class PolyhedronSolverTest {
198 239
199 assertEquals(PolyhedronSaturationResult.EMPTY, result) 240 assertEquals(PolyhedronSaturationResult.EMPTY, result)
200 } 241 }
242}
201 243
244abstract class RelaxedPolyhedronSolverTest extends PolyhedronSolverTest {
202 @Test 245 @Test
203 def void emptyConstraintTest() { 246 def void singleDimensionConstraintNonIntegerTest() {
204 val constraint = new LinearConstraint(emptyMap, 0, 1) 247 val x = new Dimension("x", null, null)
205 createSaturationOperator(new Polyhedron(#[], #[constraint], #[constraint])) 248 val constraint = new LinearConstraint(#{x -> 2}, 0, 3)
249 createSaturationOperator(new Polyhedron(#[x], #[constraint], #[x]))
206 250
207 val result = saturate() 251 val result = saturate()
208 252
209 assertEquals(PolyhedronSaturationResult.SATURATED, result) 253 assertEquals(PolyhedronSaturationResult.SATURATED, result)
210 assertEquals(0, constraint.lowerBound) 254 assertEquals(0, x.lowerBound)
211 assertEquals(0, constraint.upperBound) 255 assertEquals(2, x.upperBound)
212 } 256 }
213 257
214 @Test 258 @Test
215 def void emptyConstraintUnsatisfiableTest() { 259 def void unsatisfiableMultipleInheritanceTest() {
216 val constraint = new LinearConstraint(emptyMap, 1, 0) 260 val x = new Dimension("x", 0, 1)
217 createSaturationOperator(new Polyhedron(#[], #[constraint], #[constraint])) 261 val y = new Dimension("y", 0, 1)
262 val z = new Dimension("z", 0, 1)
263 createSaturationOperator(new Polyhedron(
264 #[x, y, z],
265 #[
266 new LinearConstraint(#{x -> 1, y -> 1}, 1, 1),
267 new LinearConstraint(#{x -> 1, z -> 1}, 1, 1),
268 new LinearConstraint(#{y -> 1, z -> 1}, 1, 1)
269 ],
270 #[x, y, z]
271 ))
218 272
219 val result = saturate() 273 val result = saturate()
220 274
221 assertEquals(PolyhedronSaturationResult.EMPTY, result) 275 assertEquals(PolyhedronSaturationResult.SATURATED, result)
276 assertEquals(0, x.lowerBound)
277 assertEquals(1, x.upperBound)
278 assertEquals(0, y.lowerBound)
279 assertEquals(1, y.upperBound)
280 assertEquals(0, z.lowerBound)
281 assertEquals(1, z.upperBound)
222 } 282 }
223 283
224 private def createSaturationOperator(Polyhedron polyhedron) { 284 @Test
225 destroyOperatorIfExists() 285 def void unboundedRelaxationWithNoIntegerSolutionTest() {
226 operator = solver.createSaturationOperator(polyhedron) 286 val x = new Dimension("x", 0, 1)
227 } 287 val y = new Dimension("y", 0, null)
288 createSaturationOperator(new Polyhedron(
289 #[x, y],
290 #[new LinearConstraint(#{x -> 2}, 1, 1)],
291 #[x, y]
292 ))
228 293
229 private def destroyOperatorIfExists() { 294 val result = saturate()
230 if (operator !== null) {
231 operator.close
232 }
233 }
234 295
235 private def saturate() { 296 assertEquals(PolyhedronSaturationResult.SATURATED, result)
236 operator.saturate 297 assertEquals(0, x.lowerBound)
298 assertEquals(1, x.upperBound)
299 assertEquals(0, y.lowerBound)
300 assertEquals(null, y.upperBound)
237 } 301 }
238} 302}