1#include "storm-config.h"
11class NativeEnvironment {
14 static const bool isExact =
false;
22class GmmxxEnvironment {
25 static const bool isExact =
false;
33template<
typename TestType>
34class MultiplierTest :
public ::testing::Test {
36 typedef typename TestType::ValueType
ValueType;
37 MultiplierTest() : _environment(TestType::createEnvironment()) {}
45 return storm::utility::convertNumber<ValueType>(input);
52typedef ::testing::Types<NativeEnvironment, GmmxxEnvironment>
TestingTypes;
56TYPED_TEST(MultiplierTest, repeatedMultiplyTest) {
57 typedef typename TestFixture::ValueType
ValueType;
60 ASSERT_NO_THROW(builder.
addNextValue(0, 1, this->parseNumber(
"0.5")));
61 ASSERT_NO_THROW(builder.
addNextValue(0, 4, this->parseNumber(
"0.5")));
62 ASSERT_NO_THROW(builder.
addNextValue(1, 2, this->parseNumber(
"0.5")));
63 ASSERT_NO_THROW(builder.
addNextValue(1, 4, this->parseNumber(
"0.5")));
64 ASSERT_NO_THROW(builder.
addNextValue(2, 3, this->parseNumber(
"0.5")));
65 ASSERT_NO_THROW(builder.
addNextValue(2, 4, this->parseNumber(
"0.5")));
66 ASSERT_NO_THROW(builder.
addNextValue(3, 4, this->parseNumber(
"1")));
67 ASSERT_NO_THROW(builder.
addNextValue(4, 4, this->parseNumber(
"1")));
70 ASSERT_NO_THROW(A = builder.
build());
72 std::vector<ValueType> x(5);
76 auto multiplier = factory.create(this->env(), A);
77 ASSERT_NO_THROW(multiplier->repeatedMultiply(this->env(), x,
nullptr, 4));
78 EXPECT_NEAR(x[0], this->
parseNumber(
"1"), this->precision());
81TYPED_TEST(MultiplierTest, repeatedMultiplyAndReduceTest) {
82 typedef typename TestFixture::ValueType
ValueType;
86 ASSERT_NO_THROW(builder.
addNextValue(0, 0, this->parseNumber(
"0.9")));
87 ASSERT_NO_THROW(builder.
addNextValue(0, 1, this->parseNumber(
"0.099")));
88 ASSERT_NO_THROW(builder.
addNextValue(0, 2, this->parseNumber(
"0.001")));
89 ASSERT_NO_THROW(builder.
addNextValue(1, 1, this->parseNumber(
"0.5")));
90 ASSERT_NO_THROW(builder.
addNextValue(1, 2, this->parseNumber(
"0.5")));
92 ASSERT_NO_THROW(builder.
addNextValue(2, 1, this->parseNumber(
"1")));
94 ASSERT_NO_THROW(builder.
addNextValue(3, 2, this->parseNumber(
"1")));
97 ASSERT_NO_THROW(A = builder.
build());
100 std::vector<ValueType> x;
103 auto multiplier = factory.create(this->env(), A);
106 ASSERT_NO_THROW(multiplier->repeatedMultiplyAndReduce(this->env(), storm::OptimizationDirection::Minimize, x,
nullptr, 1));
107 EXPECT_NEAR(x[0], this->
parseNumber(
"0.099"), this->precision());
110 ASSERT_NO_THROW(multiplier->repeatedMultiplyAndReduce(this->env(), storm::OptimizationDirection::Minimize, x,
nullptr, 2));
111 EXPECT_NEAR(x[0], this->
parseNumber(
"0.1881"), this->precision());
114 ASSERT_NO_THROW(multiplier->repeatedMultiplyAndReduce(this->env(), storm::OptimizationDirection::Minimize, x,
nullptr, 20));
115 EXPECT_NEAR(x[0], this->
parseNumber(
"0.5"), this->precision());
118 ASSERT_NO_THROW(multiplier->repeatedMultiplyAndReduce(this->env(), storm::OptimizationDirection::Maximize, x,
nullptr, 1));
119 EXPECT_NEAR(x[0], this->
parseNumber(
"0.5"), this->precision());
122 ASSERT_NO_THROW(multiplier->repeatedMultiplyAndReduce(this->env(), storm::OptimizationDirection::Maximize, x,
nullptr, 20));
123 EXPECT_NEAR(x[0], this->
parseNumber(
"0.923808265834023387639"), this->precision());
SolverEnvironment & solver()
void setType(storm::solver::MultiplierType value, bool isSetFromDefault=false)
MultiplierEnvironment & multiplier()
A class that can be used to build a sparse matrix by adding value by value.
void addNextValue(index_type row, index_type column, value_type const &value)
Sets the matrix entry at the given row and column to the given value.
void newRowGroup(index_type startingRow)
Starts a new row group in the matrix.
SparseMatrix< value_type > build(index_type overriddenRowCount=0, index_type overriddenColumnCount=0, index_type overriddenRowGroupCount=0)
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