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;
|
|
}
|
|
}
|
|
}
|