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