diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4a58aa8f7..5f53d475e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -122,6 +122,6 @@ EI_ADD_TEST(geometry) EI_ADD_TEST(hyperplane) EI_ADD_TEST(parametrizedline) EI_ADD_TEST(regression) -EI_ADD_TEST(sparse) +EI_ADD_TEST(sparse ${EI_OFLAG}) ENDIF(BUILD_TESTS) diff --git a/test/sparse.cpp b/test/sparse.cpp index 3095297ce..040f889cb 100644 --- a/test/sparse.cpp +++ b/test/sparse.cpp @@ -155,7 +155,7 @@ template void sparse(int rows, int cols) // } // } // VERIFY_IS_APPROX(m, refMat); - + // random setter { m.setZero(); @@ -172,6 +172,32 @@ template void sparse(int rows, int cols) } VERIFY_IS_APPROX(m, refMat); + // test transpose + { + DenseMatrix refMat2 = DenseMatrix::Zero(rows, rows); + SparseMatrix m2(rows, rows); + initSparse(density, refMat2, m2); + VERIFY_IS_APPROX(m2.transpose().eval(), refMat2.transpose().eval()); + VERIFY_IS_APPROX(m2.transpose(), refMat2.transpose()); + } + + // test matrix product + { + DenseMatrix refMat2 = DenseMatrix::Zero(rows, rows); + DenseMatrix refMat3 = DenseMatrix::Zero(rows, rows); + DenseMatrix refMat4 = DenseMatrix::Zero(rows, rows); + SparseMatrix m2(rows, rows); + SparseMatrix m3(rows, rows); + SparseMatrix m4(rows, rows); + initSparse(density, refMat2, m2); + initSparse(density, refMat3, m3); + initSparse(density, refMat4, m4); + VERIFY_IS_APPROX(m4=m2*m3, refMat4=refMat2*refMat3); + VERIFY_IS_APPROX(m4=m2.transpose()*m3, refMat4=refMat2.transpose()*refMat3); + VERIFY_IS_APPROX(m4=m2.transpose()*m3.transpose(), refMat4=refMat2.transpose()*refMat3.transpose()); + VERIFY_IS_APPROX(m4=m2*m3.transpose(), refMat4=refMat2*refMat3.transpose()); + } + // test triangular solver { DenseVector vec2 = vec1, vec3 = vec1; @@ -187,7 +213,7 @@ template void sparse(int rows, int cols) initSparse(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular, &zeroCoords, &nonzeroCoords); VERIFY_IS_APPROX(refMat2.template marked().solveTriangular(vec2), m2.template marked().solveTriangular(vec3)); - + // TODO test row major }