@ -1,8 +1,8 @@
# include "gtest/gtest.h"
# include "storm-config.h"
# include "src/exceptions/InvalidArgumentException.h"
# include "src/storage/dd/cudd/Cudd DdManager.h"
# include "src/storage/dd/cudd/Cudd Add.h"
# include "src/storage/dd/DdManager.h"
# include "src/storage/dd/Add.h"
# include "src/storage/dd/cudd/CuddOdd.h"
# include "src/storage/dd/DdMetaVariable.h"
# include "src/settings/SettingsManager.h"
@ -11,8 +11,8 @@
TEST ( CuddDdManager , Constants ) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > zero ;
ASSERT_NO_THROW ( zero = manager - > getAddZero ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > zero ;
ASSERT_NO_THROW ( zero = manager - > template getAddZero < double > ( ) ) ;
EXPECT_EQ ( 0ul , zero . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 1ul , zero . getLeafCount ( ) ) ;
@ -20,8 +20,8 @@ TEST(CuddDdManager, Constants) {
EXPECT_EQ ( 0 , zero . getMin ( ) ) ;
EXPECT_EQ ( 0 , zero . getMax ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > one ;
ASSERT_NO_THROW ( one = manager - > getAddOne ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > one ;
ASSERT_NO_THROW ( one = manager - > template getAddOne < double > ( ) ) ;
EXPECT_EQ ( 1ul , one . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 1ul , one . getLeafCount ( ) ) ;
@ -29,8 +29,8 @@ TEST(CuddDdManager, Constants) {
EXPECT_EQ ( 1 , one . getMin ( ) ) ;
EXPECT_EQ ( 1 , one . getMax ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > two ;
ASSERT_NO_THROW ( two = manager - > getConstant ( 2 ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > two ;
ASSERT_NO_THROW ( two = manager - > template getConstant < double > ( 2 ) ) ;
EXPECT_EQ ( 1ul , two . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 1ul , two . getLeafCount ( ) ) ;
@ -72,8 +72,8 @@ TEST(CuddDdManager, EncodingTest) {
EXPECT_EQ ( 1ul , encoding . getLeafCount ( ) ) ;
// As an MTBDD, the 0-leaf is there, so the count is actually 2 and the node count is 6.
EXPECT_EQ ( 6ul , encoding . toAdd ( ) . getNodeCount ( ) ) ;
EXPECT_EQ ( 2ul , encoding . toAdd ( ) . getLeafCount ( ) ) ;
EXPECT_EQ ( 6ul , encoding . template toAdd < double > ( ) . getNodeCount ( ) ) ;
EXPECT_EQ ( 2ul , encoding . template toAdd < double > ( ) . getLeafCount ( ) ) ;
}
TEST ( CuddDdManager , RangeTest ) {
@ -93,8 +93,8 @@ TEST(CuddDdManager, IdentityTest) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > identity ;
ASSERT_NO_THROW ( identity = manager - > getIdentity ( x . first ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > identity ;
ASSERT_NO_THROW ( identity = manager - > getIdentity < double > ( x . first ) ) ;
EXPECT_EQ ( 9ul , identity . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 10ul , identity . getLeafCount ( ) ) ;
@ -104,33 +104,33 @@ TEST(CuddDdManager, IdentityTest) {
TEST ( CuddDd , OperatorTest ) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
EXPECT_TRUE ( manager - > getAddZero ( ) = = manager - > getAddZero ( ) ) ;
EXPECT_FALSE ( manager - > getAddZero ( ) = = manager - > getAddOne ( ) ) ;
EXPECT_TRUE ( manager - > template getAddZero < double > ( ) = = manager - > template getAddZero < double > ( ) ) ;
EXPECT_FALSE ( manager - > template getAddZero < double > ( ) = = manager - > template getAddOne < double > ( ) ) ;
EXPECT_FALSE ( manager - > getAddZero ( ) ! = manager - > getAddZero ( ) ) ;
EXPECT_TRUE ( manager - > getAddZero ( ) ! = manager - > getAddOne ( ) ) ;
EXPECT_FALSE ( manager - > template getAddZero < double > ( ) ! = manager - > template getAddZero < double > ( ) ) ;
EXPECT_TRUE ( manager - > template getAddZero < double > ( ) ! = manager - > template getAddOne < double > ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd1 = manager - > getAddOne ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd2 = manager - > getAddOne ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd3 = dd1 + dd2 ;
EXPECT_TRUE ( dd3 = = manager - > getConstant ( 2 ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd1 = manager - > template getAddOne < double > ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd2 = manager - > template getAddOne < double > ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd3 = dd1 + dd2 ;
EXPECT_TRUE ( dd3 = = manager - > template getConstant < double > ( 2 ) ) ;
dd3 + = manager - > getAddZero ( ) ;
EXPECT_TRUE ( dd3 = = manager - > getConstant ( 2 ) ) ;
dd3 + = manager - > template getAddZero < double > ( ) ;
EXPECT_TRUE ( dd3 = = manager - > template getConstant < double > ( 2 ) ) ;
dd3 = dd1 * manager - > getConstant ( 3 ) ;
EXPECT_TRUE ( dd3 = = manager - > getConstant ( 3 ) ) ;
dd3 = dd1 * manager - > template getConstant < double > ( 3 ) ;
EXPECT_TRUE ( dd3 = = manager - > template getConstant < double > ( 3 ) ) ;
dd3 * = manager - > getConstant ( 2 ) ;
EXPECT_TRUE ( dd3 = = manager - > getConstant ( 6 ) ) ;
dd3 * = manager - > template getConstant < double > ( 2 ) ;
EXPECT_TRUE ( dd3 = = manager - > template getConstant < double > ( 6 ) ) ;
dd3 = dd1 - dd2 ;
EXPECT_TRUE ( dd3 . isZero ( ) ) ;
dd3 - = manager - > getConstant ( - 2 ) ;
EXPECT_TRUE ( dd3 = = manager - > getConstant ( 2 ) ) ;
dd3 - = manager - > template getConstant < double > ( - 2 ) ;
EXPECT_TRUE ( dd3 = = manager - > template getConstant < double > ( 2 ) ) ;
dd3 / = manager - > getConstant ( 2 ) ;
dd3 / = manager - > template getConstant < double > ( 2 ) ;
EXPECT_TRUE ( dd3 . isOne ( ) ) ;
dd3 = ! dd3 ;
@ -142,13 +142,13 @@ TEST(CuddDd, OperatorTest) {
dd3 = dd1 | | dd2 ;
EXPECT_TRUE ( dd3 . isOne ( ) ) ;
dd1 = manager - > getIdentity ( x . first ) ;
dd2 = manager - > getConstant ( 5 ) ;
dd1 = manager - > template getIdentity < double > ( x . first ) ;
dd2 = manager - > template getConstant < double > ( 5 ) ;
dd3 = dd1 . equals ( dd2 ) ;
EXPECT_EQ ( 1ul , dd3 . getNonZeroCount ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd4 = dd1 . notEquals ( dd2 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd4 = dd1 . notEquals ( dd2 ) ;
EXPECT_TRUE ( dd4 . toBdd ( ) = = ! dd3 . toBdd ( ) ) ;
dd3 = dd1 . less ( dd2 ) ;
@ -163,22 +163,22 @@ TEST(CuddDd, OperatorTest) {
dd3 = dd1 . greaterOrEqual ( dd2 ) ;
EXPECT_EQ ( 5ul , dd3 . getNonZeroCount ( ) ) ;
dd3 = ( manager - > getEncoding ( x . first , 2 ) . toAdd ( ) ) . ite ( dd2 , dd1 ) ;
dd3 = ( manager - > getEncoding ( x . first , 2 ) . template toAdd < double > ( ) ) . ite ( dd2 , dd1 ) ;
dd4 = dd3 . less ( dd2 ) ;
EXPECT_EQ ( 10ul , dd4 . getNonZeroCount ( ) ) ;
dd4 = dd3 . minimum ( dd1 ) ;
dd4 * = manager - > getEncoding ( x . first , 2 ) . toAdd ( ) ;
dd4 * = manager - > getEncoding ( x . first , 2 ) . template toAdd < double > ( ) ;
dd4 = dd4 . sumAbstract ( { x . first } ) ;
EXPECT_EQ ( 2 , dd4 . getValue ( ) ) ;
dd4 = dd3 . maximum ( dd1 ) ;
dd4 * = manager - > getEncoding ( x . first , 2 ) . toAdd ( ) ;
dd4 * = manager - > getEncoding ( x . first , 2 ) . template toAdd < double > ( ) ;
dd4 = dd4 . sumAbstract ( { x . first } ) ;
EXPECT_EQ ( 5 , dd4 . getValue ( ) ) ;
dd1 = manager - > getConstant ( 0.01 ) ;
dd2 = manager - > getConstant ( 0.01 + 1e-6 ) ;
dd1 = manager - > template getConstant < double > ( 0.01 ) ;
dd2 = manager - > template getConstant < double > ( 0.01 + 1e-6 ) ;
EXPECT_TRUE ( dd1 . equalModuloPrecision ( dd2 , 1e-6 , false ) ) ;
EXPECT_FALSE ( dd1 . equalModuloPrecision ( dd2 , 1e-6 ) ) ;
}
@ -186,43 +186,43 @@ TEST(CuddDd, OperatorTest) {
TEST ( CuddDd , AbstractionTest ) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd1 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd2 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd3 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd1 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd2 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd3 ;
dd1 = manager - > getIdentity ( x . first ) ;
dd2 = manager - > getConstant ( 5 ) ;
dd1 = manager - > template getIdentity < double > ( x . first ) ;
dd2 = manager - > template getConstant < double > ( 5 ) ;
dd3 = dd1 . equals ( dd2 ) ;
storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > dd3Bdd = dd3 . toBdd ( ) ;
EXPECT_EQ ( 1ul , dd3Bdd . getNonZeroCount ( ) ) ;
ASSERT_THROW ( dd3Bdd = dd3Bdd . existsAbstract ( { x . second } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd3Bdd = dd3Bdd . existsAbstract ( { x . first } ) ) ;
EXPECT_EQ ( 1ul , dd3Bdd . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 1 , dd3Bdd . toAdd ( ) . getMax ( ) ) ;
EXPECT_EQ ( 1 , dd3Bdd . template toAdd < double > ( ) . getMax ( ) ) ;
dd3 = dd1 . equals ( dd2 ) ;
dd3 * = manager - > getConstant ( 3 ) ;
dd3 * = manager - > template getConstant < double > ( 3 ) ;
EXPECT_EQ ( 1ul , dd3 . getNonZeroCount ( ) ) ;
ASSERT_THROW ( dd3Bdd = dd3 . toBdd ( ) . existsAbstract ( { x . second } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd3Bdd = dd3 . toBdd ( ) . existsAbstract ( { x . first } ) ) ;
EXPECT_TRUE ( dd3Bdd . isOne ( ) ) ;
dd3 = dd1 . equals ( dd2 ) ;
dd3 * = manager - > getConstant ( 3 ) ;
dd3 * = manager - > template getConstant < double > ( 3 ) ;
ASSERT_THROW ( dd3 = dd3 . sumAbstract ( { x . second } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd3 = dd3 . sumAbstract ( { x . first } ) ) ;
EXPECT_EQ ( 1ul , dd3 . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 3 , dd3 . getMax ( ) ) ;
dd3 = dd1 . equals ( dd2 ) ;
dd3 * = manager - > getConstant ( 3 ) ;
dd3 * = manager - > template getConstant < double > ( 3 ) ;
ASSERT_THROW ( dd3 = dd3 . minAbstract ( { x . second } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd3 = dd3 . minAbstract ( { x . first } ) ) ;
EXPECT_EQ ( 0ul , dd3 . getNonZeroCount ( ) ) ;
EXPECT_EQ ( 0 , dd3 . getMax ( ) ) ;
dd3 = dd1 . equals ( dd2 ) ;
dd3 * = manager - > getConstant ( 3 ) ;
dd3 * = manager - > template getConstant < double > ( 3 ) ;
ASSERT_THROW ( dd3 = dd3 . maxAbstract ( { x . second } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd3 = dd3 . maxAbstract ( { x . first } ) ) ;
EXPECT_EQ ( 1ul , dd3 . getNonZeroCount ( ) ) ;
@ -234,34 +234,34 @@ TEST(CuddDd, SwapTest) {
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > z = manager - > addMetaVariable ( " z " , 2 , 8 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd1 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd2 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd1 ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd2 ;
dd1 = manager - > getIdentity ( x . first ) ;
dd1 = manager - > template getIdentity < double > ( x . first ) ;
ASSERT_THROW ( dd1 = dd1 . swapVariables ( { std : : make_pair ( x . first , z . first ) } ) , storm : : exceptions : : InvalidArgumentException ) ;
ASSERT_NO_THROW ( dd1 = dd1 . swapVariables ( { std : : make_pair ( x . first , x . second ) } ) ) ;
EXPECT_TRUE ( dd1 = = manager - > getIdentity ( x . second ) ) ;
EXPECT_TRUE ( dd1 = = manager - > template getIdentity < double > ( x . second ) ) ;
}
TEST ( CuddDd , MultiplyMatrixTest ) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd1 = manager - > getIdentity ( x . first ) . equals ( manager - > getIdentity ( x . second ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd2 = manager - > getRange ( x . second ) . toAdd ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd3 ;
dd1 * = manager - > getConstant ( 2 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd1 = manager - > template getIdentity < double > ( x . first ) . equals ( manager - > template getIdentity < double > ( x . second ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd2 = manager - > getRange ( x . second ) . template toAdd < double > ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd3 ;
dd1 * = manager - > template getConstant < double > ( 2 ) ;
ASSERT_NO_THROW ( dd3 = dd1 . multiplyMatrix ( dd2 , { x . second } ) ) ;
ASSERT_NO_THROW ( dd3 = dd3 . swapVariables ( { std : : make_pair ( x . first , x . second ) } ) ) ;
EXPECT_TRUE ( dd3 = = dd2 * manager - > getConstant ( 2 ) ) ;
EXPECT_TRUE ( dd3 = = dd2 * manager - > template getConstant < double > ( 2 ) ) ;
}
TEST ( CuddDd , GetSetValueTest ) {
std : : shared_ptr < storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > > manager ( new storm : : dd : : DdManager < storm : : dd : : DdType : : CUDD > ( ) ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd1 = manager - > getAddOne ( ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd1 = manager - > template getAddOne < double > ( ) ;
ASSERT_NO_THROW ( dd1 . setValue ( x . first , 4 , 2 ) ) ;
EXPECT_EQ ( 2ul , dd1 . getLeafCount ( ) ) ;
@ -279,10 +279,10 @@ TEST(CuddDd, ForwardIteratorTest) {
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > y = manager - > addMetaVariable ( " y " , 0 , 3 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd ;
ASSERT_NO_THROW ( dd = manager - > getRange ( x . first ) . toAdd ( ) ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd ;
ASSERT_NO_THROW ( dd = manager - > getRange ( x . first ) . template toAdd < double > ( ) ) ;
storm : : dd : : DdForwar dIterator< storm : : dd : : DdType : : CUDD > it , ite ;
storm : : dd : : Ad dIterator< storm : : dd : : DdType : : CUDD , double > it , ite ;
ASSERT_NO_THROW ( it = dd . begin ( ) ) ;
ASSERT_NO_THROW ( ite = dd . end ( ) ) ;
std : : pair < storm : : expressions : : SimpleValuation , double > valuationValuePair ;
@ -294,8 +294,8 @@ TEST(CuddDd, ForwardIteratorTest) {
}
EXPECT_EQ ( 9ul , numberOfValuations ) ;
dd = manager - > getRange ( x . first ) . toAdd ( ) ;
dd = dd . ite ( manager - > getAddOne ( ) , manager - > getAddOne ( ) ) ;
dd = manager - > getRange ( x . first ) . template toAdd < double > ( ) ;
dd = dd . ite ( manager - > template getAddOne < double > ( ) , manager - > template getAddOne < double > ( ) ) ;
ASSERT_NO_THROW ( it = dd . begin ( ) ) ;
ASSERT_NO_THROW ( ite = dd . end ( ) ) ;
numberOfValuations = 0 ;
@ -322,28 +322,28 @@ TEST(CuddDd, AddOddTest) {
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > a = manager - > addMetaVariable ( " a " ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd = manager - > getIdentity ( x . first ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd = manager - > template getIdentity < double > ( x . first ) ;
storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > odd ;
ASSERT_NO_THROW ( odd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( dd ) ) ;
EXPECT_EQ ( 9ul , odd . getTotalOffset ( ) ) ;
EXPECT_EQ ( 12ul , odd . getNodeCount ( ) ) ;
std : : vector < double > ddAsVector ;
ASSERT_NO_THROW ( ddAsVector = dd . toVector < double > ( ) ) ;
ASSERT_NO_THROW ( ddAsVector = dd . toVector ( ) ) ;
EXPECT_EQ ( 9ul , ddAsVector . size ( ) ) ;
for ( uint_fast64_t i = 0 ; i < ddAsVector . size ( ) ; + + i ) {
EXPECT_TRUE ( i + 1 = = ddAsVector [ i ] ) ;
}
// Create a non-trivial matrix.
dd = manager - > getIdentity ( x . first ) . equals ( manager - > getIdentity ( x . second ) ) * manager - > getRange ( x . first ) . toAdd ( ) ;
dd + = manager - > getEncoding ( x . first , 1 ) . toAdd ( ) * manager - > getRange ( x . second ) . toAdd ( ) + manager - > getEncoding ( x . second , 1 ) . toAdd ( ) * manager - > getRange ( x . first ) . toAdd ( ) ;
dd = manager - > template getIdentity < double > ( x . first ) . equals ( manager - > template getIdentity < double > ( x . second ) ) * manager - > getRange ( x . first ) . template toAdd < double > ( ) ;
dd + = manager - > getEncoding ( x . first , 1 ) . template toAdd < double > ( ) * manager - > getRange ( x . second ) . template toAdd < double > ( ) + manager - > getEncoding ( x . second , 1 ) . template toAdd < double > ( ) * manager - > getRange ( x . first ) . template toAdd < double > ( ) ;
// Create the ODDs.
storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > rowOdd ;
ASSERT_NO_THROW ( rowOdd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( manager - > getRange ( x . first ) . toAdd ( ) ) ) ;
ASSERT_NO_THROW ( rowOdd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( manager - > getRange ( x . first ) . template toAdd < double > ( ) ) ) ;
storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > columnOdd ;
ASSERT_NO_THROW ( columnOdd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( manager - > getRange ( x . second ) . toAdd ( ) ) ) ;
ASSERT_NO_THROW ( columnOdd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( manager - > getRange ( x . second ) . template toAdd < double > ( ) ) ) ;
// Try to translate the matrix.
storm : : storage : : SparseMatrix < double > matrix ;
@ -353,7 +353,7 @@ TEST(CuddDd, AddOddTest) {
EXPECT_EQ ( 9ul , matrix . getColumnCount ( ) ) ;
EXPECT_EQ ( 25ul , matrix . getNonzeroEntryCount ( ) ) ;
dd = manager - > getRange ( x . first ) . toAdd ( ) * manager - > getRange ( x . second ) . toAdd ( ) * manager - > getEncoding ( a . first , 0 ) . toAdd ( ) . ite ( dd , dd + manager - > getConstant ( 1 ) ) ;
dd = manager - > getRange ( x . first ) . template toAdd < double > ( ) * manager - > getRange ( x . second ) . template toAdd < double > ( ) * manager - > getEncoding ( a . first , 0 ) . template toAdd < double > ( ) . ite ( dd , dd + manager - > template getConstant < double > ( 1 ) ) ;
ASSERT_NO_THROW ( matrix = dd . toMatrix ( { a . first } , rowOdd , columnOdd ) ) ;
EXPECT_EQ ( 18ul , matrix . getRowCount ( ) ) ;
EXPECT_EQ ( 9ul , matrix . getRowGroupCount ( ) ) ;
@ -366,25 +366,24 @@ TEST(CuddDd, BddOddTest) {
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > a = manager - > addMetaVariable ( " a " ) ;
std : : pair < storm : : expressions : : Variable , storm : : expressions : : Variable > x = manager - > addMetaVariable ( " x " , 1 , 9 ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > dd = manager - > getIdentity ( x . first ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > dd = manager - > template getIdentity < double > ( x . first ) ;
storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > odd ;
ASSERT_NO_THROW ( odd = storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > ( dd ) ) ;
EXPECT_EQ ( 9ul , odd . getTotalOffset ( ) ) ;
EXPECT_EQ ( 12ul , odd . getNodeCount ( ) ) ;
std : : vector < double > ddAsVector ;
ASSERT_NO_THROW ( ddAsVector = dd . toVector < double > ( ) ) ;
ASSERT_NO_THROW ( ddAsVector = dd . toVector ( ) ) ;
EXPECT_EQ ( 9ul , ddAsVector . size ( ) ) ;
for ( uint_fast64_t i = 0 ; i < ddAsVector . size ( ) ; + + i ) {
EXPECT_TRUE ( i + 1 = = ddAsVector [ i ] ) ;
}
storm : : dd : : Add < storm : : dd : : DdType : : CUDD > vectorAdd ( manager , ddAsVector , odd , { x . first } ) ;
EXPECT_EQ ( dd , vectorAdd ) ;
storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > vectorAdd = storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > : : fromVector ( manager , ddAsVector , odd , { x . first } ) ;
// Create a non-trivial matrix.
dd = manager - > getIdentity ( x . first ) . equals ( manager - > getIdentity ( x . second ) ) * manager - > getRange ( x . first ) . toAdd ( ) ;
dd + = manager - > getEncoding ( x . first , 1 ) . toAdd ( ) * manager - > getRange ( x . second ) . toAdd ( ) + manager - > getEncoding ( x . second , 1 ) . toAdd ( ) * manager - > getRange ( x . first ) . toAdd ( ) ;
dd = manager - > template getIdentity < double > ( x . first ) . equals ( manager - > template getIdentity < double > ( x . second ) ) * manager - > getRange ( x . first ) . template toAdd < double > ( ) ;
dd + = manager - > getEncoding ( x . first , 1 ) . template toAdd < double > ( ) * manager - > getRange ( x . second ) . template toAdd < double > ( ) + manager - > getEncoding ( x . second , 1 ) . template toAdd < double > ( ) * manager - > getRange ( x . first ) . template toAdd < double > ( ) ;
// Create the ODDs.
storm : : dd : : Odd < storm : : dd : : DdType : : CUDD > rowOdd ;
@ -400,7 +399,7 @@ TEST(CuddDd, BddOddTest) {
EXPECT_EQ ( 9ul , matrix . getColumnCount ( ) ) ;
EXPECT_EQ ( 25ul , matrix . getNonzeroEntryCount ( ) ) ;
dd = manager - > getRange ( x . first ) . toAdd ( ) * manager - > getRange ( x . second ) . toAdd ( ) * manager - > getEncoding ( a . first , 0 ) . toAdd ( ) . ite ( dd , dd + manager - > getConstant ( 1 ) ) ;
dd = manager - > getRange ( x . first ) . template toAdd < double > ( ) * manager - > getRange ( x . second ) . template toAdd < double > ( ) * manager - > getEncoding ( a . first , 0 ) . template toAdd < double > ( ) . ite ( dd , dd + manager - > template getConstant < double > ( 1 ) ) ;
ASSERT_NO_THROW ( matrix = dd . toMatrix ( { a . first } , rowOdd , columnOdd ) ) ;
EXPECT_EQ ( 18ul , matrix . getRowCount ( ) ) ;
EXPECT_EQ ( 9ul , matrix . getRowGroupCount ( ) ) ;