aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src/test
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-11-27 21:11:39 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-12-09 00:07:38 +0100
commit3c1e93b7cb50d20abe08f1b95b8dc8d62ed4c38c (patch)
tree21f4c04e750614d9f60484a08ee5402452acaf01 /subprojects/store/src/test
parentrefactor: be more conservative w/preview features (diff)
downloadrefinery-3c1e93b7cb50d20abe08f1b95b8dc8d62ed4c38c.tar.gz
refinery-3c1e93b7cb50d20abe08f1b95b8dc8d62ed4c38c.tar.zst
refinery-3c1e93b7cb50d20abe08f1b95b8dc8d62ed4c38c.zip
feat: add cardinality interval abstraction
Diffstat (limited to 'subprojects/store/src/test')
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalTest.java122
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalsTest.java21
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/EmptyCardinalityIntervalTest.java14
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteCardinalityIntervalTest.java20
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteUpperCardinalityTest.java12
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalitiesTest.java25
-rw-r--r--subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalityTest.java110
7 files changed, 324 insertions, 0 deletions
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalTest.java
new file mode 100644
index 00000000..8a39b9b5
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalTest.java
@@ -0,0 +1,122 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.params.ParameterizedTest;
4import org.junit.jupiter.params.provider.Arguments;
5import org.junit.jupiter.params.provider.MethodSource;
6
7import java.util.stream.Stream;
8
9import static org.hamcrest.MatcherAssert.assertThat;
10import static org.hamcrest.Matchers.equalTo;
11import static tools.refinery.store.model.representation.cardinality.CardinalityIntervals.*;
12
13class CardinalityIntervalTest {
14 @ParameterizedTest(name = "min({0}, {1}) == {2}")
15 @MethodSource
16 void minTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
17 assertThat(a.min(b), equalTo(expected));
18 }
19
20 static Stream<Arguments> minTest() {
21 return Stream.of(
22 Arguments.of(atMost(1), atMost(1), atMost(1)),
23 Arguments.of(atMost(1), between(2, 3), atMost(1)),
24 Arguments.of(atMost(1), atLeast(2), atMost(1)),
25 Arguments.of(atMost(1), ERROR, ERROR),
26 Arguments.of(atLeast(1), atLeast(2), atLeast(1)),
27 Arguments.of(atLeast(1), ERROR, ERROR),
28 Arguments.of(ERROR, atLeast(2), ERROR),
29 Arguments.of(ERROR, ERROR, ERROR)
30 );
31 }
32
33 @ParameterizedTest(name = "max({0}, {1}) == {2}")
34 @MethodSource
35 void maxTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
36 assertThat(a.max(b), equalTo(expected));
37 }
38
39 static Stream<Arguments> maxTest() {
40 return Stream.of(
41 Arguments.of(atMost(1), atMost(1), atMost(1)),
42 Arguments.of(atMost(1), between(2, 3), between(2, 3)),
43 Arguments.of(atMost(1), atLeast(2), atLeast(2)),
44 Arguments.of(atMost(1), ERROR, ERROR),
45 Arguments.of(atLeast(1), atLeast(2), atLeast(2)),
46 Arguments.of(atLeast(1), ERROR, ERROR),
47 Arguments.of(ERROR, atLeast(2), ERROR),
48 Arguments.of(ERROR, ERROR, ERROR)
49 );
50 }
51
52 @ParameterizedTest(name = "{0} + {1} == {2}")
53 @MethodSource
54 void addTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
55 assertThat(a.add(b), equalTo(expected));
56 }
57
58 static Stream<Arguments> addTest() {
59 return Stream.of(
60 Arguments.of(atMost(1), atMost(1), atMost(2)),
61 Arguments.of(atMost(1), between(2, 3), between(2, 4)),
62 Arguments.of(atMost(1), atLeast(2), atLeast(2)),
63 Arguments.of(atMost(1), ERROR, ERROR),
64 Arguments.of(atLeast(1), atLeast(2), atLeast(3)),
65 Arguments.of(atLeast(1), ERROR, ERROR),
66 Arguments.of(ERROR, atLeast(2), ERROR),
67 Arguments.of(ERROR, ERROR, ERROR)
68 );
69 }
70
71 @ParameterizedTest(name = "{0} * {1} == {2}")
72 @MethodSource
73 void multiplyTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
74 assertThat(a.multiply(b), equalTo(expected));
75 }
76
77 static Stream<Arguments> multiplyTest() {
78 return Stream.of(
79 Arguments.of(between(2, 3), between(4, 5), between(8, 15)),
80 Arguments.of(atLeast(2), between(4, 5), atLeast(8)),
81 Arguments.of(between(2, 3), atLeast(4), atLeast(8)),
82 Arguments.of(between(2, 3), ERROR, ERROR),
83 Arguments.of(ERROR, between(4, 5), ERROR),
84 Arguments.of(ERROR, ERROR, ERROR)
85 );
86 }
87
88 @ParameterizedTest(name = "{0} /\\ {1} == {2}")
89 @MethodSource
90 void meetTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
91 assertThat(a.meet(b), equalTo(expected));
92 }
93
94 static Stream<Arguments> meetTest() {
95 return Stream.of(
96 Arguments.of(atMost(1), atMost(2), atMost(1)),
97 Arguments.of(atMost(2), between(1, 3), between(1, 2)),
98 Arguments.of(atMost(1), between(1, 3), exactly(1)),
99 Arguments.of(atMost(1), between(2, 3), ERROR),
100 Arguments.of(atMost(1), ERROR, ERROR),
101 Arguments.of(ERROR, atMost(1), ERROR),
102 Arguments.of(ERROR, ERROR, ERROR)
103 );
104 }
105
106 @ParameterizedTest(name = "{0} \\/ {1} == {2}")
107 @MethodSource
108 void joinTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
109 assertThat(a.join(b), equalTo(expected));
110 }
111
112 static Stream<Arguments> joinTest() {
113 return Stream.of(
114 Arguments.of(atMost(1), atMost(2), atMost(2)),
115 Arguments.of(atMost(2), between(1, 3), atMost(3)),
116 Arguments.of(atMost(1), between(2, 3), atMost(3)),
117 Arguments.of(atMost(1), ERROR, atMost(1)),
118 Arguments.of(ERROR, atMost(1), atMost(1)),
119 Arguments.of(ERROR, ERROR, ERROR)
120 );
121 }
122}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalsTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalsTest.java
new file mode 100644
index 00000000..ef68a607
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/CardinalityIntervalsTest.java
@@ -0,0 +1,21 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.api.Test;
4
5import static org.hamcrest.MatcherAssert.assertThat;
6import static org.hamcrest.Matchers.*;
7
8class CardinalityIntervalsTest {
9 @Test
10 void betweenEmptyTest() {
11 var interval = CardinalityIntervals.between(2, 1);
12 assertThat(interval.isEmpty(), equalTo(true));
13 }
14
15 @Test
16 void betweenNegativeUpperBoundTest() {
17 var interval = CardinalityIntervals.between(0, -1);
18 assertThat(interval.upperBound(), equalTo(UpperCardinalities.UNBOUNDED));
19 assertThat(interval.isEmpty(), equalTo(false));
20 }
21}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/EmptyCardinalityIntervalTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/EmptyCardinalityIntervalTest.java
new file mode 100644
index 00000000..41c884ec
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/EmptyCardinalityIntervalTest.java
@@ -0,0 +1,14 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.api.Test;
4
5import static org.hamcrest.MatcherAssert.assertThat;
6import static org.hamcrest.Matchers.lessThan;
7
8class EmptyCardinalityIntervalTest {
9 @Test
10 void inconsistentBoundsTest() {
11 assertThat(CardinalityIntervals.ERROR.upperBound().compareToInt(CardinalityIntervals.ERROR.lowerBound()),
12 lessThan(0));
13 }
14}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteCardinalityIntervalTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteCardinalityIntervalTest.java
new file mode 100644
index 00000000..dfb37786
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteCardinalityIntervalTest.java
@@ -0,0 +1,20 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.api.Test;
4
5import static org.junit.jupiter.api.Assertions.assertThrows;
6
7class FiniteCardinalityIntervalTest {
8 @Test
9 void invalidLowerBoundConstructorTest() {
10 assertThrows(IllegalArgumentException.class, () -> new NonEmptyCardinalityInterval(-1,
11 UpperCardinalities.UNBOUNDED));
12 }
13
14 @Test
15 void invalidUpperBoundConstructorTest() {
16 var upperCardinality = UpperCardinality.of(1);
17 assertThrows(IllegalArgumentException.class, () -> new NonEmptyCardinalityInterval(2,
18 upperCardinality));
19 }
20}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteUpperCardinalityTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteUpperCardinalityTest.java
new file mode 100644
index 00000000..3f0f7a4a
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/FiniteUpperCardinalityTest.java
@@ -0,0 +1,12 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.api.Test;
4
5import static org.junit.jupiter.api.Assertions.assertThrows;
6
7class FiniteUpperCardinalityTest {
8 @Test
9 void invalidConstructorTest() {
10 assertThrows(IllegalArgumentException.class, () -> new FiniteUpperCardinality(-1));
11 }
12}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalitiesTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalitiesTest.java
new file mode 100644
index 00000000..13171ae5
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalitiesTest.java
@@ -0,0 +1,25 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.api.Test;
4import org.junit.jupiter.params.ParameterizedTest;
5import org.junit.jupiter.params.provider.ValueSource;
6
7import static org.hamcrest.MatcherAssert.assertThat;
8import static org.hamcrest.Matchers.equalTo;
9import static org.hamcrest.Matchers.instanceOf;
10
11class UpperCardinalitiesTest {
12 @ParameterizedTest
13 @ValueSource(ints = {0, 1, 255, 256, 1000, Integer.MAX_VALUE})
14 void valueOfBoundedTest(int value) {
15 var upperCardinality = UpperCardinalities.valueOf(value);
16 assertThat(upperCardinality, instanceOf(FiniteUpperCardinality.class));
17 assertThat(((FiniteUpperCardinality) upperCardinality).finiteUpperBound(), equalTo(value));
18 }
19
20 @Test
21 void valueOfUnboundedTest() {
22 var upperCardinality = UpperCardinalities.valueOf(-1);
23 assertThat(upperCardinality, instanceOf(UnboundedUpperCardinality.class));
24 }
25}
diff --git a/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalityTest.java b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalityTest.java
new file mode 100644
index 00000000..f5763c2d
--- /dev/null
+++ b/subprojects/store/src/test/java/tools/refinery/store/model/representation/cardinality/UpperCardinalityTest.java
@@ -0,0 +1,110 @@
1package tools.refinery.store.model.representation.cardinality;
2
3import org.junit.jupiter.params.ParameterizedTest;
4import org.junit.jupiter.params.provider.Arguments;
5import org.junit.jupiter.params.provider.MethodSource;
6
7import java.util.stream.Stream;
8
9import static org.hamcrest.MatcherAssert.assertThat;
10import static org.hamcrest.Matchers.equalTo;
11
12class UpperCardinalityTest {
13 @ParameterizedTest(name = "min({0}, {1}) == {2}")
14 @MethodSource
15 void minTest(UpperCardinality a, UpperCardinality b, UpperCardinality expected) {
16 assertThat(a.min(b), equalTo(expected));
17 }
18
19 static Stream<Arguments> minTest() {
20 return Stream.of(
21 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(0), UpperCardinality.of(0)),
22 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(1), UpperCardinality.of(0)),
23 Arguments.of(UpperCardinality.of(1), UpperCardinality.of(0), UpperCardinality.of(0)),
24 Arguments.of(UpperCardinality.of(0), UpperCardinalities.UNBOUNDED, UpperCardinality.of(0)),
25 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinality.of(0), UpperCardinality.of(0)),
26 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED)
27 );
28 }
29
30 @ParameterizedTest(name = "max({0}, {1}) == {2}")
31 @MethodSource
32 void maxTest(UpperCardinality a, UpperCardinality b, UpperCardinality expected) {
33 assertThat(a.max(b), equalTo(expected));
34 }
35
36 static Stream<Arguments> maxTest() {
37 return Stream.of(
38 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(0), UpperCardinality.of(0)),
39 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(1), UpperCardinality.of(1)),
40 Arguments.of(UpperCardinality.of(1), UpperCardinality.of(0), UpperCardinality.of(1)),
41 Arguments.of(UpperCardinality.of(0), UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED),
42 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinality.of(0), UpperCardinalities.UNBOUNDED),
43 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED)
44 );
45 }
46
47 @ParameterizedTest(name = "{0} + {1} == {2}")
48 @MethodSource
49 void addTest(UpperCardinality a, UpperCardinality b, UpperCardinality expected) {
50 assertThat(a.add(b), equalTo(expected));
51 }
52
53 static Stream<Arguments> addTest() {
54 return Stream.of(
55 Arguments.of(UpperCardinality.of(2), UpperCardinality.of(3), UpperCardinality.of(5)),
56 Arguments.of(UpperCardinality.of(2), UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED),
57 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinality.of(2), UpperCardinalities.UNBOUNDED),
58 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED)
59 );
60 }
61
62 @ParameterizedTest(name = "{0} * {1} == {2}")
63 @MethodSource
64 void multiplyTest(UpperCardinality a, UpperCardinality b, UpperCardinality expected) {
65 assertThat(a.multiply(b), equalTo(expected));
66 }
67
68 static Stream<Arguments> multiplyTest() {
69 return Stream.of(
70 Arguments.of(UpperCardinality.of(2), UpperCardinality.of(3), UpperCardinality.of(6)),
71 Arguments.of(UpperCardinality.of(2), UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED),
72 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinality.of(2), UpperCardinalities.UNBOUNDED),
73 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED)
74 );
75 }
76
77 @ParameterizedTest(name = "{0}.compareTo({1}) == {2}")
78 @MethodSource
79 void compareToTest(UpperCardinality a, UpperCardinality b, int expected) {
80 assertThat(a.compareTo(b), equalTo(expected));
81 }
82
83 static Stream<Arguments> compareToTest() {
84 return Stream.of(
85 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(0), 0),
86 Arguments.of(UpperCardinality.of(0), UpperCardinality.of(1), -1),
87 Arguments.of(UpperCardinality.of(1), UpperCardinality.of(0), 1),
88 Arguments.of(UpperCardinality.of(0), UpperCardinalities.UNBOUNDED, -1),
89 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinality.of(0), 1),
90 Arguments.of(UpperCardinalities.UNBOUNDED, UpperCardinalities.UNBOUNDED, 0)
91 );
92 }
93
94 @ParameterizedTest(name = "{0}.compareToInt({1}) == {2}")
95 @MethodSource
96 void compareToIntTest(UpperCardinality a, int b, int expected) {
97 assertThat(a.compareToInt(b), equalTo(expected));
98 }
99
100 static Stream<Arguments> compareToIntTest() {
101 return Stream.of(
102 Arguments.of(UpperCardinality.of(3), -1, 1),
103 Arguments.of(UpperCardinality.of(3), 2, 1),
104 Arguments.of(UpperCardinality.of(3), 3, 0),
105 Arguments.of(UpperCardinality.of(3), 4, -1),
106 Arguments.of(UpperCardinalities.UNBOUNDED, -1, 1),
107 Arguments.of(UpperCardinalities.UNBOUNDED, 3, 1)
108 );
109 }
110}