diff options
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.java | 260 |
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 | */ | ||
6 | package tools.refinery.logic.term.int_; | ||
7 | |||
8 | import org.junit.jupiter.params.ParameterizedTest; | ||
9 | import org.junit.jupiter.params.provider.Arguments; | ||
10 | import org.junit.jupiter.params.provider.CsvSource; | ||
11 | import org.junit.jupiter.params.provider.MethodSource; | ||
12 | import tools.refinery.logic.term.int_.IntTerms; | ||
13 | import tools.refinery.logic.term.real.RealTerms; | ||
14 | import tools.refinery.logic.valuation.Valuation; | ||
15 | |||
16 | import java.util.stream.Stream; | ||
17 | |||
18 | import static org.hamcrest.Matchers.is; | ||
19 | import static org.hamcrest.MatcherAssert.assertThat; | ||
20 | |||
21 | class 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 | } | ||