summaryrefslogtreecommitdiff
path: root/test/java/LinearArith.java
diff options
context:
space:
mode:
authorPat Hawks <pat@pathawks.com>2017-08-24 17:31:09 -0500
committerPat Hawks <pat@pathawks.com>2017-08-24 17:32:56 -0500
commit96b4329d58e7d13982e9fdcf458ab98ad0b6c07a (patch)
tree5db222f7375dad008138069abf21b82c81fc07c6 /test/java/LinearArith.java
parent27f0116e05c7448c14ba2527d1269806d32dd923 (diff)
Test Java API on CI
Diffstat (limited to 'test/java/LinearArith.java')
-rw-r--r--test/java/LinearArith.java73
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();
+ }
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback