diff options
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.java | 127 |
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 | */ | ||
6 | package tools.refinery.logic.term.cardinalityinterval; | ||
7 | |||
8 | import org.junit.jupiter.params.ParameterizedTest; | ||
9 | import org.junit.jupiter.params.provider.Arguments; | ||
10 | import org.junit.jupiter.params.provider.MethodSource; | ||
11 | |||
12 | import java.util.stream.Stream; | ||
13 | |||
14 | import static org.hamcrest.MatcherAssert.assertThat; | ||
15 | import static org.hamcrest.Matchers.equalTo; | ||
16 | import static tools.refinery.logic.term.cardinalityinterval.CardinalityIntervals.*; | ||
17 | |||
18 | class 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 | } | ||