aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-10-04 14:25:00 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-10-04 14:25:00 +0000
commita930dfb2295a62ab42bbfb3319ad1732c0d4f7f6 (patch)
treeef04cb821066cbb68f85b04ed059a6404fe008b5 /test
parent98d3c0a413b865b93ceea858f673767826323783 (diff)
extend sparse unit tests with transpose and matrix product
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt2
-rw-r--r--test/sparse.cpp30
2 files changed, 29 insertions, 3 deletions
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<typename Scalar> void sparse(int rows, int cols)
// }
// }
// VERIFY_IS_APPROX(m, refMat);
-
+
// random setter
{
m.setZero();
@@ -172,6 +172,32 @@ template<typename Scalar> void sparse(int rows, int cols)
}
VERIFY_IS_APPROX(m, refMat);
+ // test transpose
+ {
+ DenseMatrix refMat2 = DenseMatrix::Zero(rows, rows);
+ SparseMatrix<Scalar> m2(rows, rows);
+ initSparse<Scalar>(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<Scalar> m2(rows, rows);
+ SparseMatrix<Scalar> m3(rows, rows);
+ SparseMatrix<Scalar> m4(rows, rows);
+ initSparse<Scalar>(density, refMat2, m2);
+ initSparse<Scalar>(density, refMat3, m3);
+ initSparse<Scalar>(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<typename Scalar> void sparse(int rows, int cols)
initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular, &zeroCoords, &nonzeroCoords);
VERIFY_IS_APPROX(refMat2.template marked<Upper>().solveTriangular(vec2),
m2.template marked<Upper>().solveTriangular(vec3));
-
+
// TODO test row major
}