diff options
author | Pat Hawks <pat@pathawks.com> | 2017-08-24 17:31:09 -0500 |
---|---|---|
committer | Pat Hawks <pat@pathawks.com> | 2017-08-24 17:32:56 -0500 |
commit | 96b4329d58e7d13982e9fdcf458ab98ad0b6c07a (patch) | |
tree | 5db222f7375dad008138069abf21b82c81fc07c6 /test/java/LinearArith.java | |
parent | 27f0116e05c7448c14ba2527d1269806d32dd923 (diff) |
Test Java API on CI
Diffstat (limited to 'test/java/LinearArith.java')
-rw-r--r-- | test/java/LinearArith.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/java/LinearArith.java b/test/java/LinearArith.java new file mode 100644 index 000000000..9e745b663 --- /dev/null +++ b/test/java/LinearArith.java @@ -0,0 +1,73 @@ +import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; + +import edu.nyu.acsys.CVC4.*; + +public class LinearArith { + static { + System.loadLibrary("cvc4jni"); + } + ExprManager em; + SmtEngine smt; + + @Before + public void initialize() { + em = new ExprManager(); + smt = new SmtEngine(em); + } + + @Test + public void evaluatesExpression() { + smt.setLogic("QF_LIRA"); // Set the logic + + // Prove that if given x (Integer) and y (Real) then + // the maximum value of y - x is 2/3 + + // Types + Type real = em.realType(); + Type integer = em.integerType(); + + // Variables + Expr x = em.mkVar("x", integer); + Expr y = em.mkVar("y", real); + + // Constants + Expr three = em.mkConst(new Rational(3)); + Expr neg2 = em.mkConst(new Rational(-2)); + Expr two_thirds = em.mkConst(new Rational(2,3)); + + // Terms + Expr three_y = em.mkExpr(Kind.MULT, three, y); + Expr diff = em.mkExpr(Kind.MINUS, y, x); + + // Formulas + Expr x_geq_3y = em.mkExpr(Kind.GEQ, x, three_y); + Expr x_leq_y = em.mkExpr(Kind.LEQ, x, y); + Expr neg2_lt_x = em.mkExpr(Kind.LT, neg2, x); + + Expr assumptions = + em.mkExpr(Kind.AND, x_geq_3y, x_leq_y, neg2_lt_x); + smt.assertFormula(assumptions); + smt.push(); + Expr diff_leq_two_thirds = em.mkExpr(Kind.LEQ, diff, two_thirds); + + assertEquals( + Result.Validity.VALID, + smt.query(diff_leq_two_thirds).isValid() + ); + + smt.pop(); + + smt.push(); + Expr diff_is_two_thirds = em.mkExpr(Kind.EQUAL, diff, two_thirds); + smt.assertFormula(diff_is_two_thirds); + + assertEquals( + Result.Sat.SAT, + smt.checkSat(em.mkConst(true)).isSat() + ); + + smt.pop(); + } +} |