1#include "storm-config.h"
15class DoubleViEnvironment {
18 static const bool isExact =
false;
27class DoubleViRegMultEnvironment {
30 static const bool isExact =
false;
40class DoubleSoundViEnvironment {
43 static const bool isExact =
false;
53class DoubleIntervalIterationEnvironment {
56 static const bool isExact =
false;
66class DoubleGuessingViEnvironment {
69 static const bool isExact =
false;
79class DoubleOptimisticViEnvironment {
82 static const bool isExact =
false;
92class DoubleTopologicalViEnvironment {
95 static const bool isExact =
false;
105class DoublePIEnvironment {
108 static const bool isExact =
false;
119class RationalPIEnvironment {
122 static const bool isExact =
true;
129class RationalRationalSearchEnvironment {
132 static const bool isExact =
true;
140template<
typename TestType>
141class MinMaxLinearEquationSolverTest :
public ::testing::Test {
143 typedef typename TestType::ValueType
ValueType;
144 MinMaxLinearEquationSolverTest() : _environment(TestType::createEnvironment()) {}
152 return storm::utility::convertNumber<ValueType>(input);
159typedef ::testing::Types<DoubleViEnvironment, DoubleViRegMultEnvironment, DoubleSoundViEnvironment, DoubleIntervalIterationEnvironment,
160 DoubleOptimisticViEnvironment, DoubleGuessingViEnvironment, DoubleTopologicalViEnvironment, DoublePIEnvironment, RationalPIEnvironment,
161 RationalRationalSearchEnvironment>
166TYPED_TEST(MinMaxLinearEquationSolverTest, SolveEquations) {
167 typedef typename TestFixture::ValueType
ValueType;
170 ASSERT_NO_THROW(builder.newRowGroup(0));
171 ASSERT_NO_THROW(builder.addNextValue(0, 0, this->parseNumber(
"0.9")));
174 ASSERT_NO_THROW(A = builder.build(2));
176 std::vector<ValueType> x(1);
180 auto solver = factory.create(this->env(), A);
181 solver->setHasUniqueSolution(
true);
182 solver->setHasNoEndComponents(
true);
187 ASSERT_NO_THROW(solver->solveEquations(this->env(), storm::OptimizationDirection::Minimize, x, b));
188 EXPECT_NEAR(x[0], this->
parseNumber(
"0.5"), this->precision());
190 ASSERT_NO_THROW(solver->solveEquations(this->env(), storm::OptimizationDirection::Maximize, x, b));
191 EXPECT_NEAR(x[0], this->
parseNumber(
"0.99"), this->precision());
SolverEnvironment & solver()
void setMultiplicationStyle(storm::solver::MultiplicationStyle value)
storm::RationalNumber const & getPrecision() const
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
void setMethod(storm::solver::NativeLinearEquationSolverMethod value)
TopologicalSolverEnvironment & topological()
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
void setForceSoundness(bool value)
void setLinearEquationSolverPrecision(boost::optional< storm::RationalNumber > const &newPrecision, boost::optional< bool > const &relativePrecision=boost::none)
NativeSolverEnvironment & native()
void setUnderlyingMinMaxMethod(storm::solver::MinMaxMethod value)
bool hasEnabledRequirement() const
A class that can be used to build a sparse matrix by adding value by value.
A class that holds a possibly non-square matrix in the compressed row storage format.
SFTBDDChecker::ValueType ValueType
NumberType parseNumber(std::string const &value)
Parse number from string.
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes