1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/******************************************************************************
* Top contributors (to current version):
* Mudathir Mohamed, Aina Niemetz, Andrew Reynolds
*
* This file is part of the cvc5 project.
*
* Copyright (c) 2009-2025 by the authors listed in the file AUTHORS
* in the top-level source directory and their institutional affiliations.
* All rights reserved. See the file COPYING in the top-level source
* directory for licensing information.
* ****************************************************************************
*
* Black box testing of the Result class
*/
package tests;
import static io.github.cvc5.Kind.*;
import static org.junit.jupiter.api.Assertions.*;
import io.github.cvc5.*;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class ResultTest
{
private TermManager d_tm;
private Solver d_solver;
@BeforeEach
void setUp()
{
d_tm = new TermManager();
d_solver = new Solver(d_tm);
}
@AfterEach
void tearDown()
{
Context.deletePointers();
}
@Test
void isNull()
{
Result res_null = new Result();
assertTrue(res_null.isNull());
assertFalse(res_null.isSat());
assertFalse(res_null.isUnsat());
assertFalse(res_null.isUnknown());
Sort u_sort = d_tm.mkUninterpretedSort("u");
Term x = d_tm.mkConst(u_sort, "x");
d_solver.assertFormula(x.eqTerm(x));
Result res = d_solver.checkSat();
assertFalse(res.isNull());
}
@Test
void equalHash()
{
Sort u_sort = d_tm.mkUninterpretedSort();
Term x = d_tm.mkConst(u_sort, "x");
d_solver.assertFormula(x.eqTerm(x));
Result res = null;
Result res2 = d_solver.checkSat();
Result res3 = d_solver.checkSat();
res = res2;
assertTrue(res.equals(res2));
assertTrue(res3.equals(res2));
assertEquals(res.toString(), "sat");
assertEquals(res.hashCode(), res2.hashCode());
assertEquals(res3.hashCode(), res2.hashCode());
}
@Test
void isSat()
{
Sort u_sort = d_tm.mkUninterpretedSort("u");
Term x = d_tm.mkConst(u_sort, "x");
d_solver.assertFormula(x.eqTerm(x));
Result res = d_solver.checkSat();
assertTrue(res.isSat());
assertFalse(res.isUnknown());
}
@Test
void isUnsat()
{
Sort u_sort = d_tm.mkUninterpretedSort();
Term x = d_tm.mkConst(u_sort, "x");
d_solver.assertFormula(x.eqTerm(x).notTerm());
Result res = d_solver.checkSat();
assertTrue(res.isUnsat());
assertFalse(res.isUnknown());
}
@Test
void isUnknown() throws CVC5ApiException
{
d_solver.setLogic("QF_NIA");
d_solver.setOption("incremental", "false");
d_solver.setOption("solve-real-as-int", "true");
Sort real_sort = d_tm.getIntegerSort();
Term x = d_tm.mkConst(real_sort, "x");
d_solver.assertFormula(d_tm.mkTerm(LT, d_tm.mkReal("0.0"), x));
d_solver.assertFormula(d_tm.mkTerm(LT, x, d_tm.mkReal("1.0")));
Result res = d_solver.checkSat();
assertFalse(res.isSat());
assertTrue(res.isUnknown());
UnknownExplanation ue = res.getUnknownExplanation();
assertEquals(ue, UnknownExplanation.INCOMPLETE);
assertEquals(ue.toString(), "INCOMPLETE");
}
}
|