diff --git a/src/numerics/DenseMatrix.cpp b/src/numerics/DenseMatrix.cpp index 53b84c34cb..046f9a2919 100644 --- a/src/numerics/DenseMatrix.cpp +++ b/src/numerics/DenseMatrix.cpp @@ -191,7 +191,7 @@ void multiply(const DenseMatrix& A, const double* const b, double* const prod) void increment(const DenseMatrix& A, const double* b, double* prod) { ct_dgemv(ctlapack::ColMajor, ctlapack::NoTranspose, - static_cast(A.nRows()), static_cast(A.nRows()), 1.0, + static_cast(A.nRows()), static_cast(A.nColumns()), 1.0, A.ptrColumn(0), static_cast(A.nRows()), b, 1, 1.0, prod, 1); } diff --git a/test/general/test_matrices.cpp b/test/general/test_matrices.cpp index b4caa747c2..0d3fd37268 100644 --- a/test/general/test_matrices.cpp +++ b/test/general/test_matrices.cpp @@ -179,3 +179,24 @@ TEST_F(DenseMatrixTest, matrix_times_matrix) A2.mult(A3, c); EXPECT_DOUBLE_EQ(4014, special_sum(c)); } + +TEST_F(DenseMatrixTest, increment) +{ + vector_fp c(b1.size(), 3.0); + increment(A1, x4.data(), c.data()); + for (size_t i = 0; i < 4; i++) { + EXPECT_DOUBLE_EQ(3.0 + b1[i], c[i]); + } + + c.assign(b2.size(), 3.0); + increment(A2, x3.data(), c.data()); + for (size_t i = 0; i < 4; i++) { + EXPECT_DOUBLE_EQ(3.0 + b2[i], c[i]); + } + + c.assign(b3.size(), 3.0); + increment(A3, x4.data(), c.data()); + for (size_t i = 0; i < 3; i++) { + EXPECT_DOUBLE_EQ(3.0 + b3[i], c[i]); + } +}