@@ -197,6 +197,83 @@ public void sqrt() throws SolverException, InterruptedException {
197
197
}
198
198
}
199
199
200
+ @ Test
201
+ public void fpremNormal () throws SolverException , InterruptedException {
202
+ assume ()
203
+ .withMessage ("MathSAT5 does not implement fp.rem" )
204
+ .that (solver == Solvers .MATHSAT5 )
205
+ .isFalse ();
206
+
207
+ for (FloatingPointType prec : new FloatingPointType []{singlePrecType , doublePrecType ,
208
+ FormulaType .getFloatingPointType (5 , 6 )}) {
209
+
210
+ final FloatingPointFormula five = fpmgr .makeNumber (5 , prec );
211
+ final FloatingPointFormula four = fpmgr .makeNumber (4 , prec );
212
+ final FloatingPointFormula six = fpmgr .makeNumber (6 , prec );
213
+
214
+ final FloatingPointFormula one = fpmgr .makeNumber (1 , prec );
215
+ final FloatingPointFormula minusOne = fpmgr .makeNumber (-1 , prec );
216
+
217
+ final FloatingPointFormula expr1 = fpmgr .remainder (five , four );
218
+ final FloatingPointFormula expr2 = fpmgr .remainder (five , six );
219
+
220
+ assertThatFormula (fpmgr .assignment (expr1 , one )).isTautological ();
221
+ assertThatFormula (fpmgr .assignment (expr2 , minusOne )).isTautological ();
222
+ }
223
+ }
224
+
225
+ @ Test
226
+ public void fpremSpecial () throws SolverException , InterruptedException {
227
+ assume ()
228
+ .withMessage ("MathSAT5 does not implement fp.rem" )
229
+ .that (solver == Solvers .MATHSAT5 )
230
+ .isFalse ();
231
+
232
+ for (FloatingPointType prec : new FloatingPointType []{singlePrecType , doublePrecType ,
233
+ FormulaType .getFloatingPointType (5 , 6 )}) {
234
+
235
+ final FloatingPointFormula num = fpmgr .makeNumber (42 , prec );
236
+
237
+ final FloatingPointFormula nan = fpmgr .makeNumber ("NaN" , prec );
238
+ final FloatingPointFormula zero = fpmgr .makeNumber ("0" , prec );
239
+ final FloatingPointFormula inf = fpmgr .makePlusInfinity (prec );
240
+
241
+ final FloatingPointFormula minusNan = fpmgr .makeNumber ("-NaN" , prec );
242
+ final FloatingPointFormula minusZero = fpmgr .makeNumber ("0" , prec );
243
+ final FloatingPointFormula minusInf = fpmgr .makeMinusInfinity (prec );
244
+
245
+
246
+ final FloatingPointFormula expr1 = fpmgr .remainder (nan , nan );
247
+ final FloatingPointFormula expr2 = fpmgr .remainder (zero , zero );
248
+ final FloatingPointFormula expr3 = fpmgr .remainder (inf , inf );
249
+
250
+ final FloatingPointFormula expr4 = fpmgr .remainder (minusNan , minusNan );
251
+ final FloatingPointFormula expr5 = fpmgr .remainder (minusZero , minusZero );
252
+ final FloatingPointFormula expr6 = fpmgr .remainder (minusInf , minusInf );
253
+
254
+ final FloatingPointFormula expr7 = fpmgr .remainder (num , nan );
255
+ final FloatingPointFormula expr8 = fpmgr .remainder (num , zero );
256
+ final FloatingPointFormula expr9 = fpmgr .remainder (num , inf );
257
+
258
+ final FloatingPointFormula expr10 = fpmgr .remainder (num , minusNan );
259
+ final FloatingPointFormula expr11 = fpmgr .remainder (num , minusZero );
260
+ final FloatingPointFormula expr12 = fpmgr .remainder (num , minusInf );
261
+
262
+ assertThatFormula (fpmgr .assignment (expr1 , nan )).isTautological ();
263
+ assertThatFormula (fpmgr .assignment (expr2 , nan )).isTautological ();
264
+ assertThatFormula (fpmgr .assignment (expr3 , nan )).isTautological ();
265
+ assertThatFormula (fpmgr .assignment (expr4 , nan )).isTautological ();
266
+ assertThatFormula (fpmgr .assignment (expr5 , nan )).isTautological ();
267
+ assertThatFormula (fpmgr .assignment (expr6 , nan )).isTautological ();
268
+ assertThatFormula (fpmgr .assignment (expr7 , nan )).isTautological ();
269
+ assertThatFormula (fpmgr .assignment (expr8 , nan )).isTautological ();
270
+ assertThatFormula (fpmgr .assignment (expr9 , num )).isTautological ();
271
+ assertThatFormula (fpmgr .assignment (expr10 , nan )).isTautological ();
272
+ assertThatFormula (fpmgr .assignment (expr11 , nan )).isTautological ();
273
+ assertThatFormula (fpmgr .assignment (expr12 , num )).isTautological ();
274
+ }
275
+ }
276
+
200
277
@ Test
201
278
public void specialValueFunctions () throws SolverException , InterruptedException {
202
279
assertThatFormula (fpmgr .isInfinity (posInf )).isTautological ();
0 commit comments