1#include "storm-config.h"
9TEST(DftModuleTest, Modularization) {
10 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/all_gates.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);
26 EXPECT_EQ(it->getRepresentative(), 17ul);
27 EXPECT_FALSE(it->isStatic());
28 EXPECT_FALSE(it->isFullyStatic());
29 EXPECT_EQ(it->getSubModules().size(), 3ul);
31 EXPECT_EQ(it->getRepresentative(), 28ul);
32 EXPECT_FALSE(it->isStatic());
33 EXPECT_FALSE(it->isFullyStatic());
34 EXPECT_EQ(it->getSubModules().size(), 6ul);
36 EXPECT_EQ(it->getRepresentative(), 36ul);
37 EXPECT_FALSE(it->isStatic());
38 EXPECT_FALSE(it->isFullyStatic());
39 EXPECT_EQ(it->getSubModules().size(), 7ul);
42TEST(DftModuleTest, ModularizationCycle) {
43 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/fdep_cycle.dft";
48 EXPECT_EQ(topModule.getRepresentative(), 2ul);
49 EXPECT_EQ(topModule.getSubModules().size(), 2ul);
52TEST(DftModuleTest, ModularizationOverlapping) {
53 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/modules2.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();
65 EXPECT_EQ(it->getRepresentative(), 5ul);
66 EXPECT_EQ(it->getSubModules().size(), 3ul);
67 EXPECT_TRUE(it->isStatic());
68 EXPECT_TRUE(it->isFullyStatic());
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());
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());
85 EXPECT_EQ(it->getRepresentative(), 11ul);
86 EXPECT_TRUE(it->isSingleBE());
87 EXPECT_EQ(++it, modulesF4.end());
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());
96 EXPECT_EQ(it->getRepresentative(), 9ul);
97 EXPECT_TRUE(it->isSingleBE());
98 EXPECT_EQ(++it, modulesF5.end());
100 it = modulesF6.begin();
101 EXPECT_EQ(it->getRepresentative(), 6ul);
102 EXPECT_TRUE(it->isSingleBE());
104 EXPECT_EQ(it->getRepresentative(), 7ul);
105 EXPECT_TRUE(it->isSingleBE());
106 EXPECT_EQ(++it, modulesF6.end());
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.