diff --git a/src/storm.cpp b/src/storm.cpp index f2b34cdbd..42de54751 100644 --- a/src/storm.cpp +++ b/src/storm.cpp @@ -138,21 +138,36 @@ void cleanUp() { } void testCheckingDie(storm::models::Dtmc& dtmc) { + storm::modelChecker::GmmxxDtmcPrctlModelChecker* mc = new storm::modelChecker::GmmxxDtmcPrctlModelChecker(dtmc); + storm::formula::Ap* oneFormula = new storm::formula::Ap("one"); storm::formula::Eventually* eventuallyFormula = new storm::formula::Eventually(oneFormula); storm::formula::ProbabilisticNoBoundOperator* probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula); + mc->check(*probFormula); + delete probFormula; + + oneFormula = new storm::formula::Ap("two"); + eventuallyFormula = new storm::formula::Eventually(oneFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula); + + mc->check(*probFormula); + delete probFormula; + + oneFormula = new storm::formula::Ap("three"); + eventuallyFormula = new storm::formula::Eventually(oneFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula); + + mc->check(*probFormula); + delete probFormula; + storm::formula::Ap* done = new storm::formula::Ap("done"); storm::formula::ReachabilityReward* reachabilityRewardFormula = new storm::formula::ReachabilityReward(done); storm::formula::RewardNoBoundOperator* rewardFormula = new storm::formula::RewardNoBoundOperator(reachabilityRewardFormula); - storm::modelChecker::GmmxxDtmcPrctlModelChecker* mc = new storm::modelChecker::GmmxxDtmcPrctlModelChecker(dtmc); - mc->check(*probFormula); mc->check(*rewardFormula); - - delete mc; - delete probFormula; delete rewardFormula; + delete mc; } void testCheckingCrowds(storm::models::Dtmc& dtmc) { @@ -191,13 +206,10 @@ void testCheckingSynchronousLeader(storm::models::Dtmc& dtmc, uint_fast6 delete probFormula; electedFormula = new storm::formula::Ap("elected"); - storm::formula::BoundedUntil* boundedUntilFormula = new storm::formula::BoundedUntil(new storm::formula::Ap("true"), electedFormula, 1); + storm::formula::BoundedUntil* boundedUntilFormula = new storm::formula::BoundedUntil(new storm::formula::Ap("true"), electedFormula, n * 4); probFormula = new storm::formula::ProbabilisticNoBoundOperator(boundedUntilFormula); - for (uint_fast64_t L = 1; L < 5; ++L) { - boundedUntilFormula->setBound(L*(n + 1)); - mc->check(*probFormula); - } + mc->check(*probFormula); delete probFormula; electedFormula = new storm::formula::Ap("elected"); @@ -211,23 +223,92 @@ void testCheckingSynchronousLeader(storm::models::Dtmc& dtmc, uint_fast6 } void testCheckingDice(storm::models::Mdp& mdp) { - storm::formula::Ap* threeFormula = new storm::formula::Ap("three"); - storm::formula::Eventually* eventuallyFormula = new storm::formula::Eventually(threeFormula); - storm::formula::ProbabilisticNoBoundOperator* probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + storm::formula::Ap* twoFormula = new storm::formula::Ap("two"); + storm::formula::Eventually* eventuallyFormula = new storm::formula::Eventually(twoFormula); + storm::formula::ProbabilisticNoBoundOperator* probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, true); storm::modelChecker::GmmxxMdpPrctlModelChecker* mc = new storm::modelChecker::GmmxxMdpPrctlModelChecker(mdp); mc->check(*probFormula); delete probFormula; + twoFormula = new storm::formula::Ap("two"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("three"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, true); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("three"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("four"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, true); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("four"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("five"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, true); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("five"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("six"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, true); + + mc->check(*probFormula); + delete probFormula; + + twoFormula = new storm::formula::Ap("six"); + eventuallyFormula = new storm::formula::Eventually(twoFormula); + probFormula = new storm::formula::ProbabilisticNoBoundOperator(eventuallyFormula, false); + + mc->check(*probFormula); + delete probFormula; + storm::formula::Ap* doneFormula = new storm::formula::Ap("done"); - //storm::formula::ReachabilityReward* reachabilityRewardFormula = new storm::formula::ReachabilityReward(doneFormula); - storm::formula::InstantaneousReward* reachabilityRewardFormula = new storm::formula::InstantaneousReward(8); + storm::formula::ReachabilityReward* reachabilityRewardFormula = new storm::formula::ReachabilityReward(doneFormula); storm::formula::RewardNoBoundOperator* rewardFormula = new storm::formula::RewardNoBoundOperator(reachabilityRewardFormula, true); mc->check(*rewardFormula); delete rewardFormula; + doneFormula = new storm::formula::Ap("done"); + reachabilityRewardFormula = new storm::formula::ReachabilityReward(doneFormula); + rewardFormula = new storm::formula::RewardNoBoundOperator(reachabilityRewardFormula, false); + + mc->check(*rewardFormula); + delete rewardFormula; + delete mc; } @@ -249,19 +330,33 @@ void testCheckingAsynchLeader(storm::models::Mdp& mdp) { delete probMaxFormula; electedFormula = new storm::formula::Ap("elected"); - storm::formula::BoundedEventually* boundedEventuallyFormula = new storm::formula::BoundedEventually(electedFormula, 50); + storm::formula::BoundedEventually* boundedEventuallyFormula = new storm::formula::BoundedEventually(electedFormula, 25); probMinFormula = new storm::formula::ProbabilisticNoBoundOperator(boundedEventuallyFormula, true); mc->check(*probMinFormula); delete probMinFormula; electedFormula = new storm::formula::Ap("elected"); - boundedEventuallyFormula = new storm::formula::BoundedEventually(electedFormula, 50); + boundedEventuallyFormula = new storm::formula::BoundedEventually(electedFormula, 25); probMaxFormula = new storm::formula::ProbabilisticNoBoundOperator(boundedEventuallyFormula, false); mc->check(*probMaxFormula); delete probMaxFormula; + electedFormula = new storm::formula::Ap("elected"); + storm::formula::ReachabilityReward* reachabilityRewardFormula = new storm::formula::ReachabilityReward(electedFormula); + storm::formula::RewardNoBoundOperator* rewardFormula = new storm::formula::RewardNoBoundOperator(reachabilityRewardFormula, true); + + mc->check(*rewardFormula); + delete rewardFormula; + + electedFormula = new storm::formula::Ap("elected"); + reachabilityRewardFormula = new storm::formula::ReachabilityReward(electedFormula); + rewardFormula = new storm::formula::RewardNoBoundOperator(reachabilityRewardFormula, false); + + mc->check(*rewardFormula); + delete rewardFormula; + delete mc; } @@ -278,7 +373,7 @@ void testChecking() { // testCheckingDie(*dtmc); // testCheckingCrowds(*dtmc); - // testCheckingSynchronousLeader(*dtmc, 4); + // testCheckingSynchronousLeader(*dtmc, 6); } else if (parser.getType() == storm::models::MDP) { std::shared_ptr> mdp = parser.getModel>(); mdp->printModelInformationToStream(std::cout);