Skip to content

Commit

Permalink
tests: moved standard operations into functions
Browse files Browse the repository at this point in the history
  • Loading branch information
uestla committed Feb 23, 2018
1 parent 18e40c5 commit 5eff7db
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 32 deletions.
8 changes: 1 addition & 7 deletions tests/cases/addition.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,7 @@ void testAddition(void)
SparseMatrixMock<int> sparseMatrixB = SparseMatrixMock<int>::fromVectors(classicMatrixB);

// calculate result manually
vector<vector<int> > manualResult(rows, vector<int>(cols, 0));

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
manualResult[i][j] += classicMatrixA[i][j] + classicMatrixB[i][j];
}
}
vector<vector<int> > manualResult = addMatrices(classicMatrixA, classicMatrixB);

// method
assertEquals<SparseMatrix<int>, vector<vector<int> > >(
Expand Down
20 changes: 2 additions & 18 deletions tests/cases/multiplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,7 @@ void testVectorMultiplication(void)
SparseMatrixMock<int> sparseMatrix = SparseMatrixMock<int>::fromVectors(classicMatrix);

// calculate result manually
vector<int> manualResult(rows, 0);

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
manualResult[i] += classicMatrix[i][j] * vec[j];
}
}
vector<int> manualResult = multiplyMatrixByVector(classicMatrix, vec);

// method
assertEquals<vector<int> >(manualResult, sparseMatrix.multiply(vec), "Incorrect vector multiplication");
Expand Down Expand Up @@ -92,17 +86,7 @@ void testMatricesMultiplication(void)
SparseMatrixMock<int> sparseMatrixB = SparseMatrixMock<int>::fromVectors(classicMatrixB);

// calculate result manually
vector<vector<int> > manualResult(rowsA, vector<int>(colsB, 0));

for (int i = 0; i < rowsA; i++) {
for (int j = 0; j < colsB; j++) {
manualResult[i][j] = 0;

for (int k = 0; k < colsArowsB; k++) { // rows in B
manualResult[i][j] += classicMatrixA[i][k] * classicMatrixB[k][j];
}
}
}
vector<vector<int> > manualResult = multiplyMatrices(classicMatrixA, classicMatrixB);

// method
assertEquals<SparseMatrix<int>, vector<vector<int> > >(
Expand Down
8 changes: 1 addition & 7 deletions tests/cases/subtraction.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,7 @@ void testSubtraction(void)
SparseMatrixMock<int> sparseMatrixB = SparseMatrixMock<int>::fromVectors(classicMatrixB);

// calculate result manually
vector<vector<int> > manualResult(rows, vector<int>(cols, 0));

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
manualResult[i][j] += classicMatrixA[i][j] - classicMatrixB[i][j];
}
}
vector<vector<int> > manualResult = subtractMatrices(classicMatrixA, classicMatrixB);

// method
assertEquals<SparseMatrix<int>, vector<vector<int> > >(
Expand Down
79 changes: 79 additions & 0 deletions tests/inc/helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,85 @@
}


// === STANDARD OPERATIONS =========================================

template<typename T>
vector<vector<T> > addMatrices(const vector<vector<T> > & a, const vector<vector<T> > & b)
{
int rows = a.size();
int cols = a.front().size();

vector<vector<T> > result(rows, vector<int>(cols, 0));

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = a[i][j] + b[i][j];
}
}

return result;
}


template<typename T>
vector<vector<T> > subtractMatrices(const vector<vector<T> > & a, const vector<vector<T> > & b)
{
int rows = a.size();
int cols = a.front().size();

vector<vector<T> > result(rows, vector<int>(cols, 0));

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = a[i][j] - b[i][j];
}
}

return result;
}


template<typename T>
vector<T> multiplyMatrixByVector(const vector<vector<T> > & m, const vector<T> & v)
{
int rows = m.size();
int cols = v.size();

vector<T> result(rows, 0);

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i] += m[i][j] * v[j];
}
}

return result;
}


template<typename T>
vector<vector<T> > multiplyMatrices(const vector<vector<T> > & a, const vector<vector<T> > & b)
{
int rowsA = a.size();
int colsA = a.front().size();
int colsB = b.front().size();

vector<vector<T> > result(rowsA, vector<int>(colsB, 0));

for (int i = 0; i < rowsA; i++) {
for (int j = 0; j < colsB; j++) {
result[i][j] = 0;

for (int k = 0; k < colsA; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}

return result;
}


// === OUTPUT HELPERS =========================================

template<typename T>
Expand Down

0 comments on commit 5eff7db

Please sign in to comment.