Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
TestBddVarOrdering.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"
7
8namespace {
9
10TEST(TestBddVarOrdering, VariableOrdering) {
11#ifdef STORM_HAVE_SYLVAN
12 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR "/dft/bdd/AndOrTest.dft");
14 auto manager{std::make_shared<storm::dft::storage::SylvanBddManager>(env)};
15 auto transformator{std::make_shared<storm::dft::transformations::SftToBddTransformator<double>>(dft, manager)};
16
17 // Use default variable ordering x1, x2, x3, x4
18 auto bdd = transformator->transformTopLevel();
19 EXPECT_EQ("x1", manager->getName(0));
20 EXPECT_EQ("x2", manager->getName(1));
21 EXPECT_EQ("x3", manager->getName(2));
22 EXPECT_EQ("x4", manager->getName(3));
23 EXPECT_EQ(5ul, bdd.NodeCount());
24
25 // Set different variable ordering x2, x4, x1, x3
26 std::vector<size_t> beOrder;
27 beOrder.push_back(dft->getIndex("x2"));
28 beOrder.push_back(dft->getIndex("x4"));
29 beOrder.push_back(dft->getIndex("x1"));
30 beOrder.push_back(dft->getIndex("x3"));
31 dft->setBEOrder(beOrder);
32 manager = std::make_shared<storm::dft::storage::SylvanBddManager>(env);
33 transformator = std::make_shared<storm::dft::transformations::SftToBddTransformator<double>>(dft, manager);
34
35 bdd = transformator->transformTopLevel();
36 EXPECT_EQ("x2", manager->getName(0));
37 EXPECT_EQ("x4", manager->getName(1));
38 EXPECT_EQ("x1", manager->getName(2));
39 EXPECT_EQ("x3", manager->getName(3));
40 EXPECT_EQ(7ul, bdd.NodeCount());
41#else
42 GTEST_SKIP() << "Library Sylvan not available.";
43#endif
44}
45
46TEST(TestBddVarOrdering, OrderParser) {
47#ifdef STORM_HAVE_SYLVAN
48 auto dft = storm::dft::api::loadDFTGalileoFile<double>(STORM_TEST_RESOURCES_DIR "/dft/bdd/AndOrTest.dft");
49
50 // Load variable ordering
51 auto beOrder = storm::dft::parser::BEOrderParser<double>::parseBEOrder(STORM_TEST_RESOURCES_DIR "/dft/bdd/AndOrTest_vars.txt", *dft);
52 EXPECT_EQ(4ul, beOrder.size());
53 EXPECT_EQ("x2", dft->getElement(beOrder.at(0))->name());
54 EXPECT_EQ("x4", dft->getElement(beOrder.at(1))->name());
55 EXPECT_EQ("x1", dft->getElement(beOrder.at(2))->name());
56 EXPECT_EQ("x3", dft->getElement(beOrder.at(3))->name());
57 dft->setBEOrder(beOrder);
58
60 auto manager = std::make_shared<storm::dft::storage::SylvanBddManager>(env);
61 auto transformator = std::make_shared<storm::dft::transformations::SftToBddTransformator<double>>(dft, manager);
62
63 auto bdd = transformator->transformTopLevel();
64 EXPECT_EQ("x2", manager->getName(0));
65 EXPECT_EQ("x4", manager->getName(1));
66 EXPECT_EQ("x1", manager->getName(2));
67 EXPECT_EQ("x3", manager->getName(3));
68 EXPECT_EQ(7ul, bdd.NodeCount());
69#else
70 GTEST_SKIP() << "Library Sylvan not available.";
71#endif
72}
73
74} // namespace
TEST(OrderTest, Simple)
Definition OrderTest.cpp:15
static std::vector< size_t > parseBEOrder(std::string const &filename, storm::dft::storage::DFT< ValueType > const &dft)
Parse BE order from given file.
std::shared_ptr< storm::dft::storage::DFT< ValueType > > loadDFTGalileoFile(std::string const &file)
Load DFT from Galileo file.
Definition io.cpp:14
SettingsManager const & manager()
Retrieves the settings manager.