Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
storm_gtest.cpp
Go to the documentation of this file.
1#include "test/storm_gtest.h"
2
3#ifdef STORM_HAVE_Z3
4#include <z3.h>
5#endif
6
13
14namespace testing {
15namespace internal {
16
17GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, storm::RationalNumber val1,
18 storm::RationalNumber val2, storm::RationalNumber abs_error) {
19 const storm::RationalNumber diff = storm::utility::abs<storm::RationalNumber>(val1 - val2);
20 if (diff <= abs_error)
21 return AssertionSuccess();
22 return AssertionFailure() << "The difference between " << expr1 << " and " << expr2 << " is " << diff << " (approx. "
23 << storm::utility::convertNumber<double>(diff) << "), which exceeds " << abs_error_expr << ", where\n"
24 << expr1 << " evaluates to " << val1 << " (approx. " << storm::utility::convertNumber<double>(val1) << "),\n"
25 << expr2 << " evaluates to " << val2 << " (approx. " << storm::utility::convertNumber<double>(val2) << "),\n"
26 << abs_error_expr << " evaluates to " << abs_error << " (approx. " << storm::utility::convertNumber<double>(abs_error) << ").";
27}
28} // namespace internal
29} // namespace testing
30
31namespace storm::test {
32bool noGurobi = false;
33
34void initialize(int* argc, char** argv) {
35 // GoogleTest-specific commandline arguments should already be processed before and removed from argc/argv
37 // Only enable error output by default.
38 storm::utility::setLogLevel(l3pp::LogLevel::ERR);
40 for (int i = 1; i < *argc; ++i) {
41 if (std::string(argv[i]) == "--nogurobi") {
42 noGurobi = true;
43 } else {
44 STORM_LOG_WARN("Unknown argument: " << argv[i]);
45 }
46 }
47}
48
50#ifdef STORM_HAVE_GUROBI
51 if (!storm::settings::hasModule<storm::settings::modules::GurobiSettings>()) {
52 return true; // Gurobi not relevant for this test suite
53 }
54 try {
55 auto lpSolver = storm::utility::solver::getLpSolver<double>("test", storm::solver::LpSolverTypeSelection::Gurobi);
56 } catch (storm::exceptions::GurobiLicenseException const&) {
57 return false;
58 }
59 return true;
60#else
61 return false;
62#endif
63}
64
65// Some tests have to be skipped for specific z3 versions because of a bug that was present in z3.
66#ifdef STORM_HAVE_Z3
67bool z3AtLeastVersion(unsigned expectedMajor, unsigned expectedMinor, unsigned expectedBuildNumber) {
68 std::vector<unsigned> actual(4), expected({expectedMajor, expectedMinor, expectedBuildNumber, 0u});
69 Z3_get_version(&actual[0], &actual[1], &actual[2], &actual[3]);
70 for (uint64_t i = 0; i < 4; ++i) {
71 if (actual[i] > expected[i]) {
72 return true;
73 }
74 if (actual[i] < expected[i]) {
75 return false;
76 }
77 }
78 return true; // Equal versions
79}
80#endif
81
82} // namespace storm::test
#define STORM_LOG_WARN(message)
Definition logging.h:25
bool testGurobiLicense()
void initialize(int *argc, char **argv)
void initializeLogger()
Initializes the logging framework and sets up logging to console.
void setLogLevel(l3pp::LogLevel level)
Set the global log level.
GTEST_API_ AssertionResult DoubleNearPredFormat(const char *expr1, const char *expr2, const char *abs_error_expr, storm::RationalNumber val1, storm::RationalNumber val2, storm::RationalNumber abs_error)