aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java')
-rw-r--r--subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java260
1 files changed, 260 insertions, 0 deletions
diff --git a/subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java b/subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java
new file mode 100644
index 00000000..55d9b740
--- /dev/null
+++ b/subprojects/logic/src/test/java/tools/refinery/logic/term/int_/IntTermsEvaluateTest.java
@@ -0,0 +1,260 @@
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.int_;
7
8import org.junit.jupiter.params.ParameterizedTest;
9import org.junit.jupiter.params.provider.Arguments;
10import org.junit.jupiter.params.provider.CsvSource;
11import org.junit.jupiter.params.provider.MethodSource;
12import tools.refinery.logic.term.int_.IntTerms;
13import tools.refinery.logic.term.real.RealTerms;
14import tools.refinery.logic.valuation.Valuation;
15
16import java.util.stream.Stream;
17
18import static org.hamcrest.Matchers.is;
19import static org.hamcrest.MatcherAssert.assertThat;
20
21class IntTermsEvaluateTest {
22 @ParameterizedTest(name = "+{0} == {1}")
23 @CsvSource(value = {
24 "2, 2",
25 "null, null"
26 }, nullValues = "null")
27 void plusTest(Integer a, Integer result) {
28 var term = IntTerms.plus(IntTerms.constant(a));
29 assertThat(term.getType(), is(Integer.class));
30 assertThat(term.evaluate(Valuation.empty()), is(result));
31 }
32
33 @ParameterizedTest(name = "-{0} == {1}")
34 @CsvSource(value = {
35 "2, -2",
36 "null, null"
37 }, nullValues = "null")
38 void minusTest(Integer a, Integer result) {
39 var term = IntTerms.minus(IntTerms.constant(a));
40 assertThat(term.getType(), is(Integer.class));
41 assertThat(term.evaluate(Valuation.empty()), is(result));
42 }
43
44 @ParameterizedTest(name = "{0} + {1} == {2}")
45 @CsvSource(value = {
46 "1, 2, 3",
47 "null, 2, null",
48 "1, null, null",
49 "null, null, null"
50 }, nullValues = "null")
51 void addTest(Integer a, Integer b, Integer result) {
52 var term = IntTerms.add(IntTerms.constant(a), IntTerms.constant(b));
53 assertThat(term.getType(), is(Integer.class));
54 assertThat(term.evaluate(Valuation.empty()), is(result));
55 }
56
57 @ParameterizedTest(name = "{0} - {1} == {2}")
58 @CsvSource(value = {
59 "1, 3, -2",
60 "null, 3, null",
61 "1, null, null",
62 "null, null, null"
63 }, nullValues = "null")
64 void subTest(Integer a, Integer b, Integer result) {
65 var term = IntTerms.sub(IntTerms.constant(a), IntTerms.constant(b));
66 assertThat(term.getType(), is(Integer.class));
67 assertThat(term.evaluate(Valuation.empty()), is(result));
68 }
69
70 @ParameterizedTest(name = "{0} * {1} == {2}")
71 @CsvSource(value = {
72 "2, 3, 6",
73 "null, 3, null",
74 "2, null, null",
75 "null, null, null"
76 }, nullValues = "null")
77 void mulTest(Integer a, Integer b, Integer result) {
78 var term = IntTerms.mul(IntTerms.constant(a), IntTerms.constant(b));
79 assertThat(term.getType(), is(Integer.class));
80 assertThat(term.evaluate(Valuation.empty()), is(result));
81 }
82
83 @ParameterizedTest(name = "{0} * {1} == {2}")
84 @CsvSource(value = {
85 "6, 3, 2",
86 "7, 3, 2",
87 "6, 0, null",
88 "null, 3, null",
89 "6, null, null",
90 "null, null, null"
91 }, nullValues = "null")
92 void divTest(Integer a, Integer b, Integer result) {
93 var term = IntTerms.div(IntTerms.constant(a), IntTerms.constant(b));
94 assertThat(term.getType(), is(Integer.class));
95 assertThat(term.evaluate(Valuation.empty()), is(result));
96 }
97
98 @ParameterizedTest(name = "{0} ** {1} == {2}")
99 @CsvSource(value = {
100 "1, 0, 1",
101 "1, 3, 1",
102 "1, -3, null",
103 "2, 0, 1",
104 "2, 2, 4",
105 "2, 3, 8",
106 "2, 4, 16",
107 "2, 5, 32",
108 "2, 6, 64",
109 "2, -3, null",
110 "null, 3, null",
111 "2, null, null",
112 "null, null, null"
113 }, nullValues = "null")
114 void powTest(Integer a, Integer b, Integer result) {
115 var term = IntTerms.pow(IntTerms.constant(a), IntTerms.constant(b));
116 assertThat(term.getType(), is(Integer.class));
117 assertThat(term.evaluate(Valuation.empty()), is(result));
118 }
119
120 @ParameterizedTest(name = "min({0}, {1}) == {2}")
121 @CsvSource(value = {
122 "1, 2, 1",
123 "2, 1, 1",
124 "null, 2, null",
125 "1, null, null",
126 "null, null, null"
127 }, nullValues = "null")
128 void minTest(Integer a, Integer b, Integer result) {
129 var term = IntTerms.min(IntTerms.constant(a), IntTerms.constant(b));
130 assertThat(term.getType(), is(Integer.class));
131 assertThat(term.evaluate(Valuation.empty()), is(result));
132 }
133
134 @ParameterizedTest(name = "max({0}, {1}) == {2}")
135 @CsvSource(value = {
136 "1, 2, 2",
137 "2, 1, 2",
138 "null, 2, null",
139 "1, null, null",
140 "null, null, null"
141 }, nullValues = "null")
142 void maxTest(Integer a, Integer b, Integer result) {
143 var term = IntTerms.max(IntTerms.constant(a), IntTerms.constant(b));
144 assertThat(term.getType(), is(Integer.class));
145 assertThat(term.evaluate(Valuation.empty()), is(result));
146 }
147
148 @ParameterizedTest(name = "({0} == {1}) == {2}")
149 @CsvSource(value = {
150 "1, 1, true",
151 "1, 2, false",
152 "null, 1, null",
153 "1, null, null",
154 "null, null, null"
155 }, nullValues = "null")
156 void eqTest(Integer a, Integer b, Boolean result) {
157 var term = IntTerms.eq(IntTerms.constant(a), IntTerms.constant(b));
158 assertThat(term.getType(), is(Boolean.class));
159 assertThat(term.evaluate(Valuation.empty()), is(result));
160 }
161
162 @ParameterizedTest(name = "({0} != {1}) == {2}")
163 @CsvSource(value = {
164 "1, 1, false",
165 "1, 2, true",
166 "null, 1, null",
167 "1, null, null",
168 "null, null, null"
169 }, nullValues = "null")
170 void notEqTest(Integer a, Integer b, Boolean result) {
171 var term = IntTerms.notEq(IntTerms.constant(a), IntTerms.constant(b));
172 assertThat(term.getType(), is(Boolean.class));
173 assertThat(term.evaluate(Valuation.empty()), is(result));
174 }
175
176 @ParameterizedTest(name = "({0} < {1}) == {2}")
177 @CsvSource(value = {
178 "1, -2, false",
179 "1, 1, false",
180 "1, 2, true",
181 "null, 1, null",
182 "1, null, null",
183 "null, null, null"
184 }, nullValues = "null")
185 void lessTest(Integer a, Integer b, Boolean result) {
186 var term = IntTerms.less(IntTerms.constant(a), IntTerms.constant(b));
187 assertThat(term.getType(), is(Boolean.class));
188 assertThat(term.evaluate(Valuation.empty()), is(result));
189 }
190
191 @ParameterizedTest(name = "({0} <= {1}) == {2}")
192 @CsvSource(value = {
193 "1, -2, false",
194 "1, 1, true",
195 "1, 2, true",
196 "null, 1, null",
197 "1, null, null",
198 "null, null, null"
199 }, nullValues = "null")
200 void lessEqTest(Integer a, Integer b, Boolean result) {
201 var term = IntTerms.lessEq(IntTerms.constant(a), IntTerms.constant(b));
202 assertThat(term.getType(), is(Boolean.class));
203 assertThat(term.evaluate(Valuation.empty()), is(result));
204 }
205
206 @ParameterizedTest(name = "({0} > {1}) == {2}")
207 @CsvSource(value = {
208 "1, -2, true",
209 "1, 1, false",
210 "1, 2, false",
211 "null, 1, null",
212 "1, null, null",
213 "null, null, null"
214 }, nullValues = "null")
215 void greaterTest(Integer a, Integer b, Boolean result) {
216 var term = IntTerms.greater(IntTerms.constant(a), IntTerms.constant(b));
217 assertThat(term.getType(), is(Boolean.class));
218 assertThat(term.evaluate(Valuation.empty()), is(result));
219 }
220
221 @ParameterizedTest(name = "({0} >= {1}) == {2}")
222 @CsvSource(value = {
223 "1, -2, true",
224 "1, 1, true",
225 "1, 2, false",
226 "null, 1, null",
227 "1, null, null",
228 "null, null, null"
229 }, nullValues = "null")
230 void greaterEqTest(Integer a, Integer b, Boolean result) {
231 var term = IntTerms.greaterEq(IntTerms.constant(a), IntTerms.constant(b));
232 assertThat(term.getType(), is(Boolean.class));
233 assertThat(term.evaluate(Valuation.empty()), is(result));
234 }
235
236 @ParameterizedTest(name = "{0} as int == {1}")
237 @MethodSource
238 void asIntTest(Double a, Integer result) {
239 var term = IntTerms.asInt(RealTerms.constant(a));
240 assertThat(term.getType(), is(Integer.class));
241 assertThat(term.evaluate(Valuation.empty()), is(result));
242 }
243
244 static Stream<Arguments> asIntTest() {
245 return Stream.of(
246 Arguments.of(2.0, 2),
247 Arguments.of(2.1, 2),
248 Arguments.of(2.9, 2),
249 Arguments.of(-2.0, -2),
250 Arguments.of(-2.1, -2),
251 Arguments.of(-2.9, -2),
252 Arguments.of(0.0, 0),
253 Arguments.of(-0.0, 0),
254 Arguments.of(Double.POSITIVE_INFINITY, Integer.MAX_VALUE),
255 Arguments.of(Double.NEGATIVE_INFINITY, Integer.MIN_VALUE),
256 Arguments.of(Double.NaN, null),
257 Arguments.of(null, null)
258 );
259 }
260}