|  | @ -22,7 +22,30 @@ TEST(SparseMatrix, Iteration) { | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | TEST(SparseMatrix, Multiplication) { |  |  |  | 
		
	
		
			
				|  |  |  |  |  | TEST(SparseMatrix, SparseMultiplication) { | 
		
	
		
			
				|  |  |  |  |  |     storm::storage::SparseMatrixBuilder<double> matrixBuilder; | 
		
	
		
			
				|  |  |  |  |  |     for (uint_fast64_t row = 0; row < 100000; ++row) { | 
		
	
		
			
				|  |  |  |  |  |         ASSERT_NO_THROW(matrixBuilder.addNextValue(row, 0, storm::utility::constantOne<double>())); | 
		
	
		
			
				|  |  |  |  |  |         ASSERT_NO_THROW(matrixBuilder.addNextValue(row, 1, storm::utility::constantOne<double>())); | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     storm::storage::SparseMatrix<double> matrix; | 
		
	
		
			
				|  |  |  |  |  |     ASSERT_NO_THROW(matrix = matrixBuilder.build()); | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     std::vector<double> x(matrix.getColumnCount(), 1.0); | 
		
	
		
			
				|  |  |  |  |  |     std::vector<double> result(matrix.getRowCount()); | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     for (uint_fast64_t i = 0; i < 30000; ++i) { | 
		
	
		
			
				|  |  |  |  |  |         matrix.multiplyWithVector(x, result); | 
		
	
		
			
				|  |  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |  |         // The following can never be true, but prevents the compiler from optimizing away the loop.
 | 
		
	
		
			
				|  |  |  |  |  |         if (result.size() > matrix.getRowCount()) { | 
		
	
		
			
				|  |  |  |  |  |             ASSERT_TRUE(false); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | TEST(SparseMatrix, HalfSparseMultiplication) { | 
		
	
		
			
				|  |  |     storm::storage::SparseMatrixBuilder<double> matrixBuilder; |  |  |     storm::storage::SparseMatrixBuilder<double> matrixBuilder; | 
		
	
		
			
				|  |  |     for (uint_fast64_t row = 0; row < 2000; ++row) { |  |  |     for (uint_fast64_t row = 0; row < 2000; ++row) { | 
		
	
		
			
				|  |  |         for (uint_fast64_t column = 0; column < row; ++column) { |  |  |         for (uint_fast64_t column = 0; column < row; ++column) { | 
		
	
	
		
			
				|  | @ -39,6 +62,31 @@ TEST(SparseMatrix, Multiplication) { | 
		
	
		
			
				|  |  |     for (uint_fast64_t i = 0; i < 5000; ++i) { |  |  |     for (uint_fast64_t i = 0; i < 5000; ++i) { | 
		
	
		
			
				|  |  |         matrix.multiplyWithVector(x, result); |  |  |         matrix.multiplyWithVector(x, result); | 
		
	
		
			
				|  |  |          |  |  |          | 
		
	
		
			
				|  |  |  |  |  |         // The following can never be true, but prevents the compiler from optimizing away the loop.
 | 
		
	
		
			
				|  |  |  |  |  |         if (result.size() > matrix.getRowCount()) { | 
		
	
		
			
				|  |  |  |  |  |             ASSERT_TRUE(false); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | TEST(SparseMatrix, DenseMultiplication) { | 
		
	
		
			
				|  |  |  |  |  |     storm::storage::SparseMatrixBuilder<double> matrixBuilder; | 
		
	
		
			
				|  |  |  |  |  |     uint_fast64_t const size = 2000; | 
		
	
		
			
				|  |  |  |  |  |     for (uint_fast64_t row = 0; row < size; ++row) { | 
		
	
		
			
				|  |  |  |  |  |         for (uint_fast64_t column = 0; column < size; ++column) { | 
		
	
		
			
				|  |  |  |  |  |             ASSERT_NO_THROW(matrixBuilder.addNextValue(row, column, storm::utility::constantOne<double>())); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     storm::storage::SparseMatrix<double> matrix; | 
		
	
		
			
				|  |  |  |  |  |     ASSERT_NO_THROW(matrix = matrixBuilder.build()); | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     std::vector<double> x(matrix.getColumnCount(), 1.0); | 
		
	
		
			
				|  |  |  |  |  |     std::vector<double> result(matrix.getRowCount()); | 
		
	
		
			
				|  |  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |  |     for (uint_fast64_t i = 0; i < 1000; ++i) { | 
		
	
		
			
				|  |  |  |  |  |         matrix.multiplyWithVector(x, result); | 
		
	
		
			
				|  |  |  |  |  |          | 
		
	
		
			
				|  |  |         // The following can never be true, but prevents the compiler from optimizing away the loop.
 |  |  |         // The following can never be true, but prevents the compiler from optimizing away the loop.
 | 
		
	
		
			
				|  |  |         if (result.size() > matrix.getRowCount()) { |  |  |         if (result.size() > matrix.getRowCount()) { | 
		
	
		
			
				|  |  |             ASSERT_TRUE(false); |  |  |             ASSERT_TRUE(false); | 
		
	
	
		
			
				|  | 
 |