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