aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/inverse.cpp
diff options
context:
space:
mode:
authorGravatar Manuel Yguel <manuel.yguel@gmail.com>2009-07-04 14:55:25 +0200
committerGravatar Manuel Yguel <manuel.yguel@gmail.com>2009-07-04 14:55:25 +0200
commitc398d0edcf7817b7956f4ef007e3ff4e501e3bad (patch)
tree864544e4d5f2d93a883906882964f12a58fb223f /test/inverse.cpp
parentd457ec58108ecfdaa8a8a5cedb2600828019077e (diff)
another test in the non invertible case
Diffstat (limited to 'test/inverse.cpp')
-rw-r--r--test/inverse.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/test/inverse.cpp b/test/inverse.cpp
index cdac7cdec..5ac39e35a 100644
--- a/test/inverse.cpp
+++ b/test/inverse.cpp
@@ -65,10 +65,21 @@ template<typename MatrixType> void inverse(const MatrixType& m)
// since for the general case we implement separately row-major and col-major, test that
VERIFY_IS_APPROX(m1.transpose().inverse(), m1.inverse().transpose());
-
+
+ //computeInverseWithCheck tests
+ //First: an invertible matrix
bool invertible = m1.computeInverseWithCheck(&m2);
VERIFY(invertible);
VERIFY_IS_APPROX(identity, m1*m2);
+
+ //Second: a rank one matrix (not invertible, except for 1x1 matrices)
+ VectorType v3 = VectorType::Random(rows);
+ MatrixType m3 = v3*v3.transpose(), m4(rows,cols);
+ invertible = m3.computeInverseWithCheck( &m4 );
+ if( 1 == rows ){
+ VERIFY( invertible ); }
+ else{
+ VERIFY( !invertible ); }
}
void test_inverse()
@@ -81,7 +92,7 @@ void test_inverse()
CALL_SUBTEST( inverse(MatrixXf(8,8)) );
CALL_SUBTEST( inverse(MatrixXcd(7,7)) );
}
-
+
// test some tricky cases for 4x4 matrices
VERIFY_IS_APPROX((Matrix4f() << 0,0,1,0, 1,0,0,0, 0,1,0,0, 0,0,0,1).finished().inverse(),
(Matrix4f() << 0,1,0,0, 0,0,1,0, 1,0,0,0, 0,0,0,1).finished());