aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java')
-rw-r--r--subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java b/subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java
new file mode 100644
index 00000000..ee2dd61c
--- /dev/null
+++ b/subprojects/logic/src/test/java/tools/refinery/logic/term/cardinalityinterval/CardinalityIntervalTest.java
@@ -0,0 +1,127 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.logic.term.cardinalityinterval;
7
8import org.junit.jupiter.params.ParameterizedTest;
9import org.junit.jupiter.params.provider.Arguments;
10import org.junit.jupiter.params.provider.MethodSource;
11
12import java.util.stream.Stream;
13
14import static org.hamcrest.MatcherAssert.assertThat;
15import static org.hamcrest.Matchers.equalTo;
16import static tools.refinery.logic.term.cardinalityinterval.CardinalityIntervals.*;
17
18class CardinalityIntervalTest {
19 @ParameterizedTest(name = "min({0}, {1}) == {2}")
20 @MethodSource
21 void minTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
22 assertThat(a.min(b), equalTo(expected));
23 }
24
25 static Stream<Arguments> minTest() {
26 return Stream.of(
27 Arguments.of(atMost(1), atMost(1), atMost(1)),
28 Arguments.of(atMost(1), between(2, 3), atMost(1)),
29 Arguments.of(atMost(1), atLeast(2), atMost(1)),
30 Arguments.of(atMost(1), ERROR, ERROR),
31 Arguments.of(atLeast(1), atLeast(2), atLeast(1)),
32 Arguments.of(atLeast(1), ERROR, ERROR),
33 Arguments.of(ERROR, atLeast(2), ERROR),
34 Arguments.of(ERROR, ERROR, ERROR)
35 );
36 }
37
38 @ParameterizedTest(name = "max({0}, {1}) == {2}")
39 @MethodSource
40 void maxTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
41 assertThat(a.max(b), equalTo(expected));
42 }
43
44 static Stream<Arguments> maxTest() {
45 return Stream.of(
46 Arguments.of(atMost(1), atMost(1), atMost(1)),
47 Arguments.of(atMost(1), between(2, 3), between(2, 3)),
48 Arguments.of(atMost(1), atLeast(2), atLeast(2)),
49 Arguments.of(atMost(1), ERROR, ERROR),
50 Arguments.of(atLeast(1), atLeast(2), atLeast(2)),
51 Arguments.of(atLeast(1), ERROR, ERROR),
52 Arguments.of(ERROR, atLeast(2), ERROR),
53 Arguments.of(ERROR, ERROR, ERROR)
54 );
55 }
56
57 @ParameterizedTest(name = "{0} + {1} == {2}")
58 @MethodSource
59 void addTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
60 assertThat(a.add(b), equalTo(expected));
61 }
62
63 static Stream<Arguments> addTest() {
64 return Stream.of(
65 Arguments.of(atMost(1), atMost(1), atMost(2)),
66 Arguments.of(atMost(1), between(2, 3), between(2, 4)),
67 Arguments.of(atMost(1), atLeast(2), atLeast(2)),
68 Arguments.of(atMost(1), ERROR, ERROR),
69 Arguments.of(atLeast(1), atLeast(2), atLeast(3)),
70 Arguments.of(atLeast(1), ERROR, ERROR),
71 Arguments.of(ERROR, atLeast(2), ERROR),
72 Arguments.of(ERROR, ERROR, ERROR)
73 );
74 }
75
76 @ParameterizedTest(name = "{0} * {1} == {2}")
77 @MethodSource
78 void multiplyTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
79 assertThat(a.multiply(b), equalTo(expected));
80 }
81
82 static Stream<Arguments> multiplyTest() {
83 return Stream.of(
84 Arguments.of(between(2, 3), between(4, 5), between(8, 15)),
85 Arguments.of(atLeast(2), between(4, 5), atLeast(8)),
86 Arguments.of(between(2, 3), atLeast(4), atLeast(8)),
87 Arguments.of(between(2, 3), ERROR, ERROR),
88 Arguments.of(ERROR, between(4, 5), ERROR),
89 Arguments.of(ERROR, ERROR, ERROR)
90 );
91 }
92
93 @ParameterizedTest(name = "{0} /\\ {1} == {2}")
94 @MethodSource
95 void meetTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
96 assertThat(a.meet(b), equalTo(expected));
97 }
98
99 static Stream<Arguments> meetTest() {
100 return Stream.of(
101 Arguments.of(atMost(1), atMost(2), atMost(1)),
102 Arguments.of(atMost(2), between(1, 3), between(1, 2)),
103 Arguments.of(atMost(1), between(1, 3), exactly(1)),
104 Arguments.of(atMost(1), between(2, 3), ERROR),
105 Arguments.of(atMost(1), ERROR, ERROR),
106 Arguments.of(ERROR, atMost(1), ERROR),
107 Arguments.of(ERROR, ERROR, ERROR)
108 );
109 }
110
111 @ParameterizedTest(name = "{0} \\/ {1} == {2}")
112 @MethodSource
113 void joinTest(CardinalityInterval a, CardinalityInterval b, CardinalityInterval expected) {
114 assertThat(a.join(b), equalTo(expected));
115 }
116
117 static Stream<Arguments> joinTest() {
118 return Stream.of(
119 Arguments.of(atMost(1), atMost(2), atMost(2)),
120 Arguments.of(atMost(2), between(1, 3), atMost(3)),
121 Arguments.of(atMost(1), between(2, 3), atMost(3)),
122 Arguments.of(atMost(1), ERROR, atMost(1)),
123 Arguments.of(ERROR, atMost(1), atMost(1)),
124 Arguments.of(ERROR, ERROR, ERROR)
125 );
126 }
127}