aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/Interval.xtend74
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.classpath16
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.gitignore4
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.project34
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/META-INF/MANIFEST.MF13
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/build.properties5
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/AdditionTest.xtend49
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/DivisionTest.xtend202
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MultiplicationTest.xtend205
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/NegationTest.xtend34
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SubtractionTest.xtend49
12 files changed, 667 insertions, 25 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/Interval.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/Interval.xtend
index 5b839fbd..cf22315b 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/Interval.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/Interval.xtend
@@ -53,14 +53,34 @@ abstract class Interval {
53 override operator_divide(Interval other) { 53 override operator_divide(Interval other) {
54 EMPTY 54 EMPTY
55 } 55 }
56
57 override toString() {
58 "∅"
59 }
56 } 60 }
57 61
58 public static val Interval ZERO = new NonEmpty(BigDecimal.ZERO, BigDecimal.ZERO) 62 public static val Interval ZERO = new NonEmpty(BigDecimal.ZERO, BigDecimal.ZERO)
59 63
60 public static val Interval UNBOUNDED = new NonEmpty(null, null) 64 public static val Interval UNBOUNDED = new NonEmpty(null, null)
61 65
66 static def Interval of(BigDecimal lower, BigDecimal upper) {
67 new NonEmpty(lower, upper)
68 }
69
70 static def between(double lower, double upper) {
71 of(new BigDecimal(lower, ROUND_DOWN), new BigDecimal(upper, ROUND_UP))
72 }
73
74 static def upTo(double upper) {
75 of(null, new BigDecimal(upper, ROUND_UP))
76 }
77
78 static def above(double lower) {
79 of(new BigDecimal(lower, ROUND_DOWN), null)
80 }
81
62 @Data 82 @Data
63 static class NonEmpty extends Interval { 83 private static class NonEmpty extends Interval {
64 val BigDecimal lower 84 val BigDecimal lower
65 val BigDecimal upper 85 val BigDecimal upper
66 86
@@ -141,7 +161,9 @@ abstract class Interval {
141 } 161 }
142 162
143 def operator_multiply(NonEmpty other) { 163 def operator_multiply(NonEmpty other) {
144 if (nonpositive) { 164 if (this == ZERO || other == ZERO) {
165 ZERO
166 } else if (nonpositive) {
145 if (other.nonpositive) { 167 if (other.nonpositive) {
146 new NonEmpty( 168 new NonEmpty(
147 upper.multiply(other.upper, ROUND_DOWN), 169 upper.multiply(other.upper, ROUND_DOWN),
@@ -155,7 +177,7 @@ abstract class Interval {
155 } else { 177 } else {
156 new NonEmpty( 178 new NonEmpty(
157 lower.tryMultiply(other.upper, ROUND_DOWN), 179 lower.tryMultiply(other.upper, ROUND_DOWN),
158 upper.tryMultiply(other.lower, ROUND_UP) 180 lower.tryMultiply(other.lower, ROUND_UP)
159 ) 181 )
160 } 182 }
161 } else if (nonnegative) { 183 } else if (nonnegative) {
@@ -236,7 +258,11 @@ abstract class Interval {
236 } 258 }
237 259
238 def operator_divide(NonEmpty other) { 260 def operator_divide(NonEmpty other) {
239 if (other.strictlyNegative) { 261 if (other == ZERO) {
262 EMPTY
263 } else if (this == ZERO) {
264 ZERO
265 } else if (other.strictlyNegative) {
240 if (nonpositive) { 266 if (nonpositive) {
241 new NonEmpty( 267 new NonEmpty(
242 upper.tryDivide(other.lower, ROUND_DOWN), 268 upper.tryDivide(other.lower, ROUND_DOWN),
@@ -271,30 +297,24 @@ abstract class Interval {
271 ) 297 )
272 } 298 }
273 } else { // other contains 0 299 } else { // other contains 0
274 if (other.lower == BigDecimal.ZERO) { 300 if (other.lower == BigDecimal.ZERO) { // 0 == other.lower < other.upper, because [0, 0] was exluded earlier
275 if (other.upper == BigDecimal.ZERO) { // [0, 0] 301 if (nonpositive) {
276 EMPTY 302 new NonEmpty(null, upper.tryDivide(other.upper, ROUND_UP))
277 } else { // 0 == other.lower < other.upper 303 } else if (nonnegative) {
278 if (nonpositive) { 304 new NonEmpty(lower.tryDivide(other.upper, ROUND_DOWN), null)
279 new NonEmpty(null, upper.tryDivide(other.upper, ROUND_UP)) 305 } else { // lower < 0 < upper
280 } else if (nonnegative) { 306 UNBOUNDED
281 new NonEmpty(lower.tryDivide(other.upper, ROUND_DOWN), null)
282 } else { // lower < 0 < upper
283 UNBOUNDED
284 }
285 } 307 }
286 } else { 308 } else if (other.upper == BigDecimal.ZERO) { // other.lower < other.upper == 0
287 if (other.upper == BigDecimal.ZERO) { // other.lower < other.upper == 0 309 if (nonpositive) {
288 if (nonpositive) { 310 new NonEmpty(upper.tryDivide(other.lower, ROUND_DOWN), null)
289 new NonEmpty(upper.tryDivide(other.lower, ROUND_DOWN), null) 311 } else if (nonnegative) {
290 } else if (nonnegative) { 312 new NonEmpty(null, lower.tryDivide(other.lower, ROUND_UP))
291 new NonEmpty(null, lower.tryDivide(other.lower, ROUND_UP)) 313 } else { // lower < 0 < upper
292 } else { // lower < 0 < upper
293 UNBOUNDED
294 }
295 } else { // other.lower < 0 < other.upper
296 UNBOUNDED 314 UNBOUNDED
297 } 315 }
316 } else { // other.lower < 0 < other.upper
317 UNBOUNDED
298 } 318 }
299 } 319 }
300 } 320 }
@@ -314,5 +334,9 @@ abstract class Interval {
314 a?.divide(b, mc) 334 a?.divide(b, mc)
315 } 335 }
316 } 336 }
337
338 override toString() {
339 '''«IF lower === null»(-∞«ELSE»[«lower»«ENDIF», «IF upper === null»∞)«ELSE»«upper»]«ENDIF»'''
340 }
317 } 341 }
318} 342}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.classpath b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.classpath
new file mode 100644
index 00000000..ef58158d
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.classpath
@@ -0,0 +1,16 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<classpath>
3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
5 <classpathentry kind="src" path="src">
6 <attributes>
7 <attribute name="test" value="true"/>
8 </attributes>
9 </classpathentry>
10 <classpathentry kind="src" path="xtend-gen">
11 <attributes>
12 <attribute name="test" value="true"/>
13 </attributes>
14 </classpathentry>
15 <classpathentry kind="output" path="bin"/>
16</classpath>
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.gitignore b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.gitignore
new file mode 100644
index 00000000..8ae4e44d
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.gitignore
@@ -0,0 +1,4 @@
1/bin/
2/src-gen/
3/vql-gen/
4/xtend-gen/
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.project b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.project
new file mode 100644
index 00000000..5bc946ea
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.project
@@ -0,0 +1,34 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
3 <name>hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests</name>
4 <comment></comment>
5 <projects>
6 </projects>
7 <buildSpec>
8 <buildCommand>
9 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
14 <name>org.eclipse.jdt.core.javabuilder</name>
15 <arguments>
16 </arguments>
17 </buildCommand>
18 <buildCommand>
19 <name>org.eclipse.pde.ManifestBuilder</name>
20 <arguments>
21 </arguments>
22 </buildCommand>
23 <buildCommand>
24 <name>org.eclipse.pde.SchemaBuilder</name>
25 <arguments>
26 </arguments>
27 </buildCommand>
28 </buildSpec>
29 <natures>
30 <nature>org.eclipse.pde.PluginNature</nature>
31 <nature>org.eclipse.jdt.core.javanature</nature>
32 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
33 </natures>
34</projectDescription>
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.settings/org.eclipse.jdt.core.prefs b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..0c68a61d
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
1eclipse.preferences.version=1
2org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4org.eclipse.jdt.core.compiler.compliance=1.8
5org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/META-INF/MANIFEST.MF b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..76c113c1
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2
3Bundle-Name: Logic2Viatra Tests
4Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests
5Bundle-Version: 1.0.0.qualifier
6Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests
7Bundle-RequiredExecutionEnvironment: JavaSE-1.8
8Import-Package: org.junit;version="4.12.0"
9Require-Bundle: com.google.guava,
10 org.eclipse.xtext.xbase.lib,
11 org.eclipse.xtend.lib,
12 org.eclipse.xtend.lib.macro,
13 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatraquery
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/build.properties b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/build.properties
new file mode 100644
index 00000000..5b9d2918
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/build.properties
@@ -0,0 +1,5 @@
1source.. = src/
2output.. = bin/
3bin.includes = META-INF/,\
4 .
5additional.bundles = org.junit
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/AdditionTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/AdditionTest.xtend
new file mode 100644
index 00000000..de5f40e1
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/AdditionTest.xtend
@@ -0,0 +1,49 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
4import java.util.Collection
5import org.junit.Assert
6import org.junit.Test
7import org.junit.runner.RunWith
8import org.junit.runners.Parameterized
9import org.junit.runners.Parameterized.Parameter
10import org.junit.runners.Parameterized.Parameters
11
12import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.*
13
14@RunWith(Parameterized)
15class AdditionTest {
16 @Parameters(name = "{index}: {0} + {1} = {2}")
17 static def Collection<Object[]> data() {
18 #[
19 #[EMPTY, EMPTY, EMPTY],
20 #[EMPTY, between(-1, 1), EMPTY],
21 #[between(-1, 1), EMPTY, EMPTY],
22 #[UNBOUNDED, UNBOUNDED, UNBOUNDED],
23 #[UNBOUNDED, upTo(2), UNBOUNDED],
24 #[UNBOUNDED, above(-2), UNBOUNDED],
25 #[UNBOUNDED, between(-1, 1), UNBOUNDED],
26 #[upTo(2), UNBOUNDED, UNBOUNDED],
27 #[upTo(2), upTo(1), upTo(3)],
28 #[upTo(2), above(-1), UNBOUNDED],
29 #[upTo(2), between(-1, 2), upTo(4)],
30 #[above(-2), UNBOUNDED, UNBOUNDED],
31 #[above(-2), upTo(1), UNBOUNDED],
32 #[above(-2), above(-1), above(-3)],
33 #[above(-2), between(-1, 2), above(-3)],
34 #[between(-2, 3), UNBOUNDED, UNBOUNDED],
35 #[between(-2, 3), upTo(1), upTo(4)],
36 #[between(-2, 3), above(-1), above(-3)],
37 #[between(-2, 3), between(-1, 2.5), between(-3, 5.5)]
38 ]
39 }
40
41 @Parameter(0) public var Interval a
42 @Parameter(1) public var Interval b
43 @Parameter(2) public var Interval result
44
45 @Test
46 def void additionTest() {
47 Assert.assertEquals(result, a + b)
48 }
49}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/DivisionTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/DivisionTest.xtend
new file mode 100644
index 00000000..3a8c0c5d
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/DivisionTest.xtend
@@ -0,0 +1,202 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
4import java.util.Collection
5import org.junit.Assert
6import org.junit.Test
7import org.junit.runner.RunWith
8import org.junit.runners.Parameterized
9import org.junit.runners.Parameterized.Parameter
10import org.junit.runners.Parameterized.Parameters
11
12import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.*
13
14@RunWith(Parameterized)
15class DivisionTest {
16 @Parameters(name="{index}: {0} / {1} = {2}")
17 static def Collection<Object[]> data() {
18 #[
19 #[EMPTY, EMPTY, EMPTY],
20 #[EMPTY, between(-1, 1), EMPTY],
21 #[between(-1, 1), EMPTY, EMPTY],
22 #[UNBOUNDED, UNBOUNDED, UNBOUNDED],
23 #[UNBOUNDED, upTo(-2), UNBOUNDED],
24 #[UNBOUNDED, upTo(0), UNBOUNDED],
25 #[UNBOUNDED, upTo(3), UNBOUNDED],
26 #[UNBOUNDED, above(-2), UNBOUNDED],
27 #[UNBOUNDED, above(0), UNBOUNDED],
28 #[UNBOUNDED, above(3), UNBOUNDED],
29 #[UNBOUNDED, between(-4, -3), UNBOUNDED],
30 #[UNBOUNDED, between(-4, 0), UNBOUNDED],
31 #[UNBOUNDED, between(-3, 4), UNBOUNDED],
32 #[UNBOUNDED, between(0, 4), UNBOUNDED],
33 #[UNBOUNDED, between(3, 4), UNBOUNDED],
34 #[UNBOUNDED, ZERO, EMPTY],
35 #[upTo(-12), UNBOUNDED, UNBOUNDED],
36 #[upTo(-12), upTo(-2), above(0)],
37 #[upTo(-12), upTo(0), above(0)],
38 #[upTo(-12), upTo(3), UNBOUNDED],
39 #[upTo(-12), above(-2), UNBOUNDED],
40 #[upTo(-12), above(0), upTo(0)],
41 #[upTo(-12), above(3), upTo(0)],
42 #[upTo(-12), between(-4, -3), above(3)],
43 #[upTo(-12), between(-4, 0), above(3)],
44 #[upTo(-12), between(-3, 4), UNBOUNDED],
45 #[upTo(-12), between(0, 4), upTo(-3)],
46 #[upTo(-12), between(3, 4), upTo(-3)],
47 #[upTo(-12), ZERO, EMPTY],
48 #[upTo(0), UNBOUNDED, UNBOUNDED],
49 #[upTo(0), upTo(-2), above(0)],
50 #[upTo(0), upTo(0), above(0)],
51 #[upTo(0), upTo(3), UNBOUNDED],
52 #[upTo(0), above(-2), UNBOUNDED],
53 #[upTo(0), above(0), upTo(0)],
54 #[upTo(0), above(3), upTo(0)],
55 #[upTo(0), between(-4, -3), above(0)],
56 #[upTo(0), between(-4, 0), above(0)],
57 #[upTo(0), between(-3, 4), UNBOUNDED],
58 #[upTo(0), between(0, 4), upTo(0)],
59 #[upTo(0), between(3, 4), upTo(0)],
60 #[upTo(0), ZERO, EMPTY],
61 #[upTo(12), UNBOUNDED, UNBOUNDED],
62 #[upTo(12), upTo(-2), above(-6)],
63 #[upTo(12), upTo(0), UNBOUNDED],
64 #[upTo(12), upTo(3), UNBOUNDED],
65 #[upTo(12), above(-2), UNBOUNDED],
66 #[upTo(12), above(0), UNBOUNDED],
67 #[upTo(12), above(3), upTo(4)],
68 #[upTo(12), between(-4, -3), above(-4)],
69 #[upTo(12), between(-4, 0), UNBOUNDED],
70 #[upTo(12), between(-3, 4), UNBOUNDED],
71 #[upTo(12), between(0, 4), UNBOUNDED],
72 #[upTo(12), between(3, 4), upTo(4)],
73 #[upTo(12), ZERO, EMPTY],
74 #[above(-12), UNBOUNDED, UNBOUNDED],
75 #[above(-12), upTo(-2), upTo(6)],
76 #[above(-12), upTo(0), UNBOUNDED],
77 #[above(-12), upTo(3), UNBOUNDED],
78 #[above(-12), above(-2), UNBOUNDED],
79 #[above(-12), above(0), UNBOUNDED],
80 #[above(-12), above(3), above(-4)],
81 #[above(-12), between(-4, -3), upTo(4)],
82 #[above(-12), between(-4, 0), UNBOUNDED],
83 #[above(-12), between(-3, 4), UNBOUNDED],
84 #[above(-12), between(0, 4), UNBOUNDED],
85 #[above(-12), between(3, 4), above(-4)],
86 #[above(-12), ZERO, EMPTY],
87 #[above(0), UNBOUNDED, UNBOUNDED],
88 #[above(0), upTo(-2), upTo(0)],
89 #[above(0), upTo(0), upTo(0)],
90 #[above(0), upTo(3), UNBOUNDED],
91 #[above(0), above(-2), UNBOUNDED],
92 #[above(0), above(0), above(0)],
93 #[above(0), above(3), above(0)],
94 #[above(0), between(-4, -3), upTo(0)],
95 #[above(0), between(-4, 0), upTo(0)],
96 #[above(0), between(-3, 4), UNBOUNDED],
97 #[above(0), between(0, 4), above(0)],
98 #[above(0), between(3, 4), above(0)],
99 #[above(0), ZERO, EMPTY],
100 #[above(12), UNBOUNDED, UNBOUNDED],
101 #[above(12), upTo(-2), upTo(0)],
102 #[above(12), upTo(0), upTo(0)],
103 #[above(12), upTo(3), UNBOUNDED],
104 #[above(12), above(-2), UNBOUNDED],
105 #[above(12), above(0), above(0)],
106 #[above(12), above(3), above(0)],
107 #[above(12), between(-4, -3), upTo(-3)],
108 #[above(12), between(-4, 0), upTo(-3)],
109 #[above(12), between(-3, 4), UNBOUNDED],
110 #[above(12), between(0, 4), above(3)],
111 #[above(12), between(3, 4), above(3)],
112 #[above(12), ZERO, EMPTY],
113 #[between(-36, -12), UNBOUNDED, UNBOUNDED],
114 #[between(-36, -12), upTo(-2), between(0, 18)],
115 #[between(-36, -12), upTo(0), above(0)],
116 #[between(-36, -12), upTo(3), UNBOUNDED],
117 #[between(-36, -12), above(-2), UNBOUNDED],
118 #[between(-36, -12), above(0), upTo(0)],
119 #[between(-36, -12), above(3), between(-12, 0)],
120 #[between(-36, -12), between(-4, -3), between(3, 12)],
121 #[between(-36, -12), between(-4, 0), above(3)],
122 #[between(-36, -12), between(-3, 4), UNBOUNDED],
123 #[between(-36, -12), between(0, 4), upTo(-3)],
124 #[between(-36, -12), between(3, 4), between(-12, -3)],
125 #[between(-36, -12), ZERO, EMPTY],
126 #[between(-36, 0), UNBOUNDED, UNBOUNDED],
127 #[between(-36, 0), upTo(-2), between(0, 18)],
128 #[between(-36, 0), upTo(0), above(0)],
129 #[between(-36, 0), upTo(3), UNBOUNDED],
130 #[between(-36, 0), above(-2), UNBOUNDED],
131 #[between(-36, 0), above(0), upTo(0)],
132 #[between(-36, 0), above(3), between(-12, 0)],
133 #[between(-36, 0), between(-4, -3), between(0, 12)],
134 #[between(-36, 0), between(-4, 0), above(0)],
135 #[between(-36, 0), between(-3, 4), UNBOUNDED],
136 #[between(-36, 0), between(0, 4), upTo(0)],
137 #[between(-36, 0), between(3, 4), between(-12, 0)],
138 #[between(-36, 0), ZERO, EMPTY],
139 #[between(-12, 36), UNBOUNDED, UNBOUNDED],
140 #[between(-12, 36), upTo(-2), between(-18, 6)],
141 #[between(-12, 36), upTo(0), UNBOUNDED],
142 #[between(-12, 36), upTo(3), UNBOUNDED],
143 #[between(-12, 36), above(-2), UNBOUNDED],
144 #[between(-12, 36), above(0), UNBOUNDED],
145 #[between(-12, 36), above(3), between(-4, 12)],
146 #[between(-12, 36), between(-4, -3), between(-12, 4)],
147 #[between(-12, 36), between(-4, 0), UNBOUNDED],
148 #[between(-12, 36), between(-3, 4), UNBOUNDED],
149 #[between(-12, 36), between(0, 4), UNBOUNDED],
150 #[between(-12, 36), between(3, 4), between(-4, 12)],
151 #[between(-12, 36), ZERO, EMPTY],
152 #[between(0, 36), UNBOUNDED, UNBOUNDED],
153 #[between(0, 36), upTo(-2), between(-18, 0)],
154 #[between(0, 36), upTo(0), upTo(0)],
155 #[between(0, 36), upTo(3), UNBOUNDED],
156 #[between(0, 36), above(-2), UNBOUNDED],
157 #[between(0, 36), above(0), above(0)],
158 #[between(0, 36), above(3), between(0, 12)],
159 #[between(0, 36), between(-4, -3), between(-12, 0)],
160 #[between(0, 36), between(-4, 0), upTo(0)],
161 #[between(0, 36), between(-3, 4), UNBOUNDED],
162 #[between(0, 36), between(0, 4), above(0)],
163 #[between(0, 36), between(3, 4), between(0, 12)],
164 #[between(0, 36), ZERO, EMPTY],
165 #[between(12, 36), UNBOUNDED, UNBOUNDED],
166 #[between(12, 36), upTo(-2), between(-18, 0)],
167 #[between(12, 36), upTo(0), upTo(0)],
168 #[between(12, 36), upTo(3), UNBOUNDED],
169 #[between(12, 36), above(-2), UNBOUNDED],
170 #[between(12, 36), above(0), above(0)],
171 #[between(12, 36), above(3), between(0, 12)],
172 #[between(12, 36), between(-4, -3), between(-12, -3)],
173 #[between(12, 36), between(-4, 0), upTo(-3)],
174 #[between(12, 36), between(-3, 4), UNBOUNDED],
175 #[between(12, 36), between(0, 4), above(3)],
176 #[between(12, 36), between(3, 4), between(3, 12)],
177 #[between(12, 36), ZERO, EMPTY],
178 #[ZERO, UNBOUNDED, ZERO],
179 #[ZERO, upTo(-2), ZERO],
180 #[ZERO, upTo(0), ZERO],
181 #[ZERO, upTo(3), ZERO],
182 #[ZERO, above(-2), ZERO],
183 #[ZERO, above(0), ZERO],
184 #[ZERO, above(3), ZERO],
185 #[ZERO, between(-4, -3), ZERO],
186 #[ZERO, between(-4, 0), ZERO],
187 #[ZERO, between(-3, 4), ZERO],
188 #[ZERO, between(0, 4), ZERO],
189 #[ZERO, between(3, 4), ZERO],
190 #[ZERO, ZERO, EMPTY]
191 ]
192 }
193
194 @Parameter(0) public var Interval a
195 @Parameter(1) public var Interval b
196 @Parameter(2) public var Interval result
197
198 @Test
199 def void divisionTest() {
200 Assert.assertEquals(result, a / b)
201 }
202}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MultiplicationTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MultiplicationTest.xtend
new file mode 100644
index 00000000..5f997094
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MultiplicationTest.xtend
@@ -0,0 +1,205 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
4import java.util.Collection
5import org.junit.Assert
6import org.junit.Test
7import org.junit.runner.RunWith
8import org.junit.runners.Parameterized
9import org.junit.runners.Parameterized.Parameter
10import org.junit.runners.Parameterized.Parameters
11
12import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.*
13
14@RunWith(Parameterized)
15class MultiplicationTest {
16 @Parameters(name="{index}: {0} * {1} = {2}")
17 static def Collection<Object[]> data() {
18 #[
19 #[EMPTY, EMPTY, EMPTY],
20 #[EMPTY, between(-1, 1), EMPTY],
21 #[between(-1, 1), EMPTY, EMPTY],
22 #[UNBOUNDED, UNBOUNDED, UNBOUNDED],
23 #[UNBOUNDED, upTo(-2), UNBOUNDED],
24 #[UNBOUNDED, upTo(0), UNBOUNDED],
25 #[UNBOUNDED, upTo(3), UNBOUNDED],
26 #[UNBOUNDED, above(-2), UNBOUNDED],
27 #[UNBOUNDED, above(0), UNBOUNDED],
28 #[UNBOUNDED, above(3), UNBOUNDED],
29 #[UNBOUNDED, between(-4, -3), UNBOUNDED],
30 #[UNBOUNDED, between(-4, 0), UNBOUNDED],
31 #[UNBOUNDED, between(-3, 4), UNBOUNDED],
32 #[UNBOUNDED, between(0, 4), UNBOUNDED],
33 #[UNBOUNDED, between(3, 4), UNBOUNDED],
34 #[UNBOUNDED, ZERO, ZERO],
35 #[upTo(-5), UNBOUNDED, UNBOUNDED],
36 #[upTo(-5), upTo(-2), above(10)],
37 #[upTo(-5), upTo(0), above(0)],
38 #[upTo(-5), upTo(3), UNBOUNDED],
39 #[upTo(-5), above(-2), UNBOUNDED],
40 #[upTo(-5), above(0), upTo(0)],
41 #[upTo(-5), above(3), upTo(-15)],
42 #[upTo(-5), between(-4, -3), above(15)],
43 #[upTo(-5), between(-4, 0), above(0)],
44 #[upTo(-5), between(-3, 4), UNBOUNDED],
45 #[upTo(-5), between(0, 4), upTo(0)],
46 #[upTo(-5), between(3, 4), upTo(-15)],
47 #[upTo(-5), ZERO, ZERO],
48 #[upTo(0), UNBOUNDED, UNBOUNDED],
49 #[upTo(0), upTo(-2), above(0)],
50 #[upTo(0), upTo(0), above(0)],
51 #[upTo(0), upTo(3), UNBOUNDED],
52 #[upTo(0), above(-2), UNBOUNDED],
53 #[upTo(0), above(0), upTo(0)],
54 #[upTo(0), above(3), upTo(0)],
55 #[upTo(0), between(-4, -3), above(0)],
56 #[upTo(0), between(-4, 0), above(0)],
57 #[upTo(0), between(-3, 4), UNBOUNDED],
58 #[upTo(0), between(0, 4), upTo(0)],
59 #[upTo(0), between(3, 4), upTo(0)],
60 #[upTo(0), ZERO, ZERO],
61 #[upTo(5), UNBOUNDED, UNBOUNDED],
62 #[upTo(5), upTo(-2), UNBOUNDED],
63 #[upTo(5), upTo(0), UNBOUNDED],
64 #[upTo(5), upTo(3), UNBOUNDED],
65 #[upTo(5), above(-2), UNBOUNDED],
66 #[upTo(5), above(0), UNBOUNDED],
67 #[upTo(5), above(3), UNBOUNDED],
68 #[upTo(5), between(-4, -3), above(-20)],
69 #[upTo(5), between(-4, 0), above(-20)],
70 #[upTo(5), between(-3, 4), UNBOUNDED],
71 #[upTo(5), between(0, 4), upTo(20)],
72 #[upTo(5), between(3, 4), upTo(20)],
73 #[upTo(5), ZERO, ZERO],
74 #[above(-5), UNBOUNDED, UNBOUNDED],
75 #[above(-5), upTo(-2), UNBOUNDED],
76 #[above(-5), upTo(0), UNBOUNDED],
77 #[above(-5), upTo(3), UNBOUNDED],
78 #[above(-5), above(-2), UNBOUNDED],
79 #[above(-5), above(0), UNBOUNDED],
80 #[above(-5), above(3), UNBOUNDED],
81 #[above(-5), between(-4, -3), upTo(20)],
82 #[above(-5), between(-4, 0), upTo(20)],
83 #[above(-5), between(-3, 4), UNBOUNDED],
84 #[above(-5), between(0, 4), above(-20)],
85 #[above(-5), between(3, 4), above(-20)],
86 #[above(-5), ZERO, ZERO],
87 #[above(0), UNBOUNDED, UNBOUNDED],
88 #[above(0), upTo(-2), upTo(0)],
89 #[above(0), upTo(0), upTo(0)],
90 #[above(0), upTo(3), UNBOUNDED],
91 #[above(0), above(-2), UNBOUNDED],
92 #[above(0), above(0), above(0)],
93 #[above(0), above(3), above(0)],
94 #[above(0), between(-4, -3), upTo(0)],
95 #[above(0), between(-4, 0), upTo(0)],
96 #[above(0), between(-3, 4), UNBOUNDED],
97 #[above(0), between(0, 4), above(0)],
98 #[above(0), between(3, 4), above(0)],
99 #[above(0), ZERO, ZERO],
100 #[above(5), UNBOUNDED, UNBOUNDED],
101 #[above(5), upTo(-2), upTo(-10)],
102 #[above(5), upTo(0), upTo(0)],
103 #[above(5), upTo(3), UNBOUNDED],
104 #[above(5), above(-2), UNBOUNDED],
105 #[above(5), above(0), above(0)],
106 #[above(5), above(3), above(15)],
107 #[above(5), between(-4, -3), upTo(-15)],
108 #[above(5), between(-4, 0), upTo(0)],
109 #[above(5), between(-3, 4), UNBOUNDED],
110 #[above(5), between(0, 4), above(0)],
111 #[above(5), between(3, 4), above(15)],
112 #[above(5), ZERO, ZERO],
113 #[between(-6, -5), UNBOUNDED, UNBOUNDED],
114 #[between(-6, -5), upTo(-2), above(10)],
115 #[between(-6, -5), upTo(0), above(0)],
116 #[between(-6, -5), upTo(3), above(-18)],
117 #[between(-6, -5), above(-2), upTo(12)],
118 #[between(-6, -5), above(0), upTo(0)],
119 #[between(-6, -5), above(3), upTo(-15)],
120 #[between(-6, -5), between(-4, -3), between(15, 24)],
121 #[between(-6, -5), between(-4, 0), between(0, 24)],
122 #[between(-6, -5), between(-3, 4), between(-24, 18)],
123 #[between(-6, -5), between(0, 4), between(-24, 0)],
124 #[between(-6, -5), between(3, 4), between(-24, -15)],
125 #[between(-6, -5), ZERO, ZERO],
126 #[between(-6, 0), UNBOUNDED, UNBOUNDED],
127 #[between(-6, 0), upTo(-2), above(0)],
128 #[between(-6, 0), upTo(0), above(0)],
129 #[between(-6, 0), upTo(3), above(-18)],
130 #[between(-6, 0), above(-2), upTo(12)],
131 #[between(-6, 0), above(0), upTo(0)],
132 #[between(-6, 0), above(3), upTo(0)],
133 #[between(-6, 0), between(-4, -3), between(0, 24)],
134 #[between(-6, 0), between(-4, 0), between(0, 24)],
135 #[between(-6, 0), between(-3, 4), between(-24, 18)],
136 #[between(-6, 0), between(0, 4), between(-24, 0)],
137 #[between(-6, 0), between(3, 4), between(-24, 0)],
138 #[between(-6, 0), ZERO, ZERO],
139 #[between(-5, 6), UNBOUNDED, UNBOUNDED],
140 #[between(-5, 6), upTo(-2), UNBOUNDED],
141 #[between(-5, 6), upTo(0), UNBOUNDED],
142 #[between(-5, 6), upTo(3), UNBOUNDED],
143 #[between(-5, 6), above(-2), UNBOUNDED],
144 #[between(-5, 6), above(0), UNBOUNDED],
145 #[between(-5, 6), above(3), UNBOUNDED],
146 #[between(-5, 6), between(-4, -3), between(-24, 20)],
147 #[between(-5, 6), between(-4, 0), between(-24, 20)],
148 #[between(-5, 6), between(-3, 4), between(-20, 24)],
149 #[between(-5, 6), between(-3, 2), between(-18, 15)],
150 #[between(-5, 1), between(-3, 4), between(-20, 15)],
151 #[between(-5, 1), between(-3, 2), between(-10, 15)],
152 #[between(-5, 6), between(0, 4), between(-20, 24)],
153 #[between(-5, 6), between(3, 4), between(-20, 24)],
154 #[between(-5, 6), ZERO, ZERO],
155 #[between(0, 6), UNBOUNDED, UNBOUNDED],
156 #[between(0, 6), upTo(-2), upTo(0)],
157 #[between(0, 6), upTo(0), upTo(0)],
158 #[between(0, 6), upTo(3), upTo(18)],
159 #[between(0, 6), above(-2), above(-12)],
160 #[between(0, 6), above(0), above(0)],
161 #[between(0, 6), above(3), above(0)],
162 #[between(0, 6), between(-4, -3), between(-24, 0)],
163 #[between(0, 6), between(-4, 0), between(-24, 0)],
164 #[between(0, 6), between(-3, 4), between(-18, 24)],
165 #[between(0, 6), between(0, 4), between(0, 24)],
166 #[between(0, 6), between(3, 4), between(0, 24)],
167 #[between(0, 6), ZERO, ZERO],
168 #[between(5, 6), UNBOUNDED, UNBOUNDED],
169 #[between(5, 6), upTo(-2), upTo(-10)],
170 #[between(5, 6), upTo(0), upTo(0)],
171 #[between(5, 6), upTo(3), upTo(18)],
172 #[between(5, 6), above(-2), above(-12)],
173 #[between(5, 6), above(0), above(0)],
174 #[between(5, 6), above(3), above(15)],
175 #[between(5, 6), between(-4, -3), between(-24, -15)],
176 #[between(5, 6), between(-4, 0), between(-24, 0)],
177 #[between(5, 6), between(-3, 4), between(-18, 24)],
178 #[between(5, 6), between(0, 4), between(0, 24)],
179 #[between(5, 6), between(3, 4), between(15, 24)],
180 #[between(5, 6), ZERO, ZERO],
181 #[ZERO, UNBOUNDED, ZERO],
182 #[ZERO, upTo(-2), ZERO],
183 #[ZERO, upTo(0), ZERO],
184 #[ZERO, upTo(3), ZERO],
185 #[ZERO, above(-2), ZERO],
186 #[ZERO, above(0), ZERO],
187 #[ZERO, above(3), ZERO],
188 #[ZERO, between(-4, -3), ZERO],
189 #[ZERO, between(-4, 0), ZERO],
190 #[ZERO, between(-3, 4), ZERO],
191 #[ZERO, between(0, 4), ZERO],
192 #[ZERO, between(3, 4), ZERO],
193 #[ZERO, ZERO, ZERO]
194 ]
195 }
196
197 @Parameter(0) public var Interval a
198 @Parameter(1) public var Interval b
199 @Parameter(2) public var Interval result
200
201 @Test
202 def void multiplicatonTest() {
203 Assert.assertEquals(result, a * b)
204 }
205}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/NegationTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/NegationTest.xtend
new file mode 100644
index 00000000..477e925e
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/NegationTest.xtend
@@ -0,0 +1,34 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
4import java.util.Collection
5import org.junit.Assert
6import org.junit.Test
7import org.junit.runner.RunWith
8import org.junit.runners.Parameterized
9import org.junit.runners.Parameterized.Parameter
10import org.junit.runners.Parameterized.Parameters
11
12import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.*
13
14@RunWith(Parameterized)
15class NegationTest {
16 @Parameters(name = "{index}: -{0} = {1}")
17 static def Collection<Object[]> data() {
18 #[
19 #[EMPTY, EMPTY],
20 #[UNBOUNDED, UNBOUNDED],
21 #[upTo(1), above(-1)],
22 #[above(1), upTo(-1)],
23 #[between(2, 3), between(-3, -2)]
24 ]
25 }
26
27 @Parameter(0) public var Interval a
28 @Parameter(1) public var Interval result
29
30 @Test
31 def void negationTest() {
32 Assert.assertEquals(result, -a)
33 }
34}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SubtractionTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SubtractionTest.xtend
new file mode 100644
index 00000000..30709a9e
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SubtractionTest.xtend
@@ -0,0 +1,49 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
4import java.util.Collection
5import org.junit.Assert
6import org.junit.Test
7import org.junit.runner.RunWith
8import org.junit.runners.Parameterized
9import org.junit.runners.Parameterized.Parameter
10import org.junit.runners.Parameterized.Parameters
11
12import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.*
13
14@RunWith(Parameterized)
15class SubtractionTest {
16 @Parameters(name = "{index}: {0} - {1} = {2}")
17 static def Collection<Object[]> data() {
18 #[
19 #[EMPTY, EMPTY, EMPTY],
20 #[EMPTY, between(-1, 1), EMPTY],
21 #[between(-1, 1), EMPTY, EMPTY],
22 #[UNBOUNDED, UNBOUNDED, UNBOUNDED],
23 #[UNBOUNDED, upTo(2), UNBOUNDED],
24 #[UNBOUNDED, above(-2), UNBOUNDED],
25 #[UNBOUNDED, between(-1, 1), UNBOUNDED],
26 #[upTo(2), UNBOUNDED, UNBOUNDED],
27 #[upTo(2), upTo(1), UNBOUNDED],
28 #[upTo(2), above(-1), upTo(3)],
29 #[upTo(2), between(-1, 2), upTo(3)],
30 #[above(-2), UNBOUNDED, UNBOUNDED],
31 #[above(-2), upTo(1), above(-3)],
32 #[above(-2), above(-1), UNBOUNDED],
33 #[above(-2), between(-1, 2), above(-4)],
34 #[between(-2, 3), UNBOUNDED, UNBOUNDED],
35 #[between(-2, 3), upTo(1), above(-3)],
36 #[between(-2, 3), above(-1), upTo(4)],
37 #[between(-2, 3), between(-1, 2.5), between(-4.5, 4)]
38 ]
39 }
40
41 @Parameter(0) public var Interval a
42 @Parameter(1) public var Interval b
43 @Parameter(2) public var Interval result
44
45 @Test
46 def void subtractionTest() {
47 Assert.assertEquals(result, a - b)
48 }
49}