1#include "storm-config.h"
14class DoubleViEnvironment {
17 static const bool isExact =
false;
26class DoublePiEnvironment {
29 static const bool isExact =
false;
41class RationalPiEnvironment {
44 static const bool isExact =
true;
52template<
typename TestType>
53class GameSolverTest :
public ::testing::Test {
55 typedef typename TestType::ValueType
ValueType;
56 GameSolverTest() : _environment(TestType::createEnvironment()) {}
64 return storm::utility::convertNumber<ValueType>(input);
71typedef ::testing::Types<DoubleViEnvironment, DoublePiEnvironment, RationalPiEnvironment>
TestingTypes;
76 typedef typename TestFixture::ValueType
ValueType;
79 player2MatrixBuilder.newRowGroup(0);
80 player2MatrixBuilder.addNextValue(0, 0, this->
parseNumber(
"0.4"));
81 player2MatrixBuilder.addNextValue(0, 1, this->
parseNumber(
"0.6"));
82 player2MatrixBuilder.addNextValue(1, 1, this->
parseNumber(
"0.2"));
83 player2MatrixBuilder.addNextValue(1, 2, this->
parseNumber(
"0.8"));
84 player2MatrixBuilder.newRowGroup(2);
85 player2MatrixBuilder.addNextValue(2, 2, this->
parseNumber(
"0.5"));
86 player2MatrixBuilder.addNextValue(2, 3, this->
parseNumber(
"0.5"));
87 player2MatrixBuilder.newRowGroup(4);
88 player2MatrixBuilder.newRowGroup(5);
89 player2MatrixBuilder.newRowGroup(6);
94 player1MatrixBuilder.newRowGroup(0);
95 player1MatrixBuilder.addNextValue(0, 0, 1);
96 player1MatrixBuilder.addNextValue(1, 1, 1);
97 player1MatrixBuilder.newRowGroup(2);
98 player1MatrixBuilder.addNextValue(2, 2, 1);
99 player1MatrixBuilder.newRowGroup(3);
100 player1MatrixBuilder.addNextValue(3, 3, 1);
101 player1MatrixBuilder.newRowGroup(4);
102 player1MatrixBuilder.addNextValue(4, 4, 1);
106 auto solver = factory.
create(this->env(), player1Matrix, player2Matrix);
109 std::vector<ValueType> result(4);
110 std::vector<ValueType> b(7);
115 solver->solveGame(this->env(), storm::OptimizationDirection::Minimize, storm::OptimizationDirection::Minimize, result, b);
116 EXPECT_NEAR(this->
parseNumber(
"0"), result[0], this->precision());
118 result = std::vector<ValueType>(4);
121 solver->solveGame(this->env(), storm::OptimizationDirection::Minimize, storm::OptimizationDirection::Maximize, result, b);
122 EXPECT_NEAR(this->
parseNumber(
"0.5"), result[0], this->precision());
124 result = std::vector<ValueType>(4);
126 solver->solveGame(this->env(), storm::OptimizationDirection::Maximize, storm::OptimizationDirection::Minimize, result, b);
127 EXPECT_NEAR(this->
parseNumber(
"0.2"), result[0], this->precision());
129 result = std::vector<ValueType>(4);
131 solver->solveGame(this->env(), storm::OptimizationDirection::Maximize, storm::OptimizationDirection::Maximize, result, b);
132 EXPECT_NEAR(this->
parseNumber(
"1"), result[0], this->precision());
SolverEnvironment & solver()
storm::RationalNumber const & getPrecision() const
void setMethod(storm::solver::GameMethod value)
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::NativeLinearEquationSolverMethod value)
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
void setLinearEquationSolverPrecision(boost::optional< storm::RationalNumber > const &newPrecision, boost::optional< bool > const &relativePrecision=boost::none)
GameSolverEnvironment & game()
NativeSolverEnvironment & native()
virtual std::unique_ptr< GameSolver< ValueType > > create(Environment const &env, storm::storage::SparseMatrix< storm::storage::sparse::state_type > const &player1Matrix, storm::storage::SparseMatrix< ValueType > const &player2Matrix) 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