9TEST(NonMarkovianChainTransformerTest, StreamExampleTest) {
11 GTEST_SKIP() <<
"Z3 not available.";
15 std::string formulasString =
"Pmin=? [ F \"done\"];Pmin=? [ F<=1 \"done\"];Tmin=? [ F \"done\" ]";
17 auto model = storm::api::buildSparseModel<double>(program, formulas)->template as<storm::models::sparse::MarkovAutomaton<double>>();
19 EXPECT_EQ(12ul, model->getNumberOfStates());
20 EXPECT_EQ(14ul, model->getNumberOfTransitions());
24 auto labeling = model->getStateLabeling();
25 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
26 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 10));
29 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
31 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
33 EXPECT_NEAR(0.7888888889, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
37 ASSERT_EQ(9ul, transformed.first->getNumberOfStates());
38 ASSERT_EQ(11ul, transformed.first->getNumberOfTransitions());
39 labeling = transformed.first->getStateLabeling();
40 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
41 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 8));
42 EXPECT_EQ(2ul, transformed.second.size());
45 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
47 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
53 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
54 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
55 labeling = transformed.first->getStateLabeling();
56 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
57 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 7));
58 EXPECT_EQ(2ul, transformed.second.size());
61 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
63 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
69 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
70 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
71 labeling = transformed.first->getStateLabeling();
72 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
73 ASSERT_TRUE(labeling.getStateHasLabel(
"done", 7));
74 EXPECT_EQ(2ul, transformed.second.size());
77 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
79 EXPECT_NEAR(0.6487584849, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
84TEST(NonMarkovianChainTransformerTest, ChainElimination1ExampleTest) {
86 ->template as<storm::models::sparse::MarkovAutomaton<double>>();
87 std::string formulasString =
"Pmin=? [ F \"Fail\"];Pmin=? [ F<=300 \"Fail\"];Tmin=? [ F \"Fail\" ]";
90 EXPECT_EQ(43ul, model->getNumberOfStates());
91 EXPECT_EQ(59ul, model->getNumberOfTransitions());
95 auto labeling = model->getStateLabeling();
96 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
97 for (
size_t i = 10; i < 43; ++i) {
98 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
102 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
104 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
106 EXPECT_NEAR(3333.333333, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
110 ASSERT_EQ(13ul, transformed.first->getNumberOfStates());
111 ASSERT_EQ(29ul, transformed.first->getNumberOfTransitions());
112 labeling = transformed.first->getStateLabeling();
113 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
114 for (
size_t i = 5; i < 13; ++i) {
115 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
117 EXPECT_EQ(2ul, transformed.second.size());
120 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
122 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
128 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
129 ASSERT_EQ(24ul, transformed.first->getNumberOfTransitions());
130 labeling = transformed.first->getStateLabeling();
131 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
132 for (
size_t i = 0; i < 8; ++i) {
133 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
135 EXPECT_EQ(2ul, transformed.second.size());
138 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
140 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
146 ASSERT_EQ(8ul, transformed.first->getNumberOfStates());
147 ASSERT_EQ(24ul, transformed.first->getNumberOfTransitions());
148 labeling = transformed.first->getStateLabeling();
149 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
150 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 0));
151 for (
size_t i = 1; i < 8; ++i) {
152 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", i));
154 EXPECT_EQ(2ul, transformed.second.size());
157 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
159 EXPECT_NEAR(0.08606881472, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
164TEST(NonMarkovianChainTransformerTest, ChainElimination2ExampleTest) {
166 ->template as<storm::models::sparse::MarkovAutomaton<double>>();
167 std::string formulasString =
"Pmin=? [ F \"Fail\"];Pmin=? [ F<=300 \"Fail\"];Tmin=? [ F \"Fail\" ]";
170 EXPECT_EQ(10ul, model->getNumberOfStates());
171 EXPECT_EQ(14ul, model->getNumberOfTransitions());
173 size_t initState = 0;
175 auto labeling = model->getStateLabeling();
176 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
177 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
178 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 7));
179 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 8));
180 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 9));
183 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
185 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
187 EXPECT_NEAR(190, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
191 ASSERT_EQ(7ul, transformed.first->getNumberOfStates());
192 ASSERT_EQ(11ul, transformed.first->getNumberOfTransitions());
193 labeling = transformed.first->getStateLabeling();
194 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
195 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 2));
196 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 5));
197 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 6));
198 EXPECT_EQ(2ul, transformed.second.size());
201 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
203 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
209 ASSERT_EQ(5ul, transformed.first->getNumberOfStates());
210 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
211 labeling = transformed.first->getStateLabeling();
212 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
213 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 1));
214 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 2));
215 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 3));
216 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
217 EXPECT_EQ(2ul, transformed.second.size());
220 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
222 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);
228 ASSERT_EQ(5ul, transformed.first->getNumberOfStates());
229 ASSERT_EQ(10ul, transformed.first->getNumberOfTransitions());
230 labeling = transformed.first->getStateLabeling();
231 ASSERT_TRUE(labeling.getStateHasLabel(
"init", initState));
232 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 1));
233 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 2));
234 ASSERT_FALSE(labeling.getStateHasLabel(
"Fail", 3));
235 ASSERT_TRUE(labeling.getStateHasLabel(
"Fail", 4));
236 EXPECT_EQ(2ul, transformed.second.size());
239 EXPECT_EQ(1, result->asExplicitQuantitativeCheckResult<
double>()[initState]);
241 EXPECT_NEAR(0.791015319, result->asExplicitQuantitativeCheckResult<
double>()[initState], 1e-6);