3 changed files with 104 additions and 63 deletions
-
63src/test/storm-dft/api/DftApiTest.cpp
-
91src/test/storm-dft/api/DftModelCheckerTest.cpp
-
13src/test/storm-dft/api/DftParserTest.cpp
@ -1,63 +0,0 @@ |
|||
#include "gtest/gtest.h"
|
|||
#include "storm-config.h"
|
|||
|
|||
#include "storm-dft/api/storm-dft.h"
|
|||
|
|||
namespace { |
|||
|
|||
// Base holding information about test example
|
|||
struct DftExample { |
|||
std::string file; |
|||
double expectedValue; |
|||
}; |
|||
struct DftAnalysisConfig { |
|||
DftExample example; |
|||
bool useSR; |
|||
bool useMod; |
|||
bool useDC; |
|||
}; |
|||
|
|||
// Base test for regression test
|
|||
class DftAnalysisTestCase : public ::testing::TestWithParam<std::tuple<DftExample, bool, bool, bool>> |
|||
{ |
|||
protected: |
|||
DftAnalysisConfig analysisConfig { |
|||
std::get<0>(GetParam()), |
|||
std::get<1>(GetParam()), |
|||
std::get<2>(GetParam()), |
|||
std::get<3>(GetParam()) |
|||
}; |
|||
}; |
|||
|
|||
TEST_P(DftAnalysisTestCase, AnalyzeMTTF) { |
|||
std::stringstream stream; |
|||
stream << STORM_TEST_RESOURCES_DIR << "/dft/" << analysisConfig.example.file << ".dft"; |
|||
std::shared_ptr<storm::storage::DFT<double>> dft = storm::api::loadDFTGalileo<double>(stream.str()); |
|||
|
|||
std::string property = "Tmin=? [F \"failed\"]"; |
|||
std::vector<std::shared_ptr<storm::logic::Formula const>> properties = storm::api::extractFormulasFromProperties(storm::api::parseProperties(property)); |
|||
|
|||
typename storm::modelchecker::DFTModelChecker<double>::dft_results results = storm::api::analyzeDFT<double>(*dft, properties, analysisConfig.useSR, analysisConfig.useMod, analysisConfig.useDC); |
|||
double result = boost::get<double>(results[0]); |
|||
EXPECT_FLOAT_EQ(result, analysisConfig.example.expectedValue); |
|||
} |
|||
|
|||
TEST(DftApiTest, LoadFromGalileo) { |
|||
std::string file = STORM_TEST_RESOURCES_DIR "/dft/and.dft"; |
|||
std::shared_ptr<storm::storage::DFT<double>> dft = storm::api::loadDFTGalileo<double>(file); |
|||
} |
|||
|
|||
INSTANTIATE_TEST_CASE_P(RegularPolygon, DftAnalysisTestCase, ::testing::Combine( |
|||
testing::Values( |
|||
DftExample {"and", 3.0} |
|||
), |
|||
::testing::Bool(), // useSR
|
|||
::testing::Bool(), // useMod
|
|||
::testing::Bool() // useDC
|
|||
) |
|||
); |
|||
|
|||
|
|||
TEST(DftApiTest, AnalyzeMTTF) { |
|||
} |
|||
} |
@ -0,0 +1,91 @@ |
|||
#include "gtest/gtest.h"
|
|||
#include "storm-config.h"
|
|||
|
|||
#include "storm-dft/api/storm-dft.h"
|
|||
|
|||
namespace { |
|||
|
|||
// Configurations for DFT analysis
|
|||
struct DftAnalysisConfig { |
|||
bool useSR; |
|||
bool useMod; |
|||
bool useDC; |
|||
}; |
|||
|
|||
class NoOptimizationsConfig { |
|||
public: |
|||
typedef double ValueType; |
|||
static DftAnalysisConfig createConfig() { |
|||
return DftAnalysisConfig {false, false, false}; |
|||
} |
|||
}; |
|||
class DontCareConfig { |
|||
public: |
|||
typedef double ValueType; |
|||
static DftAnalysisConfig createConfig() { |
|||
return DftAnalysisConfig {false, false, true}; |
|||
} |
|||
}; |
|||
class ModularisationConfig { |
|||
public: |
|||
typedef double ValueType; |
|||
static DftAnalysisConfig createConfig() { |
|||
return DftAnalysisConfig {false, true, false}; |
|||
} |
|||
}; |
|||
class SymmetryReductionConfig { |
|||
public: |
|||
typedef double ValueType; |
|||
static DftAnalysisConfig createConfig() { |
|||
return DftAnalysisConfig {true, false, false}; |
|||
} |
|||
}; |
|||
class AllOptimizationsConfig { |
|||
public: |
|||
typedef double ValueType; |
|||
static DftAnalysisConfig createConfig() { |
|||
return DftAnalysisConfig {true, true, true}; |
|||
} |
|||
}; |
|||
|
|||
// General base class for testing of DFT model checking
|
|||
template<typename TestType> |
|||
class DftModelCheckerTest : public ::testing::Test { |
|||
public: |
|||
typedef typename TestType::ValueType ValueType; |
|||
|
|||
DftModelCheckerTest() : config(TestType::createConfig()) { |
|||
} |
|||
|
|||
DftAnalysisConfig const& getConfig() const { |
|||
return config; |
|||
} |
|||
|
|||
double analyzeMTTF(std::string const& file) { |
|||
std::shared_ptr<storm::storage::DFT<double>> dft = storm::api::loadDFTGalileo<double>(file); |
|||
std::string property = "Tmin=? [F \"failed\"]"; |
|||
std::vector<std::shared_ptr<storm::logic::Formula const>> properties = storm::api::extractFormulasFromProperties(storm::api::parseProperties(property)); |
|||
typename storm::modelchecker::DFTModelChecker<double>::dft_results results = storm::api::analyzeDFT<double>(*dft, properties, config.useSR, config.useMod, config.useDC); |
|||
return boost::get<double>(results[0]); |
|||
} |
|||
|
|||
private: |
|||
DftAnalysisConfig config; |
|||
}; |
|||
|
|||
typedef ::testing::Types< |
|||
NoOptimizationsConfig, |
|||
DontCareConfig, |
|||
ModularisationConfig, |
|||
SymmetryReductionConfig, |
|||
AllOptimizationsConfig |
|||
> TestingTypes; |
|||
|
|||
TYPED_TEST_CASE(DftModelCheckerTest, TestingTypes); |
|||
|
|||
TYPED_TEST(DftModelCheckerTest, AndMTTF) { |
|||
double result = this->analyzeMTTF(STORM_TEST_RESOURCES_DIR "/dft/and.dft"); |
|||
EXPECT_FLOAT_EQ(result, 3.0); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
#include "gtest/gtest.h"
|
|||
#include "storm-config.h"
|
|||
|
|||
#include "storm-dft/api/storm-dft.h"
|
|||
|
|||
namespace { |
|||
|
|||
TEST(DftParserTest, LoadFromGalileo) { |
|||
std::string file = STORM_TEST_RESOURCES_DIR "/dft/and.dft"; |
|||
std::shared_ptr<storm::storage::DFT<double>> dft = storm::api::loadDFTGalileo<double>(file); |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue