You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							111 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							111 lines
						
					
					
						
							3.7 KiB
						
					
					
				
								#include "gtest/gtest.h"
							 | 
						|
								
							 | 
						|
								#include "gmm/gmm_matrix.h"
							 | 
						|
								#include "src/adapters/GmmxxAdapter.h"
							 | 
						|
								#include "src/exceptions/InvalidArgumentException.h"
							 | 
						|
								#include "boost/integer/integer_mask.hpp"
							 | 
						|
								
							 | 
						|
								#define STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE 5
							 | 
						|
								#define STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE 5
							 | 
						|
								
							 | 
						|
								double getValue(gmm::csr_matrix<double> const& gmmSparseMatrix, uint_fast64_t row, uint_fast64_t col) {
							 | 
						|
									uint_fast64_t rowStart = gmmSparseMatrix.jc.at(row);
							 | 
						|
									uint_fast64_t rowEnd = gmmSparseMatrix.jc.at(row + 1);
							 | 
						|
									while (rowStart < rowEnd) {
							 | 
						|
										if (gmmSparseMatrix.ir.at(rowStart) == col) {
							 | 
						|
											return gmmSparseMatrix.pr.at(rowStart);
							 | 
						|
										}
							 | 
						|
										if (gmmSparseMatrix.ir.at(rowStart) > col) {
							 | 
						|
											break;
							 | 
						|
										}
							 | 
						|
										++rowStart;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return 0.0;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								TEST(GmmAdapterTest, SimpleDenseSquareCopy) {
							 | 
						|
									// 5 rows
							 | 
						|
									storm::storage::SparseMatrix<double> sm(STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE);
							 | 
						|
									
							 | 
						|
									double values[STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE];
							 | 
						|
									sm.initialize(STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE);
							 | 
						|
								
							 | 
						|
									int row = 0;
							 | 
						|
									int col = 0;
							 | 
						|
									for (int i = 0; i < STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE; ++i) {
							 | 
						|
										values[i] = static_cast<double>(i + 1);
							 | 
						|
										
							 | 
						|
										sm.addNextValue(row, col, values[i]);
							 | 
						|
										++col;
							 | 
						|
										if (col == STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE) {
							 | 
						|
											++row;
							 | 
						|
											col = 0;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									sm.finalize();
							 | 
						|
								
							 | 
						|
									auto gsm = storm::adapters::GmmxxAdapter::toGmmxxSparseMatrix(sm);
							 | 
						|
								
							 | 
						|
									ASSERT_EQ(gsm->nrows(), STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE);
							 | 
						|
									ASSERT_EQ(gsm->ncols(), STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE);
							 | 
						|
									ASSERT_EQ(gmm::nnz(*gsm), STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE);
							 | 
						|
									row = 0;
							 | 
						|
									col = 0;
							 | 
						|
									for (int i = 0; i < STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE; ++i) {
							 | 
						|
										ASSERT_EQ(values[i], getValue(*gsm, row, col));
							 | 
						|
										++col;
							 | 
						|
										if (col == STORM_GMMADAPTERTEST_SIMPLEDENSESQUARECOPY_SIZE) {
							 | 
						|
											++row;
							 | 
						|
											col = 0;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								TEST(GmmAdapterTest, SimpleSparseSquareCopy) {
							 | 
						|
									// 5 rows
							 | 
						|
									storm::storage::SparseMatrix<double> sm(STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE);
							 | 
						|
									
							 | 
						|
									double values[STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE];
							 | 
						|
									sm.initialize((STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE + 1) / 2);
							 | 
						|
								
							 | 
						|
									int row = 0;
							 | 
						|
									int col = 0;
							 | 
						|
								
							 | 
						|
									bool everySecondElement = true;
							 | 
						|
								
							 | 
						|
									for (int i = 0; i < STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE; ++i) {
							 | 
						|
										values[i] = static_cast<double>(i + 1);
							 | 
						|
										if (everySecondElement) {
							 | 
						|
											sm.addNextValue(row, col, values[i]);
							 | 
						|
										}
							 | 
						|
										everySecondElement = !everySecondElement;
							 | 
						|
										++col;
							 | 
						|
										if (col == STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE) {
							 | 
						|
											++row;
							 | 
						|
											col = 0;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									sm.finalize();
							 | 
						|
								
							 | 
						|
									auto gsm = storm::adapters::GmmxxAdapter::toGmmxxSparseMatrix(sm);
							 | 
						|
								
							 | 
						|
									ASSERT_EQ(gsm->nrows(), STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE);
							 | 
						|
									ASSERT_EQ(gsm->ncols(), STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE);
							 | 
						|
									ASSERT_EQ(gmm::nnz(*gsm), (STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE + 1) / 2);
							 | 
						|
								
							 | 
						|
									row = 0;
							 | 
						|
									col = 0;
							 | 
						|
									everySecondElement = true;
							 | 
						|
									for (int i = 0; i < STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE * STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE; ++i) {
							 | 
						|
										if (everySecondElement) {
							 | 
						|
											ASSERT_EQ(values[i], getValue(*gsm, row, col));
							 | 
						|
										}
							 | 
						|
										everySecondElement = !everySecondElement;
							 | 
						|
										++col;
							 | 
						|
										if (col == STORM_GMMADAPTERTEST_SIMPLESPARSESQUARECOPY_SIZE) {
							 | 
						|
											++row;
							 | 
						|
											col = 0;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 |