10TEST(NonMarkovianChainTransformerTest, StreamExampleTest) {
12 GTEST_SKIP() <<
"Z3 not available.";
16 std::string formulasString =
"Pmin=? [ F \"done\"];Pmin=? [ F<=1 \"done\"];Tmin=? [ F \"done\" ]";
18 auto model = storm::api::buildSparseModel<double>(program, formulas)->template as<storm::models::sparse::MarkovAutomaton<double>>();
20 EXPECT_EQ(12ul, model->getNumberOfStates());
21 EXPECT_EQ(14ul, model->getNumberOfTransitions());
25 auto labeling = model->getStateLabeling();
26 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
27 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 10));
30 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
32 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
34 EXPECT_NEAR(0.7888888889, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
38 ASSERT_EQ(9ul, transformed.first->getNumberOfStates());
39 ASSERT_EQ(11ul, transformed.first->getNumberOfTransitions());
40 labeling = transformed.first->getStateLabeling();
41 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
42 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 8));
43 EXPECT_EQ(2ul, transformed.second.size());
46 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
48 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
54 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
55 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
56 labeling = transformed.first->getStateLabeling();
57 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
58 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 7));
59 EXPECT_EQ(2ul, transformed.second.size());
62 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
64 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
70 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
71 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
72 labeling = transformed.first->getStateLabeling();
73 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
74 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 7));
75 EXPECT_EQ(2ul, transformed.second.size());
78 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
80 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
85TEST(NonMarkovianChainTransformerTest, ChainElimination1ExampleTest) {
87 ->template as<storm::models::sparse::MarkovAutomaton<double>>();
88 std::string formulasString =
"Pmin=? [ F \"Fail\"];Pmin=? [ F<=300 \"Fail\"];Tmin=? [ F \"Fail\" ]";
91 EXPECT_EQ(43ul, model->getNumberOfStates());
92 EXPECT_EQ(59ul, model->getNumberOfTransitions());
96 auto labeling = model->getStateLabeling();
97 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
98 for (
size_t i = 10; i < 43; ++i) {
99 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
103 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
105 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
107 EXPECT_NEAR(3333.333333, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
111 ASSERT_EQ(13ul, transformed.first->getNumberOfStates());
112 ASSERT_EQ(29ul, transformed.first->getNumberOfTransitions());
113 labeling = transformed.first->getStateLabeling();
114 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
115 for (
size_t i = 5; i < 13; ++i) {
116 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
118 EXPECT_EQ(2ul, transformed.second.size());
121 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
123 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
129 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
130 ASSERT_EQ(24ul, transformed.first->getNumberOfTransitions());
131 labeling = transformed.first->getStateLabeling();
132 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
133 for (
size_t i = 0; i < 8; ++i) {
134 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
136 EXPECT_EQ(2ul, transformed.second.size());
139 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
141 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
147 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
148 ASSERT_EQ(24ul, transformed.first->getNumberOfTransitions());
149 labeling = transformed.first->getStateLabeling();
150 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
151 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 0));
152 for (
size_t i = 1; i < 8; ++i) {
153 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
155 EXPECT_EQ(2ul, transformed.second.size());
158 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
160 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
165TEST(NonMarkovianChainTransformerTest, ChainElimination2ExampleTest) {
167 ->template as<storm::models::sparse::MarkovAutomaton<double>>();
168 std::string formulasString =
"Pmin=? [ F \"Fail\"];Pmin=? [ F<=300 \"Fail\"];Tmin=? [ F \"Fail\" ]";
171 EXPECT_EQ(10ul, model->getNumberOfStates());
172 EXPECT_EQ(14ul, model->getNumberOfTransitions());
174 size_t initState = 0;
176 auto labeling = model->getStateLabeling();
177 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
178 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
179 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 7));
180 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 8));
181 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 9));
184 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
186 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
188 EXPECT_NEAR(190, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
192 ASSERT_EQ(7ul, transformed.first->getNumberOfStates());
193 ASSERT_EQ(11ul, transformed.first->getNumberOfTransitions());
194 labeling = transformed.first->getStateLabeling();
195 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
196 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 2));
197 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 5));
198 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 6));
199 EXPECT_EQ(2ul, transformed.second.size());
202 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
204 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
210 ASSERT_EQ(5ul, transformed.first->getNumberOfStates());
211 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
212 labeling = transformed.first->getStateLabeling();
213 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
214 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 1));
215 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 2));
216 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 3));
217 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
218 EXPECT_EQ(2ul, transformed.second.size());
221 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
223 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
229 ASSERT_EQ(5ul, transformed.first->getNumberOfStates());
230 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
231 labeling = transformed.first->getStateLabeling();
232 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
233 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 1));
234 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 2));
235 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 3));
236 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
237 EXPECT_EQ(2ul, transformed.second.size());
240 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
242 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);