@ -1,8 +1,3 @@
//
// Created by Jip Spel on 19.09.18.
//
// TODO: cleanup includes
# include "gtest/gtest.h"
# include "storm-config.h"
# include "test/storm_gtest.h"
@ -21,12 +16,16 @@
# include "storm-pars/analysis/Lattice.h"
# include "storm/storage/expressions/BinaryRelationExpression.h"
# include "storm-pars/transformer/SparseParametricDtmcSimplifier.h"
# include "storm-pars/storage/ParameterRegion.h"
# include "storm-pars/api/storm-pars.h"
# include "storm/api/storm.h"
# include "storm-parsers/api/storm-parsers.h"
# include "storm-pars/api/region.h"
TEST ( AssumptionCheckerTest , Brp_no_bisimulation ) {
std : : string programFile = STORM_TEST_RESOURCES_DIR " /pdtmc/brp16_2.pm " ;
std : : string formulaAsString = " P=? [F s=4 & i=N ] " ;
@ -47,7 +46,13 @@ TEST(AssumptionCheckerTest, Brp_no_bisimulation) {
ASSERT_EQ ( dtmc - > getNumberOfStates ( ) , 193ull ) ;
ASSERT_EQ ( dtmc - > getNumberOfTransitions ( ) , 383ull ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , 3 ) ;
// Create the region
storm : : storage : : ParameterRegion < storm : : RationalFunction > : : Valuation lowerBoundaries ;
storm : : storage : : ParameterRegion < storm : : RationalFunction > : : Valuation upperBoundaries ;
auto vars = storm : : models : : sparse : : getProbabilityParameters ( * dtmc ) ;
auto region = storm : : api : : parseRegion < storm : : RationalFunction > ( " 0.00001 <= pK <= 0.00001, 0.00001 <= pL <= 0.99999 " , vars ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , region , 3 ) ;
// Check on samples
auto expressionManager = std : : make_shared < storm : : expressions : : ExpressionManager > ( storm : : expressions : : ExpressionManager ( ) ) ;
@ -126,7 +131,11 @@ TEST(AssumptionCheckerTest, Simple1) {
ASSERT_EQ ( dtmc - > getNumberOfStates ( ) , 5 ) ;
ASSERT_EQ ( dtmc - > getNumberOfTransitions ( ) , 8 ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , 3 ) ;
// Create the region
auto vars = storm : : models : : sparse : : getProbabilityParameters ( * dtmc ) ;
auto region = storm : : api : : parseRegion < storm : : RationalFunction > ( " 0.00001 <= p <= 0.99999 " , vars ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , region , 3 ) ;
auto expressionManager = std : : make_shared < storm : : expressions : : ExpressionManager > ( storm : : expressions : : ExpressionManager ( ) ) ;
expressionManager - > declareRationalVariable ( " 1 " ) ;
@ -174,7 +183,11 @@ TEST(AssumptionCheckerTest, Simple2) {
ASSERT_EQ ( dtmc - > getNumberOfStates ( ) , 5 ) ;
ASSERT_EQ ( dtmc - > getNumberOfTransitions ( ) , 8 ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , 3 ) ;
// Create the region
auto vars = storm : : models : : sparse : : getProbabilityParameters ( * dtmc ) ;
auto region = storm : : api : : parseRegion < storm : : RationalFunction > ( " 0.00001 <= p <= 0.99999 " , vars ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , region , 3 ) ;
auto expressionManager = std : : make_shared < storm : : expressions : : ExpressionManager > ( storm : : expressions : : ExpressionManager ( ) ) ;
expressionManager - > declareRationalVariable ( " 1 " ) ;
@ -234,7 +247,11 @@ TEST(AssumptionCheckerTest, Simple3) {
ASSERT_EQ ( 6 , dtmc - > getNumberOfStates ( ) ) ;
ASSERT_EQ ( 12 , dtmc - > getNumberOfTransitions ( ) ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , 3 ) ;
// Create the region
auto vars = storm : : models : : sparse : : getProbabilityParameters ( * dtmc ) ;
auto region = storm : : api : : parseRegion < storm : : RationalFunction > ( " 0.00001 <= p <= 0.99999 " , vars ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , region , 3 ) ;
auto expressionManager = std : : make_shared < storm : : expressions : : ExpressionManager > ( storm : : expressions : : ExpressionManager ( ) ) ;
expressionManager - > declareRationalVariable ( " 1 " ) ;
@ -278,4 +295,70 @@ TEST(AssumptionCheckerTest, Simple3) {
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . validateAssumptionSMTSolver ( assumption , lattice ) ) ;
}
TEST ( AssumptionCheckerTest , Simple4 ) {
std : : string programFile = STORM_TEST_RESOURCES_DIR " /pdtmc/simple4.pm " ;
std : : string formulaAsString = " P=? [F s=3] " ;
std : : string constantsAsString = " " ; //e.g. pL=0.9,TOACK=0.5
// Program and formula
storm : : prism : : Program program = storm : : api : : parseProgram ( programFile ) ;
program = storm : : utility : : prism : : preprocess ( program , constantsAsString ) ;
std : : vector < std : : shared_ptr < const storm : : logic : : Formula > > formulas = storm : : api : : extractFormulasFromProperties ( storm : : api : : parsePropertiesForPrismProgram ( formulaAsString , program ) ) ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > model = storm : : api : : buildSparseModel < storm : : RationalFunction > ( program , formulas ) - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
std : : shared_ptr < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > dtmc = model - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
auto simplifier = storm : : transformer : : SparseParametricDtmcSimplifier < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( * dtmc ) ;
ASSERT_TRUE ( simplifier . simplify ( * ( formulas [ 0 ] ) ) ) ;
model = simplifier . getSimplifiedModel ( ) ;
dtmc = model - > as < storm : : models : : sparse : : Dtmc < storm : : RationalFunction > > ( ) ;
ASSERT_EQ ( dtmc - > getNumberOfStates ( ) , 5 ) ;
ASSERT_EQ ( dtmc - > getNumberOfTransitions ( ) , 8 ) ;
// Create the region
auto vars = storm : : models : : sparse : : getProbabilityParameters ( * dtmc ) ;
auto region = storm : : api : : parseRegion < storm : : RationalFunction > ( " 0.00001 <= p <= 0.4 " , vars ) ;
auto checker = storm : : analysis : : AssumptionChecker < storm : : RationalFunction > ( formulas [ 0 ] , dtmc , region , 3 ) ;
auto expressionManager = std : : make_shared < storm : : expressions : : ExpressionManager > ( storm : : expressions : : ExpressionManager ( ) ) ;
expressionManager - > declareRationalVariable ( " 1 " ) ;
expressionManager - > declareRationalVariable ( " 2 " ) ;
// Lattice
storm : : storage : : BitVector above ( 5 ) ;
above . set ( 3 ) ;
storm : : storage : : BitVector below ( 5 ) ;
below . set ( 4 ) ;
storm : : storage : : BitVector initialMiddle ( 5 ) ;
auto lattice = new storm : : analysis : : Lattice ( & above , & below , & initialMiddle , 5 ) ;
auto assumption = std : : make_shared < storm : : expressions : : BinaryRelationExpression > (
storm : : expressions : : BinaryRelationExpression ( * expressionManager , expressionManager - > getBooleanType ( ) ,
expressionManager - > getVariable ( " 1 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
expressionManager - > getVariable ( " 2 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
storm : : expressions : : BinaryRelationExpression : : RelationType : : Greater ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . checkOnSamples ( assumption ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . validateAssumption ( assumption , lattice ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . validateAssumptionSMTSolver ( assumption , lattice ) ) ;
assumption = std : : make_shared < storm : : expressions : : BinaryRelationExpression > (
storm : : expressions : : BinaryRelationExpression ( * expressionManager , expressionManager - > getBooleanType ( ) ,
expressionManager - > getVariable ( " 2 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
expressionManager - > getVariable ( " 1 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
storm : : expressions : : BinaryRelationExpression : : RelationType : : Greater ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : UNKNOWN , checker . checkOnSamples ( assumption ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : VALID , checker . validateAssumption ( assumption , lattice ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : VALID , checker . validateAssumptionSMTSolver ( assumption , lattice ) ) ;
assumption = std : : make_shared < storm : : expressions : : BinaryRelationExpression > (
storm : : expressions : : BinaryRelationExpression ( * expressionManager , expressionManager - > getBooleanType ( ) ,
expressionManager - > getVariable ( " 1 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
expressionManager - > getVariable ( " 2 " ) . getExpression ( ) . getBaseExpressionPointer ( ) ,
storm : : expressions : : BinaryRelationExpression : : RelationType : : Equal ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . checkOnSamples ( assumption ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . validateAssumption ( assumption , lattice ) ) ;
EXPECT_EQ ( storm : : analysis : : AssumptionStatus : : INVALID , checker . validateAssumptionSMTSolver ( assumption , lattice ) ) ;
}