summaryrefslogtreecommitdiffhomepage
path: root/eigen/test/zerosized.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2016-09-18 12:42:15 +0200
committerStanislaw Halik <sthalik@misaki.pl>2016-11-02 15:12:04 +0100
commit44861dcbfeee041223c4aac1ee075e92fa4daa01 (patch)
tree6dfdfd9637846a7aedd71ace97d7d2ad366496d7 /eigen/test/zerosized.cpp
parentf3fe458b9e0a29a99a39d47d9a76dc18964b6fec (diff)
update
Diffstat (limited to 'eigen/test/zerosized.cpp')
-rw-r--r--eigen/test/zerosized.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/eigen/test/zerosized.cpp b/eigen/test/zerosized.cpp
new file mode 100644
index 0000000..da7dd04
--- /dev/null
+++ b/eigen/test/zerosized.cpp
@@ -0,0 +1,84 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2011 Benoit Jacob <jacob.benoit.1@gmail.com>
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// Public License v. 2.0. If a copy of the MPL was not distributed
+// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include "main.h"
+
+
+template<typename MatrixType> void zeroReduction(const MatrixType& m) {
+ // Reductions that must hold for zero sized objects
+ VERIFY(m.all());
+ VERIFY(!m.any());
+ VERIFY(m.prod()==1);
+ VERIFY(m.sum()==0);
+ VERIFY(m.count()==0);
+ VERIFY(m.allFinite());
+ VERIFY(!m.hasNaN());
+}
+
+
+template<typename MatrixType> void zeroSizedMatrix()
+{
+ MatrixType t1;
+
+ if (MatrixType::SizeAtCompileTime == Dynamic || MatrixType::SizeAtCompileTime == 0)
+ {
+ zeroReduction(t1);
+ if (MatrixType::RowsAtCompileTime == Dynamic)
+ VERIFY(t1.rows() == 0);
+ if (MatrixType::ColsAtCompileTime == Dynamic)
+ VERIFY(t1.cols() == 0);
+
+ if (MatrixType::RowsAtCompileTime == Dynamic && MatrixType::ColsAtCompileTime == Dynamic)
+ {
+
+ MatrixType t2(0, 0);
+ VERIFY(t2.rows() == 0);
+ VERIFY(t2.cols() == 0);
+
+ zeroReduction(t2);
+ VERIFY(t1==t2);
+ }
+ }
+}
+
+template<typename VectorType> void zeroSizedVector()
+{
+ VectorType t1;
+
+ if (VectorType::SizeAtCompileTime == Dynamic || VectorType::SizeAtCompileTime==0)
+ {
+ zeroReduction(t1);
+ VERIFY(t1.size() == 0);
+ VectorType t2(DenseIndex(0)); // DenseIndex disambiguates with 0-the-null-pointer (error with gcc 4.4 and MSVC8)
+ VERIFY(t2.size() == 0);
+ zeroReduction(t2);
+
+ VERIFY(t1==t2);
+ }
+}
+
+void test_zerosized()
+{
+ zeroSizedMatrix<Matrix2d>();
+ zeroSizedMatrix<Matrix3i>();
+ zeroSizedMatrix<Matrix<float, 2, Dynamic> >();
+ zeroSizedMatrix<MatrixXf>();
+ zeroSizedMatrix<Matrix<float, 0, 0> >();
+ zeroSizedMatrix<Matrix<float, Dynamic, 0, 0, 0, 0> >();
+ zeroSizedMatrix<Matrix<float, 0, Dynamic, 0, 0, 0> >();
+ zeroSizedMatrix<Matrix<float, Dynamic, Dynamic, 0, 0, 0> >();
+ zeroSizedMatrix<Matrix<float, 0, 4> >();
+ zeroSizedMatrix<Matrix<float, 4, 0> >();
+
+ zeroSizedVector<Vector2d>();
+ zeroSizedVector<Vector3i>();
+ zeroSizedVector<VectorXf>();
+ zeroSizedVector<Matrix<float, 0, 1> >();
+ zeroSizedVector<Matrix<float, 1, 0> >();
+}