1#include "storm-config.h"
7TEST(Z3SmtSolver, CheckSat) {
18 ASSERT_NO_THROW(s.add(exprDeMorgan));
19 ASSERT_NO_THROW(result = s.check());
21 ASSERT_NO_THROW(s.reset());
29 ASSERT_NO_THROW(s.add(exprFormula));
30 ASSERT_NO_THROW(result = s.check());
32 ASSERT_NO_THROW(s.reset());
35TEST(Z3SmtSolver, CheckUnsat) {
46 ASSERT_NO_THROW(s.add(!exprDeMorgan));
47 ASSERT_NO_THROW(result = s.check());
49 ASSERT_NO_THROW(s.reset());
58 ASSERT_NO_THROW(s.add(exprFormula));
59 ASSERT_NO_THROW(result = s.check());
63TEST(Z3SmtSolver, Backtracking) {
73 ASSERT_NO_THROW(s.add(expr1));
74 ASSERT_NO_THROW(result = s.check());
76 ASSERT_NO_THROW(s.push());
77 ASSERT_NO_THROW(s.add(expr2));
78 ASSERT_NO_THROW(result = s.check());
80 ASSERT_NO_THROW(s.pop());
81 ASSERT_NO_THROW(result = s.check());
83 ASSERT_NO_THROW(s.push());
84 ASSERT_NO_THROW(s.add(expr2));
85 ASSERT_NO_THROW(result = s.check());
87 ASSERT_NO_THROW(s.push());
88 ASSERT_NO_THROW(s.add(expr3));
89 ASSERT_NO_THROW(result = s.check());
91 ASSERT_NO_THROW(s.pop(2));
92 ASSERT_NO_THROW(result = s.check());
94 ASSERT_NO_THROW(s.reset());
103 ASSERT_NO_THROW(s.add(exprFormula));
104 ASSERT_NO_THROW(result = s.check());
106 ASSERT_NO_THROW(s.push());
107 ASSERT_NO_THROW(s.add(exprFormula2));
108 ASSERT_NO_THROW(result = s.check());
110 ASSERT_NO_THROW(s.pop());
111 ASSERT_NO_THROW(result = s.check());
115TEST(Z3SmtSolver, Assumptions) {
129 ASSERT_NO_THROW(s.add(exprFormula));
130 ASSERT_NO_THROW(result = s.check());
132 ASSERT_NO_THROW(s.add(exprFormula2));
133 ASSERT_NO_THROW(result = s.check());
135 ASSERT_NO_THROW(result = s.checkWithAssumptions({f2}));
137 ASSERT_NO_THROW(result = s.check());
139 ASSERT_NO_THROW(result = s.checkWithAssumptions({!f2}));
143TEST(Z3SmtSolver, GenerateModel) {
158 std::shared_ptr<storm::solver::SmtSolver::ModelReference> model = s.getModel();
159 int_fast64_t aEval = model->getIntegerValue(a);
160 int_fast64_t bEval = model->getIntegerValue(b);
161 int_fast64_t cEval = model->getIntegerValue(c);
162 ASSERT_TRUE(cEval == aEval + bEval - 1);
165TEST(Z3SmtSolver, AllSat) {
183 std::vector<storm::expressions::SimpleValuation> valuations = s.allSat({x, y});
185 ASSERT_TRUE(valuations.size() == 3);
186 for (uint64_t i = 0;
i < valuations.size(); ++
i) {
187 ASSERT_FALSE(valuations[i].getBooleanValue(x) && valuations[i].getBooleanValue(y));
189 for (uint64_t j = i + 1; j < valuations.size(); ++j) {
190 ASSERT_TRUE((valuations[i].getBooleanValue(x) != valuations[j].getBooleanValue(x)) ||
191 (valuations[i].getBooleanValue(y) != valuations[j].getBooleanValue(y)));
196TEST(Z3SmtSolver, UnsatAssumptions) {
212 result = s.checkWithAssumptions({f2});
214 std::vector<storm::expressions::Expression> unsatCore = s.getUnsatAssumptions();
215 ASSERT_EQ(1ull, unsatCore.size());
216 ASSERT_TRUE(unsatCore[0].isVariable());
217 ASSERT_STREQ(
"f2", unsatCore[0].getIdentifier().c_str());
This class is responsible for managing a set of typed variables and all expressions using these varia...
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.