1#include "storm-config.h"
10TEST(DftModuleTest, Modularization) {
11 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/all_gates.dft";
12 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
16 EXPECT_EQ(topModule.getRepresentative(), 37ul);
17 EXPECT_TRUE(topModule.isStatic());
18 EXPECT_FALSE(topModule.isFullyStatic());
19 auto submodules = topModule.getSubModules();
20 EXPECT_EQ(submodules.size(), 4ul);
21 auto it = submodules.begin();
22 EXPECT_EQ(it->getRepresentative(), 8ul);
23 EXPECT_FALSE(it->isStatic());
24 EXPECT_FALSE(it->isFullyStatic());
25 EXPECT_EQ(it->getSubModules().size(), 3ul);
27 EXPECT_EQ(it->getRepresentative(), 17ul);
28 EXPECT_FALSE(it->isStatic());
29 EXPECT_FALSE(it->isFullyStatic());
30 EXPECT_EQ(it->getSubModules().size(), 3ul);
32 EXPECT_EQ(it->getRepresentative(), 28ul);
33 EXPECT_FALSE(it->isStatic());
34 EXPECT_FALSE(it->isFullyStatic());
35 EXPECT_EQ(it->getSubModules().size(), 6ul);
37 EXPECT_EQ(it->getRepresentative(), 36ul);
38 EXPECT_FALSE(it->isStatic());
39 EXPECT_FALSE(it->isFullyStatic());
40 EXPECT_EQ(it->getSubModules().size(), 7ul);
43TEST(DftModuleTest, ModularizationCycle) {
44 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/fdep_cycle.dft";
45 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
49 EXPECT_EQ(topModule.getRepresentative(), 2ul);
50 EXPECT_EQ(topModule.getSubModules().size(), 2ul);
53TEST(DftModuleTest, ModularizationOverlapping) {
54 std::string file = STORM_TEST_RESOURCES_DIR
"/dft/modules2.dft";
55 std::shared_ptr<storm::dft::storage::DFT<double>> dft = storm::dft::api::loadDFTGalileoFile<double>(file);
59 EXPECT_EQ(topModule.getRepresentative(), 13ul);
60 auto submodules = topModule.getSubModules();
61 EXPECT_EQ(submodules.size(), 2ul);
62 EXPECT_TRUE(topModule.isStatic());
63 EXPECT_FALSE(topModule.isFullyStatic());
64 auto it = submodules.begin();
66 EXPECT_EQ(it->getRepresentative(), 5ul);
67 EXPECT_EQ(it->getSubModules().size(), 3ul);
68 EXPECT_TRUE(it->isStatic());
69 EXPECT_TRUE(it->isFullyStatic());
72 EXPECT_EQ(it->getRepresentative(), 12ul);
73 auto modulesF4 = it->getSubModules();
74 EXPECT_EQ(modulesF4.size(), 2ul);
75 EXPECT_FALSE(it->isStatic());
76 EXPECT_FALSE(it->isFullyStatic());
77 EXPECT_EQ(++it, submodules.end());
79 it = modulesF4.begin();
80 EXPECT_EQ(it->getRepresentative(), 10ul);
81 auto modulesF5 = it->getSubModules();
82 EXPECT_EQ(modulesF5.size(), 2ul);
83 EXPECT_FALSE(it->isStatic());
84 EXPECT_FALSE(it->isFullyStatic());
86 EXPECT_EQ(it->getRepresentative(), 11ul);
87 EXPECT_TRUE(it->isSingleBE());
88 EXPECT_EQ(++it, modulesF4.end());
90 it = modulesF5.begin();
91 EXPECT_EQ(it->getRepresentative(), 8ul);
92 auto modulesF6 = it->getSubModules();
93 EXPECT_EQ(modulesF6.size(), 2ul);
94 EXPECT_TRUE(it->isStatic());
95 EXPECT_TRUE(it->isFullyStatic());
97 EXPECT_EQ(it->getRepresentative(), 9ul);
98 EXPECT_TRUE(it->isSingleBE());
99 EXPECT_EQ(++it, modulesF5.end());
101 it = modulesF6.begin();
102 EXPECT_EQ(it->getRepresentative(), 6ul);
103 EXPECT_TRUE(it->isSingleBE());
105 EXPECT_EQ(it->getRepresentative(), 7ul);
106 EXPECT_TRUE(it->isSingleBE());
107 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.