diff options
author | Manuel Yguel <manuel.yguel@gmail.com> | 2009-07-04 14:55:25 +0200 |
---|---|---|
committer | Manuel Yguel <manuel.yguel@gmail.com> | 2009-07-04 14:55:25 +0200 |
commit | c398d0edcf7817b7956f4ef007e3ff4e501e3bad (patch) | |
tree | 864544e4d5f2d93a883906882964f12a58fb223f /test | |
parent | d457ec58108ecfdaa8a8a5cedb2600828019077e (diff) |
another test in the non invertible case
Diffstat (limited to 'test')
-rw-r--r-- | test/inverse.cpp | 15 |
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()); |