1#include "storm-config.h"
14TEST(BEDistributionTest, ConstantFail) {
16 double timebound = 0.8;
18#ifdef STORM_HAVE_SYLVAN
21 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
22 double resultBDD = checker->getProbabilityAtTimebound(timebound);
23 EXPECT_NEAR(resultBDD, 0.3296799540, 1e-10);
29 std::string
property =
"Pmax=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
32 EXPECT_NEAR(resultMC, 0.3296799540, 1e-10);
35TEST(BEDistributionTest, ConstantNonFail) {
37 double timebound = 0.8;
39#ifdef STORM_HAVE_SYLVAN
42 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
43 double resultBDD = checker->getProbabilityAtTimebound(timebound);
44 EXPECT_NEAR(resultBDD, 0.9592377960, 1e-10);
50 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
53 EXPECT_NEAR(resultMC, 0.9592377960, 1e-10);
56TEST(BEDistributionTest, ConstantNonFail2) {
58 double timebound = 0.8;
60#ifdef STORM_HAVE_SYLVAN
63 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
64 double resultBDD = checker->getProbabilityAtTimebound(timebound);
65 EXPECT_EQ(resultBDD, 0);
71 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
74 EXPECT_EQ(resultMC, 0);
77TEST(BEDistributionTest, Probability) {
79 double timebound = 0.8;
81#ifdef STORM_HAVE_SYLVAN
84 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
85 double resultBDD = checker->getProbabilityAtTimebound(timebound);
86 EXPECT_NEAR(resultBDD, 0.1095403852, 1e-10);
92 std::string
property =
"Pmax=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
95 EXPECT_NEAR(resultMC, 0.1095403852, 1e-10);
98TEST(BEDistributionTest, Exponential) {
100 double timebound = 0.8;
102#ifdef STORM_HAVE_SYLVAN
105 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
106 double resultBDD = checker->getProbabilityAtTimebound(timebound);
107 EXPECT_NEAR(resultBDD, 0.108688872, 1e-10);
113 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
116 EXPECT_NEAR(resultMC, 0.108688872, 1e-10);
119TEST(BEDistributionTest, Erlang) {
121 double timebound = 0.8;
123#ifdef STORM_HAVE_SYLVAN
126 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
127 double resultBDD = checker->getProbabilityAtTimebound(timebound);
128 EXPECT_NEAR(resultBDD, 0.4949009834, 1e-10);
134 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
137 EXPECT_NEAR(resultMC, 0.4949009834, 1e-10);
140TEST(BEDistributionTest, Weibull) {
141#ifdef STORM_HAVE_SYLVAN
143 double timebound = 2;
147 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
148 double resultBDD = checker->getProbabilityAtTimebound(timebound);
149 EXPECT_NEAR(resultBDD, 0.0382982486, 1e-10);
151 GTEST_SKIP() <<
"Library Sylvan not available.";
155TEST(BEDistributionTest, LogNormal) {
156#ifdef STORM_HAVE_SYLVAN
158 double timebound = 0.8;
162 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft, std::make_shared<storm::dft::storage::SylvanBddManager>(env));
163 double resultBDD = checker->getProbabilityAtTimebound(timebound);
164 EXPECT_NEAR(resultBDD, 0.2336675428, 1e-10);
166 GTEST_SKIP() <<
"Library Sylvan not available.";
std::vector< storm::jani::Property > parseProperties(storm::parser::FormulaParser &formulaParser, std::string const &inputString, boost::optional< std::set< std::string > > const &propertyFilter)
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
std::shared_ptr< storm::dft::storage::DFT< ValueType > > prepareForMarkovAnalysis(storm::dft::storage::DFT< ValueType > const &dft)
Apply transformations to make DFT feasible for Markovian analysis.
std::shared_ptr< storm::dft::storage::DFT< ValueType > > loadDFTGalileoFile(std::string const &file)
Load DFT from Galileo file.
std::pair< bool, std::string > isWellFormed(storm::dft::storage::DFT< ValueType > const &dft, bool validForMarkovianAnalysis)
Check whether the DFT is well-formed.
storm::dft::modelchecker::DFTModelChecker< ValueType >::dft_results analyzeDFT(storm::dft::storage::DFT< ValueType > const &dft, std::vector< std::shared_ptr< storm::logic::Formula const > > const &properties, bool symred, bool allowModularisation, storm::dft::utility::RelevantEvents const &relevantEvents, bool allowDCForRelevant, double approximationError, storm::dft::builder::ApproximationHeuristic approximationHeuristic, bool eliminateChains, storm::transformer::EliminationLabelBehavior labelBehavior, bool printOutput)
Compute the exact or approximate analysis result of the given DFT according to the given properties.