1#include "storm-config.h"
7TEST(MathsatSmtSolver, CheckSat) {
18 ASSERT_NO_THROW(s.add(exprDeMorgan));
19 ASSERT_NO_THROW(result = s.check());
21 ASSERT_NO_THROW(s.reset());
30 ASSERT_NO_THROW(s.add(exprFormula));
31 ASSERT_NO_THROW(result = s.check());
33 ASSERT_NO_THROW(s.reset());
36TEST(MathsatSmtSolver, CheckUnsat) {
47 ASSERT_NO_THROW(s.add(!exprDeMorgan));
48 ASSERT_NO_THROW(result = s.check());
50 ASSERT_NO_THROW(s.reset());
59 ASSERT_NO_THROW(s.add(exprFormula));
60 ASSERT_NO_THROW(result = s.check());
64TEST(MathsatSmtSolver, Backtracking) {
74 ASSERT_NO_THROW(s.add(expr1));
75 ASSERT_NO_THROW(result = s.check());
77 ASSERT_NO_THROW(s.push());
78 ASSERT_NO_THROW(s.add(expr2));
79 ASSERT_NO_THROW(result = s.check());
81 ASSERT_NO_THROW(s.pop());
82 ASSERT_NO_THROW(result = s.check());
84 ASSERT_NO_THROW(s.push());
85 ASSERT_NO_THROW(s.add(expr2));
86 ASSERT_NO_THROW(result = s.check());
88 ASSERT_NO_THROW(s.push());
89 ASSERT_NO_THROW(s.add(expr3));
90 ASSERT_NO_THROW(result = s.check());
92 ASSERT_NO_THROW(s.pop(2));
93 ASSERT_NO_THROW(result = s.check());
95 ASSERT_NO_THROW(s.reset());
104 ASSERT_NO_THROW(s.add(exprFormula));
105 ASSERT_NO_THROW(result = s.check());
107 ASSERT_NO_THROW(s.push());
108 ASSERT_NO_THROW(s.add(exprFormula2));
109 ASSERT_NO_THROW(result = s.check());
111 ASSERT_NO_THROW(s.pop());
112 ASSERT_NO_THROW(result = s.check());
116TEST(MathsatSmtSolver, Assumptions) {
130 ASSERT_NO_THROW(s.add(exprFormula));
131 ASSERT_NO_THROW(result = s.check());
133 ASSERT_NO_THROW(s.add(exprFormula2));
134 ASSERT_NO_THROW(result = s.check());
136 ASSERT_NO_THROW(result = s.checkWithAssumptions({f2}));
138 ASSERT_NO_THROW(result = s.check());
140 ASSERT_NO_THROW(result = s.checkWithAssumptions({!f2}));
144TEST(MathsatSmtSolver, GenerateModel) {
159 std::shared_ptr<storm::solver::SmtSolver::ModelReference> model = s.getModel();
160 int_fast64_t aEval = model->getIntegerValue(a);
161 int_fast64_t bEval = model->getIntegerValue(b);
162 int_fast64_t cEval = model->getIntegerValue(c);
163 ASSERT_TRUE(cEval == aEval + bEval - 1);
166TEST(MathsatSmtSolver, AllSat) {
184 std::vector<storm::expressions::SimpleValuation> valuations = s.allSat({x, y});
186 ASSERT_TRUE(valuations.size() == 3);
187 for (uint64_t i = 0;
i < valuations.size(); ++
i) {
188 ASSERT_FALSE(valuations[i].getBooleanValue(x) && valuations[i].getBooleanValue(y));
190 for (uint64_t j = i + 1; j < valuations.size(); ++j) {
191 ASSERT_TRUE((valuations[i].getBooleanValue(x) != valuations[j].getBooleanValue(x)) ||
192 (valuations[i].getBooleanValue(y) != valuations[j].getBooleanValue(y)));
197TEST(MathsatSmtSolver, UnsatAssumptions) {
213 result = s.checkWithAssumptions({f2});
215 std::vector<storm::expressions::Expression> unsatCore = s.getUnsatAssumptions();
216 ASSERT_EQ(1ull, unsatCore.size());
217 ASSERT_TRUE(unsatCore[0].isVariable());
218 ASSERT_STREQ(
"f2", unsatCore[0].getIdentifier().c_str());
221TEST(MathsatSmtSolver, InterpolationTest) {
234 s.setInterpolationGroup(0);
236 s.setInterpolationGroup(1);
238 s.setInterpolationGroup(2);
241 ASSERT_NO_THROW(result = s.check());
245 ASSERT_NO_THROW(interpol = s.getInterpolant({0, 1}));
250 ASSERT_NO_THROW(result = s2.check());
253 ASSERT_NO_THROW(s2.reset());
254 ASSERT_NO_THROW(s2.add(interpol && exprFormula3));
255 ASSERT_NO_THROW(result = s2.check());
This class is responsible for managing a set of typed variables and all expressions using these varia...
A class that captures options that may be passed to the Mathsat solver.
CheckResult
possible check results
Expression iff(Expression const &first, Expression const &second)
Expression implies(Expression const &first, Expression const &second)
SettingsManager const & manager()
Retrieves the settings manager.