aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-04-26 20:28:27 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-04-26 20:28:27 +0000
commit1ec2d21ca5a17aa865f8e311954b3addd9f10446 (patch)
tree3186398c69aee87abafe70e9f31ed49e1cbc957f /test
parentb4c974d0597546e255edb3758a0bc58515674692 (diff)
Fixed a couple of issues introduced in previous commits.
Added a test for Triangular.
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt1
-rw-r--r--test/determinant.cpp29
-rw-r--r--test/main.h3
3 files changed, 23 insertions, 10 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 4a5ca235c..28395e6b2 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -7,6 +7,7 @@ FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} )
SET(test_SRCS
+ triangular.cpp
main.cpp
basicstuff.cpp
linearstructure.cpp
diff --git a/test/determinant.cpp b/test/determinant.cpp
index 974df58ef..26e53d46d 100644
--- a/test/determinant.cpp
+++ b/test/determinant.cpp
@@ -40,21 +40,32 @@ template<typename MatrixType> void nullDeterminant(const MatrixType& m)
typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, MatrixType::ColsAtCompileTime> SquareMatrixType;
typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, 1> VectorType;
- MatrixType d(rows, cols);
+ MatrixType dinv(rows, cols), dnotinv(rows, cols);
- // build a ill-conditionned matrix with a nul determinant
- d.col(0).setOnes();
- d.block(0,1, rows, cols-2).setRandom();
- d.col(cols-1).setOnes();
+ dinv.col(0).setOnes();
+ dinv.block(0,1, rows, cols-2).setRandom();
+
+ dnotinv.col(0).setOnes();
+ dnotinv.block(0,1, rows, cols-2).setRandom();
+ dnotinv.col(cols-1).setOnes();
for (int i=0 ; i<rows ; ++i)
- d.row(i).block(0,1,1,cols-2) = d.row(i).block(0,1,1,cols-2).normalized();
+ {
+ dnotinv.row(i).block(0,1,1,cols-2) = ei_random<Scalar>(99.999999,100.00000001)*dnotinv.row(i).block(0,1,1,cols-2).normalized();
+ dnotinv(i,cols-1) = dnotinv.row(i).block(0,1,1,cols-2).norm2();
+ dinv(i,cols-1) = dinv.row(i).block(0,1,1,cols-2).norm2();
+ }
+
+ SquareMatrixType invertibleCovarianceMatrix = dinv.transpose() * dinv;
+ SquareMatrixType notInvertibleCovarianceMatrix = dnotinv.transpose() * dnotinv;
+
+ std::cout << notInvertibleCovarianceMatrix << "\n" << notInvertibleCovarianceMatrix.determinant() << "\n";
- SquareMatrixType covarianceMatrix = d.transpose() * d;
+ VERIFY_IS_APPROX(notInvertibleCovarianceMatrix.determinant(), Scalar(0));
-// std::cout << covarianceMatrix << "\n" << covarianceMatrix.determinant() << "\n";
+ VERIFY(invertibleCovarianceMatrix.inverse().exists());
- VERIFY_IS_APPROX(covarianceMatrix.determinant(), Scalar(0));
+ VERIFY(!notInvertibleCovarianceMatrix.inverse().exists());
}
void EigenTest::testDeterminant()
diff --git a/test/main.h b/test/main.h
index 3aae7bc65..cab2cdc01 100644
--- a/test/main.h
+++ b/test/main.h
@@ -32,7 +32,7 @@
#include <ctime>
#include <iostream>
-#define DEFAULT_REPEAT 50
+#define DEFAULT_REPEAT 10
#ifndef EIGEN_NO_ASSERTION_CHECKING
@@ -214,6 +214,7 @@ class EigenTest : public QObject
void testMap();
void testCwiseops();
void testDeterminant();
+ void testTriangular();
protected:
int m_repeat;
};