diff options
author | 2007-12-15 18:16:30 +0000 | |
---|---|---|
committer | 2007-12-15 18:16:30 +0000 | |
commit | 7c384752918640c6073afe32dce9808fa6c4f3a6 (patch) | |
tree | 5413a5f5c6ea5169e49bfc7de563e535f969e1df /test | |
parent | fc7b2b5c2091c4a165587ceea4c8228b0feabab8 (diff) |
-add Ones, DiagonalMatrix, DiagonalCoeffs
-expand and improve unit-tests
-various renaming and improvements
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/basicstuff.cpp | 18 | ||||
-rw-r--r-- | test/main.h | 2 | ||||
-rw-r--r-- | test/miscmatrices.cpp | 68 | ||||
-rw-r--r-- | test/submatrices.cpp | 14 |
5 files changed, 87 insertions, 16 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 42aae4012..c58b085c7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,6 +9,7 @@ SET(test_SRCS basicstuff.cpp adjoint.cpp submatrices.cpp + miscmatrices.cpp ) QT4_AUTOMOC(${test_SRCS}) diff --git a/test/basicstuff.cpp b/test/basicstuff.cpp index dceeee564..85793e254 100644 --- a/test/basicstuff.cpp +++ b/test/basicstuff.cpp @@ -32,7 +32,7 @@ template<typename MatrixType> void basicStuff(const MatrixType& m) /* this test covers the following files: 1) Explicitly (see comments below): Random.h Zero.h Identity.h Fuzzy.h Sum.h Difference.h - Opposite.h Product.h ScalarMultiple.h FromArray.h + Opposite.h Product.h ScalarMultiple.h Map.h 2) Implicitly (the core stuff): MatrixBase.h Matrix.h MatrixStorage.h CopyHelper.h MatrixRef.h @@ -84,7 +84,7 @@ template<typename MatrixType> void basicStuff(const MatrixType& m) // hence has no _write() method, the corresponding MatrixBase method (here zero()) // should return a const-qualified object so that it is the const-qualified // operator() that gets called, which in turn calls _read(). - VERIFY_IS_MUCH_SMALLER_THAN(MatrixType::zero()(r,c), static_cast<Scalar>(1)); + VERIFY_IS_MUCH_SMALLER_THAN(MatrixType::zero(rows,cols)(r,c), static_cast<Scalar>(1)); // test the linear structure, i.e. the following files: // Sum.h Difference.h Opposite.h ScalarMultiple.h @@ -145,16 +145,16 @@ template<typename MatrixType> void basicStuff(const MatrixType& m) VERIFY_IS_APPROX(m1, identity*m1); VERIFY_IS_APPROX(v1, identity*v1); // again, test operator() to check const-qualification - VERIFY_IS_APPROX(MatrixType::identity()(r,c), static_cast<Scalar>(r==c)); + VERIFY_IS_APPROX(MatrixType::identity(std::max(rows,cols))(r,c), static_cast<Scalar>(r==c)); - // test FromArray.h + // test Map.h Scalar* array1 = new Scalar[rows]; Scalar* array2 = new Scalar[rows]; - Matrix<Scalar, Dynamic, 1>::fromArray(array1, rows) = Matrix<Scalar, Dynamic, 1>::random(rows); - Matrix<Scalar, Dynamic, 1>::fromArray(array2, rows) - = Matrix<Scalar, Dynamic, 1>::fromArray(array1, rows); - Matrix<Scalar, Dynamic, 1> ma1 = Matrix<Scalar, Dynamic, 1>::fromArray(array1, rows); - Matrix<Scalar, Dynamic, 1> ma2 = Matrix<Scalar, Dynamic, 1>::fromArray(array2, rows); + Matrix<Scalar, Dynamic, 1>::map(array1, rows) = Matrix<Scalar, Dynamic, 1>::random(rows); + Matrix<Scalar, Dynamic, 1>::map(array2, rows) + = Matrix<Scalar, Dynamic, 1>::map(array1, rows); + Matrix<Scalar, Dynamic, 1> ma1 = Matrix<Scalar, Dynamic, 1>::map(array1, rows); + Matrix<Scalar, Dynamic, 1> ma2 = Matrix<Scalar, Dynamic, 1>::map(array2, rows); VERIFY_IS_APPROX(ma1, ma2); delete[] array1; delete[] array2; diff --git a/test/main.h b/test/main.h index 837074f0a..cb387e08e 100644 --- a/test/main.h +++ b/test/main.h @@ -116,7 +116,7 @@ class EigenTest : public QObject void testBasicStuff(); void testAdjoint(); void testSubmatrices(); - + void testMiscMatrices(); protected: int m_repeat; }; diff --git a/test/miscmatrices.cpp b/test/miscmatrices.cpp new file mode 100644 index 000000000..052d5ec91 --- /dev/null +++ b/test/miscmatrices.cpp @@ -0,0 +1,68 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. Eigen itself is part of the KDE project. +// +// Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> +// +// Eigen is free software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the Free Software +// Foundation; either version 2 or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along +// with Eigen; if not, write to the Free Software Foundation, Inc., 51 +// Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. This exception does not invalidate any other reasons why a work +// based on this file might be covered by the GNU General Public License. + +#include "main.h" + +namespace Eigen { + +template<typename MatrixType> void miscMatrices(const MatrixType& m) +{ + /* this test covers the following files: + DiagonalMatrix.h Ones.h + */ + + typedef typename MatrixType::Scalar Scalar; + typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; + typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType; + int rows = m.rows(); + int cols = m.cols(); + + int r = random<int>(0, rows-1), r2 = random<int>(0, rows-1), c = random<int>(0, cols-1); + VERIFY_IS_APPROX(MatrixType::ones(rows,cols)(r,c), static_cast<Scalar>(1)); + MatrixType m1 = MatrixType::ones(rows,cols); + VERIFY_IS_APPROX(m1(r,c), static_cast<Scalar>(1)); + VectorType v1 = VectorType::random(rows); + v1[0]; + Matrix<Scalar, MatrixType::RowsAtCompileTime, MatrixType::RowsAtCompileTime> + square = MatrixType::diagonal(v1); + if(r==r2) VERIFY_IS_APPROX(square(r,r2), v1[r]); + else VERIFY_IS_MUCH_SMALLER_THAN(square(r,r2), static_cast<Scalar>(1)); + square = MatrixType::zero(rows, rows); + square.diagonal() = VectorType::ones(rows); + VERIFY_IS_APPROX(square, MatrixType::identity(rows)); +} + +void EigenTest::testMiscMatrices() +{ + for(int i = 0; i < m_repeat; i++) { + miscMatrices(Matrix<float, 1, 1>()); + miscMatrices(Matrix4d()); + miscMatrices(MatrixXcf(3, 3)); + miscMatrices(MatrixXi(8, 12)); + miscMatrices(MatrixXcd(20, 20)); + } +} + +} // namespace Eigen diff --git a/test/submatrices.cpp b/test/submatrices.cpp index 33d135646..29c83f742 100644 --- a/test/submatrices.cpp +++ b/test/submatrices.cpp @@ -30,9 +30,9 @@ namespace Eigen { template<typename MatrixType> void submatrices(const MatrixType& m) { /* this test covers the following files: - Transpose.h Conjugate.h Dot.h + Row.h Column.h Block.h DynBlock.h Minor.h DiagonalCoeffs.h */ - + typedef typename MatrixType::Scalar Scalar; typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> VectorType; typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType; @@ -54,10 +54,6 @@ template<typename MatrixType> void submatrices(const MatrixType& m) Scalar s1 = random<Scalar>(); - /* this test covers the following files: - Row.h Column.h Block.h DynBlock.h Minor.h - */ - int r1 = random<int>(0,rows-1); int r2 = random<int>(r1,rows-1); int c1 = random<int>(0,cols-1); @@ -91,6 +87,12 @@ template<typename MatrixType> void submatrices(const MatrixType& m) //check operator(), both constant and non-constant, on minor() m1.minor(r1,c1)(0,0) = m1.minor(0,0)(0,0); } + + //check diagonal() + VERIFY_IS_APPROX(m1.diagonal(), m1.transpose().diagonal()); + m2.diagonal() = 2 * m1.diagonal(); + m2.diagonal()[0] *= 3; + VERIFY_IS_APPROX(m2.diagonal()[0], static_cast<Scalar>(6) * m1.diagonal()[0]); } void EigenTest::testSubmatrices() |