You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
3.0 KiB
58 lines
3.0 KiB
#include "gtest/gtest.h"
|
|
#include "storm-config.h"
|
|
|
|
#ifdef STORM_HAVE_MSAT
|
|
#include "src/solver/MathSatSmtSolver.h"
|
|
|
|
TEST(MathSatSmtSolver, CheckSat) {
|
|
storm::solver::MathSatSmtSolver s;
|
|
storm::solver::SmtSolver::CheckResult result = storm::solver::SmtSolver::CheckResult::UNKNOWN;
|
|
|
|
storm::expressions::Expression exprDeMorgan = !(storm::expressions::Expression::createBooleanVariable("x") && storm::expressions::Expression::createBooleanVariable("y")).iff((!storm::expressions::Expression::createBooleanVariable("x") || !storm::expressions::Expression::createBooleanVariable("y")));
|
|
|
|
ASSERT_NO_THROW(s.assertExpression(exprDeMorgan));
|
|
ASSERT_NO_THROW(result = s.check());
|
|
ASSERT_TRUE(result == storm::solver::SmtSolver::CheckResult::SAT);
|
|
ASSERT_NO_THROW(s.reset());
|
|
|
|
storm::expressions::Expression a = storm::expressions::Expression::createIntegerVariable("a");
|
|
storm::expressions::Expression b = storm::expressions::Expression::createIntegerVariable("b");
|
|
storm::expressions::Expression c = storm::expressions::Expression::createIntegerVariable("c");
|
|
storm::expressions::Expression exprFormula = a >= storm::expressions::Expression::createIntegerLiteral(0)
|
|
&& a < storm::expressions::Expression::createIntegerLiteral(5)
|
|
&& b > storm::expressions::Expression::createIntegerLiteral(7)
|
|
&& c == (a * b)
|
|
&& b + a > c;
|
|
|
|
ASSERT_NO_THROW(s.assertExpression(exprFormula));
|
|
ASSERT_NO_THROW(result = s.check());
|
|
ASSERT_TRUE(result == storm::solver::SmtSolver::CheckResult::SAT);
|
|
ASSERT_NO_THROW(s.reset());
|
|
}
|
|
|
|
TEST(MathSatSmtSolver, CheckUnsat) {
|
|
storm::solver::MathSatSmtSolver s;
|
|
storm::solver::SmtSolver::CheckResult result = storm::solver::SmtSolver::CheckResult::UNKNOWN;
|
|
|
|
storm::expressions::Expression exprDeMorgan = !(storm::expressions::Expression::createBooleanVariable("x") && storm::expressions::Expression::createBooleanVariable("y")).iff( (!storm::expressions::Expression::createBooleanVariable("x") || !storm::expressions::Expression::createBooleanVariable("y")));
|
|
|
|
ASSERT_NO_THROW(s.assertExpression(!exprDeMorgan));
|
|
ASSERT_NO_THROW(result = s.check());
|
|
ASSERT_TRUE(result == storm::solver::SmtSolver::CheckResult::UNSAT);
|
|
ASSERT_NO_THROW(s.reset());
|
|
|
|
storm::expressions::Expression a = storm::expressions::Expression::createIntegerVariable("a");
|
|
storm::expressions::Expression b = storm::expressions::Expression::createIntegerVariable("b");
|
|
storm::expressions::Expression c = storm::expressions::Expression::createIntegerVariable("c");
|
|
storm::expressions::Expression exprFormula = a >= storm::expressions::Expression::createIntegerLiteral(2)
|
|
&& a < storm::expressions::Expression::createIntegerLiteral(5)
|
|
&& b > storm::expressions::Expression::createIntegerLiteral(7)
|
|
&& c == (a + b + storm::expressions::Expression::createIntegerLiteral(1))
|
|
&& b + a > c;
|
|
|
|
ASSERT_NO_THROW(s.assertExpression(exprFormula));
|
|
ASSERT_NO_THROW(result = s.check());
|
|
ASSERT_TRUE(result == storm::solver::SmtSolver::CheckResult::UNSAT);
|
|
}
|
|
|
|
#endif
|