9TEST(BEDistributionTest, ConstantFail) {
10 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_fail.dft");
11 double timebound = 0.8;
14 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
15 double resultBDD = checker->getProbabilityAtTimebound(timebound);
16 EXPECT_NEAR(resultBDD, 0.3296799540, 1e-10);
19 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
21 std::string
property =
"Pmax=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
23 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
24 EXPECT_NEAR(resultBDD, resultMC, 1e-10);
27TEST(BEDistributionTest, ConstantNonFail) {
28 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_constant.dft");
29 double timebound = 0.8;
32 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
33 double resultBDD = checker->getProbabilityAtTimebound(timebound);
34 EXPECT_NEAR(resultBDD, 0.9592377960, 1e-10);
37 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
39 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
41 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
42 EXPECT_NEAR(resultBDD, resultMC, 1e-10);
45TEST(BEDistributionTest, ConstantNonFail2) {
46 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_nonfail2.dft");
47 double timebound = 0.8;
50 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
51 double resultBDD = checker->getProbabilityAtTimebound(timebound);
52 EXPECT_EQ(resultBDD, 0);
55 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
57 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
59 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
60 EXPECT_EQ(resultBDD, resultMC);
63TEST(BEDistributionTest, Probability) {
64 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_probabilistic.dft");
65 double timebound = 0.8;
68 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
69 double resultBDD = checker->getProbabilityAtTimebound(timebound);
70 EXPECT_NEAR(resultBDD, 0.1095403852, 1e-10);
73 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
75 std::string
property =
"Pmax=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
77 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
78 EXPECT_NEAR(resultBDD, resultMC, 1e-10);
81TEST(BEDistributionTest, Exponential) {
82 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/and.dft");
83 double timebound = 0.8;
86 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
87 double resultBDD = checker->getProbabilityAtTimebound(timebound);
88 EXPECT_NEAR(resultBDD, 0.108688872, 1e-10);
91 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
93 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
95 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
96 EXPECT_NEAR(resultBDD, resultMC, 1e-10);
99TEST(BEDistributionTest, Erlang) {
100 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_erlang.dft");
101 double timebound = 0.8;
104 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
105 double resultBDD = checker->getProbabilityAtTimebound(timebound);
106 EXPECT_NEAR(resultBDD, 0.4949009834, 1e-10);
109 auto dft2 = storm::dft::api::prepareForMarkovAnalysis<double>(*dft);
111 std::string
property =
"P=? [F<=" + std::to_string(timebound) +
" \"failed\"]";
113 double resultMC = boost::get<double>(storm::dft::api::analyzeDFT<double>(*dft2, properties)[0]);
114 EXPECT_NEAR(resultBDD, resultMC, 1e-10);
117TEST(BEDistributionTest, Weibull) {
118 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_weibull.dft");
119 double timebound = 2;
122 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
123 double resultBDD = checker->getProbabilityAtTimebound(timebound);
124 EXPECT_NEAR(resultBDD, 0.0382982486, 1e-10);
127TEST(BEDistributionTest, LogNormal) {
128 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR
"/dft/be_lognormal.dft");
129 double timebound = 0.8;
132 auto checker = std::make_shared<storm::dft::modelchecker::SFTBDDChecker>(dft);
133 double resultBDD = checker->getProbabilityAtTimebound(timebound);
134 EXPECT_NEAR(resultBDD, 0.2336675428, 1e-10);
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::pair< bool, std::string > isWellFormed(storm::dft::storage::DFT< ValueType > const &dft, bool validForMarkovianAnalysis=true)
Check whether the DFT is well-formed.