Browse Source
Added functional tests for MEC decomposition.
Added functional tests for MEC decomposition.
Former-commit-id: 66b1265ebb
tempestpy_adaptions
dehnert
11 years ago
3 changed files with 111 additions and 2 deletions
-
5src/storage/MaximalEndComponentDecomposition.cpp
-
2src/storage/PartialScheduler.cpp
-
106test/functional/storage/MaximalEndComponentDecompositionTest.cpp
@ -0,0 +1,106 @@ |
|||
#include "gtest/gtest.h"
|
|||
#include "storm-config.h"
|
|||
#include "src/parser/AutoParser.h"
|
|||
#include "src/storage/MaximalEndComponentDecomposition.h"
|
|||
|
|||
TEST(MaximalEndComponentDecomposition, FullSystem) { |
|||
storm::parser::AutoParser<double> parser(STORM_CPP_BASE_PATH "/examples/ma/tiny/tiny1.tra", STORM_CPP_BASE_PATH "/examples/ma/tiny/tiny1.lab", "", ""); |
|||
|
|||
std::shared_ptr<storm::models::MarkovAutomaton<double>> markovAutomaton = parser.getModel<storm::models::MarkovAutomaton<double>>(); |
|||
|
|||
storm::storage::MaximalEndComponentDecomposition<double> mecDecomposition; |
|||
ASSERT_NO_THROW(mecDecomposition = storm::storage::MaximalEndComponentDecomposition<double>(*markovAutomaton)); |
|||
|
|||
ASSERT_EQ(2, mecDecomposition.size()); |
|||
|
|||
// Now, because there is no ordering we have to check the contents of the MECs in a symmetrical way.
|
|||
storm::storage::MaximalEndComponent const& mec1 = mecDecomposition[0]; |
|||
if (mec1.containsState(3)) { |
|||
ASSERT_TRUE(mec1.containsState(8)); |
|||
ASSERT_TRUE(mec1.containsState(9)); |
|||
ASSERT_TRUE(mec1.containsState(10)); |
|||
ASSERT_FALSE(mec1.containsState(0)); |
|||
ASSERT_FALSE(mec1.containsState(1)); |
|||
ASSERT_FALSE(mec1.containsState(2)); |
|||
ASSERT_FALSE(mec1.containsState(4)); |
|||
ASSERT_FALSE(mec1.containsState(5)); |
|||
ASSERT_FALSE(mec1.containsState(6)); |
|||
ASSERT_FALSE(mec1.containsState(7)); |
|||
} else if (mec1.containsState(4)) { |
|||
ASSERT_TRUE(mec1.containsState(5)); |
|||
ASSERT_TRUE(mec1.containsState(6)); |
|||
ASSERT_TRUE(mec1.containsState(7)); |
|||
ASSERT_FALSE(mec1.containsState(0)); |
|||
ASSERT_FALSE(mec1.containsState(1)); |
|||
ASSERT_FALSE(mec1.containsState(2)); |
|||
ASSERT_FALSE(mec1.containsState(3)); |
|||
ASSERT_FALSE(mec1.containsState(8)); |
|||
ASSERT_FALSE(mec1.containsState(9)); |
|||
ASSERT_FALSE(mec1.containsState(10)); |
|||
} else { |
|||
// This case must never happen as the only two existing MECs contain either 3 or 4.
|
|||
ASSERT_TRUE(false); |
|||
} |
|||
|
|||
storm::storage::MaximalEndComponent const& mec2 = mecDecomposition[1]; |
|||
if (mec2.containsState(3)) { |
|||
ASSERT_TRUE(mec2.containsState(8)); |
|||
ASSERT_TRUE(mec2.containsState(9)); |
|||
ASSERT_TRUE(mec2.containsState(10)); |
|||
ASSERT_FALSE(mec2.containsState(0)); |
|||
ASSERT_FALSE(mec2.containsState(1)); |
|||
ASSERT_FALSE(mec2.containsState(2)); |
|||
ASSERT_FALSE(mec2.containsState(4)); |
|||
ASSERT_FALSE(mec2.containsState(5)); |
|||
ASSERT_FALSE(mec2.containsState(6)); |
|||
ASSERT_FALSE(mec2.containsState(7)); |
|||
} else if (mec2.containsState(4)) { |
|||
ASSERT_TRUE(mec2.containsState(5)); |
|||
ASSERT_TRUE(mec2.containsState(6)); |
|||
ASSERT_TRUE(mec2.containsState(7)); |
|||
ASSERT_FALSE(mec2.containsState(0)); |
|||
ASSERT_FALSE(mec2.containsState(1)); |
|||
ASSERT_FALSE(mec2.containsState(2)); |
|||
ASSERT_FALSE(mec2.containsState(3)); |
|||
ASSERT_FALSE(mec2.containsState(8)); |
|||
ASSERT_FALSE(mec2.containsState(9)); |
|||
ASSERT_FALSE(mec2.containsState(10)); |
|||
} else { |
|||
// This case must never happen as the only two existing MECs contain either 3 or 4.
|
|||
ASSERT_TRUE(false); |
|||
} |
|||
} |
|||
|
|||
TEST(MaximalEndComponentDecomposition, Subsystem) { |
|||
storm::parser::AutoParser<double> parser(STORM_CPP_BASE_PATH "/examples/ma/tiny/tiny1.tra", STORM_CPP_BASE_PATH "/examples/ma/tiny/tiny1.lab", "", ""); |
|||
|
|||
std::shared_ptr<storm::models::MarkovAutomaton<double>> markovAutomaton = parser.getModel<storm::models::MarkovAutomaton<double>>(); |
|||
|
|||
storm::storage::BitVector subsystem(markovAutomaton->getNumberOfStates(), true); |
|||
subsystem.set(7, false); |
|||
|
|||
storm::storage::MaximalEndComponentDecomposition<double> mecDecomposition; |
|||
ASSERT_NO_THROW(mecDecomposition = storm::storage::MaximalEndComponentDecomposition<double>(*markovAutomaton, subsystem)); |
|||
|
|||
ASSERT_EQ(1, mecDecomposition.size()); |
|||
|
|||
storm::storage::MaximalEndComponent const& mec1 = mecDecomposition[0]; |
|||
|
|||
std::cout << mec1 << std::endl; |
|||
|
|||
if (mec1.containsState(3)) { |
|||
ASSERT_TRUE(mec1.containsState(8)); |
|||
ASSERT_TRUE(mec1.containsState(9)); |
|||
ASSERT_TRUE(mec1.containsState(10)); |
|||
ASSERT_FALSE(mec1.containsState(0)); |
|||
ASSERT_FALSE(mec1.containsState(1)); |
|||
ASSERT_FALSE(mec1.containsState(2)); |
|||
ASSERT_FALSE(mec1.containsState(4)); |
|||
ASSERT_FALSE(mec1.containsState(5)); |
|||
ASSERT_FALSE(mec1.containsState(6)); |
|||
ASSERT_FALSE(mec1.containsState(7)); |
|||
} else { |
|||
// This case must never happen as the only two existing MEC contains 3.
|
|||
ASSERT_TRUE(false); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue