aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2017-01-29 14:29:31 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2017-01-29 14:29:31 +0100
commit0e89baa5d895e40bae63c804cd3d3c568dca50f1 (patch)
tree5ca000a97a71774cffde96cbb409a24a152fdfff /test
parentd024e9942d24e83478c1def5bbdf7f52895c5cc4 (diff)
parent15f273b63c1089df68129076de4f93cbd38aae5b (diff)
import yoco xiao's work on reshape
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt1
-rw-r--r--test/reshape.cpp65
2 files changed, 66 insertions, 0 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 84a21b3df..315b7bece 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -160,6 +160,7 @@ endif()
ei_add_test(redux)
ei_add_test(visitor)
ei_add_test(block)
+ei_add_test(reshape)
ei_add_test(corners)
ei_add_test(symbolic_index)
ei_add_test(indexed_view)
diff --git a/test/reshape.cpp b/test/reshape.cpp
new file mode 100644
index 000000000..0298a2fe4
--- /dev/null
+++ b/test/reshape.cpp
@@ -0,0 +1,65 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2014 yoco <peter.xiau@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"
+
+using Eigen::Map;
+using Eigen::MatrixXi;
+
+// just test a 4x4 matrix, enumerate all combination manually,
+// so I don't have to do template-meta-programming here.
+template <typename MatType>
+void reshape_all_size(MatType m) {
+ typedef Eigen::Map<MatrixXi> MapMat;
+ // dynamic
+ VERIFY_IS_EQUAL((m.template reshape( 1, 16)), MapMat(m.data(), 1, 16));
+ VERIFY_IS_EQUAL((m.template reshape( 2, 8)), MapMat(m.data(), 2, 8));
+ VERIFY_IS_EQUAL((m.template reshape( 4, 4)), MapMat(m.data(), 4, 4));
+ VERIFY_IS_EQUAL((m.template reshape( 8, 2)), MapMat(m.data(), 8, 2));
+ VERIFY_IS_EQUAL((m.template reshape(16, 1)), MapMat(m.data(), 16, 1));
+
+ // static
+ VERIFY_IS_EQUAL((m.template reshape< 1, 16>()), MapMat(m.data(), 1, 16));
+ VERIFY_IS_EQUAL((m.template reshape< 2, 8>()), MapMat(m.data(), 2, 8));
+ VERIFY_IS_EQUAL((m.template reshape< 4, 4>()), MapMat(m.data(), 4, 4));
+ VERIFY_IS_EQUAL((m.template reshape< 8, 2>()), MapMat(m.data(), 8, 2));
+ VERIFY_IS_EQUAL((m.template reshape<16, 1>()), MapMat(m.data(), 16, 1));
+
+ // reshape chain
+ VERIFY_IS_EQUAL(
+ (m
+ .template reshape( 1, 16)
+ .template reshape< 2, 8>()
+ .template reshape(16, 1)
+ .template reshape< 8, 2>()
+ .template reshape( 2, 8)
+ .template reshape< 1, 16>()
+ .template reshape( 4, 4)
+ .template reshape<16, 1>()
+ .template reshape( 8, 2)
+ .template reshape< 4, 4>()
+ ),
+ MapMat(m.data(), 4, 4)
+ );
+}
+
+void test_reshape()
+{
+ Eigen::MatrixXi mx = Eigen::MatrixXi::Random(4, 4);
+ Eigen::Matrix4i m4 = Eigen::Matrix4i::Random(4, 4);
+
+ // test dynamic-size matrix
+ CALL_SUBTEST(reshape_all_size(mx));
+ // test static-size matrix
+ CALL_SUBTEST(reshape_all_size(m4));
+ // test dynamic-size const matrix
+ CALL_SUBTEST(reshape_all_size(static_cast<const Eigen::MatrixXi>(mx)));
+ // test static-size const matrix
+ CALL_SUBTEST(reshape_all_size(static_cast<const Eigen::Matrix4i>(m4)));
+}