5 changed files with 118 additions and 7 deletions
			
			
		- 
					31src/adapters/MathSatExpressionAdapter.h
 - 
					15src/exceptions/UnexpectedException.h
 - 
					7src/solver/MathSatSmtSolver.cpp
 - 
					58test/functional/solver/MathSatSmtSolverTest.cpp
 - 
					14test/functional/solver/Z3SmtSolverTest.cpp
 
@ -0,0 +1,15 @@ | 
				
			|||
#ifndef STORM_EXCEPTIONS_UNEXPECTEDEXCEPTION_H_ | 
				
			|||
#define STORM_EXCEPTIONS_UNEXPECTEDEXCEPTION_H_ | 
				
			|||
 | 
				
			|||
#include "src/exceptions/BaseException.h" | 
				
			|||
#include "src/exceptions/ExceptionMacros.h" | 
				
			|||
 | 
				
			|||
namespace storm { | 
				
			|||
    namespace exceptions { | 
				
			|||
         | 
				
			|||
        STORM_NEW_EXCEPTION(UnexpectedException) | 
				
			|||
         | 
				
			|||
    } // namespace exceptions | 
				
			|||
} // namespace storm | 
				
			|||
 | 
				
			|||
#endif /* STORM_EXCEPTIONS_UNEXPECTEDEXCEPTION_H_ */ | 
				
			|||
@ -0,0 +1,58 @@ | 
				
			|||
#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
 | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue