|
|
@ -426,6 +426,73 @@ namespace { |
|
|
|
|
|
|
|
storm::storage::MaximalEndComponentDecomposition<ValueType> MSEC = storm::storage::MaximalEndComponentDecomposition<ValueType>(restrictedTransMatrix, backwardTransitions); |
|
|
|
|
|
|
|
// testing MSEC
|
|
|
|
// =====================================================
|
|
|
|
ASSERT_TRUE(MSEC.size() == 3); |
|
|
|
storm::storage::MaximalEndComponent const& mec1 = MSEC[0]; |
|
|
|
if (mec1.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec1.containsState(1)); |
|
|
|
ASSERT_FALSE(mec1.containsState(2)); |
|
|
|
ASSERT_FALSE(mec1.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec1.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec1.containsState(0)); |
|
|
|
ASSERT_FALSE(mec1.containsState(1)); |
|
|
|
ASSERT_FALSE(mec1.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec1.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec1.containsState(0)); |
|
|
|
ASSERT_FALSE(mec1.containsState(1)); |
|
|
|
ASSERT_FALSE(mec1.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
|
|
|
|
storm::storage::MaximalEndComponent const& mec2 = MSEC[1]; |
|
|
|
if (mec2.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec2.containsState(1)); |
|
|
|
ASSERT_FALSE(mec2.containsState(2)); |
|
|
|
ASSERT_FALSE(mec2.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec2.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec2.containsState(0)); |
|
|
|
ASSERT_FALSE(mec2.containsState(1)); |
|
|
|
ASSERT_FALSE(mec2.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec2.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec2.containsState(0)); |
|
|
|
ASSERT_FALSE(mec2.containsState(1)); |
|
|
|
ASSERT_FALSE(mec2.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
|
|
|
|
storm::storage::MaximalEndComponent const& mec3 = MSEC[2]; |
|
|
|
if (mec3.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec3.containsState(1)); |
|
|
|
ASSERT_FALSE(mec3.containsState(2)); |
|
|
|
ASSERT_FALSE(mec3.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec3.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec3.containsState(0)); |
|
|
|
ASSERT_FALSE(mec3.containsState(1)); |
|
|
|
ASSERT_FALSE(mec3.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec3.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec3.containsState(0)); |
|
|
|
ASSERT_FALSE(mec3.containsState(1)); |
|
|
|
ASSERT_FALSE(mec3.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
// =====================================================
|
|
|
|
|
|
|
|
// reducing the choiceValuesU
|
|
|
|
size_t i = 0; |
|
|
|
auto new_end = std::remove_if(choiceValuesU.begin(), choiceValuesU.end(), [&reducedMinimizerActions, &i](const auto& item) { |
|
|
@ -471,6 +538,73 @@ namespace { |
|
|
|
|
|
|
|
MSEC = storm::storage::MaximalEndComponentDecomposition<ValueType>(restrictedTransMatrix, backwardTransitions); |
|
|
|
|
|
|
|
// testing MSEC
|
|
|
|
// =====================================================
|
|
|
|
ASSERT_TRUE(MSEC.size() == 3); |
|
|
|
storm::storage::MaximalEndComponent const& mec4 = MSEC[0]; |
|
|
|
if (mec4.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec4.containsState(1)); |
|
|
|
ASSERT_FALSE(mec4.containsState(2)); |
|
|
|
ASSERT_FALSE(mec4.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec4.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec4.containsState(0)); |
|
|
|
ASSERT_FALSE(mec4.containsState(1)); |
|
|
|
ASSERT_FALSE(mec4.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec4.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec4.containsState(0)); |
|
|
|
ASSERT_FALSE(mec4.containsState(1)); |
|
|
|
ASSERT_FALSE(mec4.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
|
|
|
|
storm::storage::MaximalEndComponent const& mec5 = MSEC[1]; |
|
|
|
if (mec5.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec5.containsState(1)); |
|
|
|
ASSERT_FALSE(mec5.containsState(2)); |
|
|
|
ASSERT_FALSE(mec5.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec5.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec5.containsState(0)); |
|
|
|
ASSERT_FALSE(mec5.containsState(1)); |
|
|
|
ASSERT_FALSE(mec5.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec5.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec5.containsState(0)); |
|
|
|
ASSERT_FALSE(mec5.containsState(1)); |
|
|
|
ASSERT_FALSE(mec5.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
|
|
|
|
storm::storage::MaximalEndComponent const& mec6 = MSEC[2]; |
|
|
|
if (mec6.containsState(0)) { |
|
|
|
ASSERT_TRUE(mec6.containsState(1)); |
|
|
|
ASSERT_FALSE(mec6.containsState(2)); |
|
|
|
ASSERT_FALSE(mec6.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec6.containsState(2)) { |
|
|
|
ASSERT_FALSE(mec6.containsState(0)); |
|
|
|
ASSERT_FALSE(mec6.containsState(1)); |
|
|
|
ASSERT_FALSE(mec6.containsState(3)); |
|
|
|
} |
|
|
|
else if (mec6.containsState(3)) { |
|
|
|
ASSERT_FALSE(mec6.containsState(0)); |
|
|
|
ASSERT_FALSE(mec6.containsState(1)); |
|
|
|
ASSERT_FALSE(mec6.containsState(2)); |
|
|
|
} |
|
|
|
else { |
|
|
|
// This case must never happen
|
|
|
|
ASSERT_TRUE(false); |
|
|
|
} |
|
|
|
// =====================================================
|
|
|
|
|
|
|
|
// reducing the choiceValuesU
|
|
|
|
i = 0; |
|
|
|
new_end = std::remove_if(choiceValuesU.begin(), choiceValuesU.end(), [&reducedMinimizerActions, &i](const auto& item) { |
|
|
|