Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DftModuleTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
4#include "storm-dft/api/io.h"
6
7namespace {
8
9TEST(DftModuleTest, Modularization) {
10 std::string file = STORM_TEST_RESOURCES_DIR "/dft/all_gates.dft";
11 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
12
14 auto topModule = modularizer.computeModules(*dft);
15 EXPECT_EQ(topModule.getRepresentative(), 37ul);
16 EXPECT_TRUE(topModule.isStatic());
17 EXPECT_FALSE(topModule.isFullyStatic());
18 auto submodules = topModule.getSubModules();
19 EXPECT_EQ(submodules.size(), 4ul);
20 auto it = submodules.begin();
21 EXPECT_EQ(it->getRepresentative(), 8ul);
22 EXPECT_FALSE(it->isStatic());
23 EXPECT_FALSE(it->isFullyStatic());
24 EXPECT_EQ(it->getSubModules().size(), 3ul);
25 ++it;
26 EXPECT_EQ(it->getRepresentative(), 17ul);
27 EXPECT_FALSE(it->isStatic());
28 EXPECT_FALSE(it->isFullyStatic());
29 EXPECT_EQ(it->getSubModules().size(), 3ul);
30 ++it;
31 EXPECT_EQ(it->getRepresentative(), 28ul);
32 EXPECT_FALSE(it->isStatic());
33 EXPECT_FALSE(it->isFullyStatic());
34 EXPECT_EQ(it->getSubModules().size(), 6ul);
35 ++it;
36 EXPECT_EQ(it->getRepresentative(), 36ul);
37 EXPECT_FALSE(it->isStatic());
38 EXPECT_FALSE(it->isFullyStatic());
39 EXPECT_EQ(it->getSubModules().size(), 7ul);
40}
41
42TEST(DftModuleTest, ModularizationCycle) {
43 std::string file = STORM_TEST_RESOURCES_DIR "/dft/fdep_cycle.dft";
44 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
45
47 auto topModule = modularizer.computeModules(*dft);
48 EXPECT_EQ(topModule.getRepresentative(), 2ul);
49 EXPECT_EQ(topModule.getSubModules().size(), 2ul);
50}
51
52TEST(DftModuleTest, ModularizationOverlapping) {
53 std::string file = STORM_TEST_RESOURCES_DIR "/dft/modules2.dft";
54 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
55
57 auto topModule = modularizer.computeModules(*dft);
58 EXPECT_EQ(topModule.getRepresentative(), 13ul);
59 auto submodules = topModule.getSubModules();
60 EXPECT_EQ(submodules.size(), 2ul);
61 EXPECT_TRUE(topModule.isStatic());
62 EXPECT_FALSE(topModule.isFullyStatic());
63 auto it = submodules.begin();
64 // Submodule F1
65 EXPECT_EQ(it->getRepresentative(), 5ul);
66 EXPECT_EQ(it->getSubModules().size(), 3ul);
67 EXPECT_TRUE(it->isStatic());
68 EXPECT_TRUE(it->isFullyStatic());
69 // Submodule F4
70 ++it;
71 EXPECT_EQ(it->getRepresentative(), 12ul);
72 auto modulesF4 = it->getSubModules();
73 EXPECT_EQ(modulesF4.size(), 2ul);
74 EXPECT_FALSE(it->isStatic());
75 EXPECT_FALSE(it->isFullyStatic());
76 EXPECT_EQ(++it, submodules.end());
77 // Submodule F5
78 it = modulesF4.begin();
79 EXPECT_EQ(it->getRepresentative(), 10ul);
80 auto modulesF5 = it->getSubModules();
81 EXPECT_EQ(modulesF5.size(), 2ul);
82 EXPECT_FALSE(it->isStatic());
83 EXPECT_FALSE(it->isFullyStatic());
84 ++it;
85 EXPECT_EQ(it->getRepresentative(), 11ul);
86 EXPECT_TRUE(it->isSingleBE());
87 EXPECT_EQ(++it, modulesF4.end());
88 // Submodule F6
89 it = modulesF5.begin();
90 EXPECT_EQ(it->getRepresentative(), 8ul);
91 auto modulesF6 = it->getSubModules();
92 EXPECT_EQ(modulesF6.size(), 2ul);
93 EXPECT_TRUE(it->isStatic());
94 EXPECT_TRUE(it->isFullyStatic());
95 ++it;
96 EXPECT_EQ(it->getRepresentative(), 9ul);
97 EXPECT_TRUE(it->isSingleBE());
98 EXPECT_EQ(++it, modulesF5.end());
99 // BE submodules of F6
100 it = modulesF6.begin();
101 EXPECT_EQ(it->getRepresentative(), 6ul);
102 EXPECT_TRUE(it->isSingleBE());
103 ++it;
104 EXPECT_EQ(it->getRepresentative(), 7ul);
105 EXPECT_TRUE(it->isSingleBE());
106 EXPECT_EQ(++it, modulesF6.end());
107}
108
109} // namespace
TEST(OrderTest, Simple)
Definition OrderTest.cpp:15
Find modules (independent subtrees) in DFT.
storm::dft::storage::DftIndependentModule computeModules(storm::dft::storage::DFT< ValueType > const &dft)
Compute modules of DFT by applying the LTA/DR algorithm.
std::shared_ptr< storm::dft::storage::DFT< ValueType > > loadDFTGalileoFile(std::string const &file)
Load DFT from Galileo file.
Definition io.cpp:14