aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/nullary.cpp
diff options
context:
space:
mode:
authorGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2010-01-20 10:51:59 +0000
committerGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2010-01-20 10:51:59 +0000
commite0c2c6385ff717f17e5ea74889f00008d211bb1a (patch)
tree0cc85ec486869a847f8a95fd648801716a40d3ce /test/nullary.cpp
parent89ee9f092f1a1626dc1cbfb8acd31a6706beddcb (diff)
Add small test for Matrix::setIdentity()
This is to exhibit the bug that makes the jacobisvd_7 test fail.
Diffstat (limited to 'test/nullary.cpp')
-rw-r--r--test/nullary.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/test/nullary.cpp b/test/nullary.cpp
new file mode 100644
index 000000000..e0b8336c4
--- /dev/null
+++ b/test/nullary.cpp
@@ -0,0 +1,67 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2010 Jitse Niesen <jitse@maths.leeds.ac.uk>
+//
+// Eigen is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 3 of the License, or (at your option) any later version.
+//
+// Alternatively, 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 of
+// the License, 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 Lesser General Public License or the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License and a copy of the GNU General Public License along with
+// Eigen. If not, see <http://www.gnu.org/licenses/>.
+
+#include "main.h"
+#include <Eigen/Array>
+
+template<typename MatrixType>
+bool equalsIdentity(const MatrixType& A)
+{
+ typedef typename MatrixType::Scalar Scalar;
+ Scalar zero = static_cast<Scalar>(0);
+
+ bool offDiagOK = true;
+ for (int i = 0; i < A.rows(); ++i) {
+ for (int j = i+1; j < A.cols(); ++j) {
+ offDiagOK = offDiagOK && (A(i,j) == zero);
+ }
+ }
+ for (int i = 0; i < A.rows(); ++i) {
+ for (int j = 0; j < i; ++j) {
+ offDiagOK = offDiagOK && (A(i,j) == zero);
+ }
+ }
+
+ bool diagOK = (A.diagonal().array() == 1).all();
+ return offDiagOK && diagOK;
+}
+
+template<typename MatrixType>
+void testMatrixType(const MatrixType& m)
+{
+ const int rows = m.rows();
+ const int cols = m.cols();
+
+ MatrixType A;
+ A.setIdentity(rows, cols);
+ VERIFY(equalsIdentity(A));
+ VERIFY(equalsIdentity(MatrixType::Identity(rows, cols)));
+}
+
+void test_nullary()
+{
+ CALL_SUBTEST_1( testMatrixType(Matrix2d()) );
+ CALL_SUBTEST_2( testMatrixType(MatrixXcf(50,50)) );
+ CALL_SUBTEST_3( testMatrixType(MatrixXf(5,7)) );
+}