From 515bbf8bb207ed5e43615c96a7a5ef92f8b3d84c Mon Sep 17 00:00:00 2001 From: yoco Date: Tue, 4 Feb 2014 02:50:23 +0800 Subject: Improve reshape test case - simplify test code - add reshape chain --- test/reshape.cpp | 82 ++++++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 44 deletions(-) (limited to 'test/reshape.cpp') diff --git a/test/reshape.cpp b/test/reshape.cpp index 053ece14d..eeab155f3 100644 --- a/test/reshape.cpp +++ b/test/reshape.cpp @@ -12,60 +12,54 @@ using Eigen::Map; using Eigen::MatrixXi; -template -void dynamic_reshape_all_size(MatType m, int row, int col) { - for(int new_r = 1; new_r <= row * col; ++new_r) { - // skip invalid shape - if(row * col % new_r != 0) - continue; - - // reshape and compare - int new_c = row * col / new_r; - VERIFY_IS_EQUAL(m.reshape(new_r, new_c), - Map(m.data(), new_r, new_c)); - } -} - // just test a 4x4 matrix, enumerate all combination manually, // so I don't have to do template-meta-programming here. template -void static_reshape_all_size(MatType m) { - VERIFY_IS_EQUAL((m.template reshape< 1, 16>()), Map(m.data(), 1, 16)); - VERIFY_IS_EQUAL((m.template reshape< 2, 8>()), Map(m.data(), 2, 8)); - VERIFY_IS_EQUAL((m.template reshape< 4, 4>()), Map(m.data(), 4, 4)); - VERIFY_IS_EQUAL((m.template reshape< 8, 2>()), Map(m.data(), 8, 2)); - VERIFY_IS_EQUAL((m.template reshape<16, 1>()), Map(m.data(), 16, 1)); +void reshape_all_size(MatType m) { + typedef Eigen::Map MapMat; + // dynamic + VERIFY_IS_EQUAL((m.template reshape( 1, 16)), MapMat(m.eval().data(), 1, 16)); + VERIFY_IS_EQUAL((m.template reshape( 2, 8)), MapMat(m.eval().data(), 2, 8)); + VERIFY_IS_EQUAL((m.template reshape( 4, 4)), MapMat(m.eval().data(), 4, 4)); + VERIFY_IS_EQUAL((m.template reshape( 8, 2)), MapMat(m.eval().data(), 8, 2)); + VERIFY_IS_EQUAL((m.template reshape(16, 1)), MapMat(m.eval().data(), 16, 1)); + + // static + VERIFY_IS_EQUAL((m.template reshape< 1, 16>()), MapMat(m.eval().data(), 1, 16)); + VERIFY_IS_EQUAL((m.template reshape< 2, 8>()), MapMat(m.eval().data(), 2, 8)); + VERIFY_IS_EQUAL((m.template reshape< 4, 4>()), MapMat(m.eval().data(), 4, 4)); + VERIFY_IS_EQUAL((m.template reshape< 8, 2>()), MapMat(m.eval().data(), 8, 2)); + VERIFY_IS_EQUAL((m.template reshape<16, 1>()), MapMat(m.eval().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.eval().data(), 4, 4) + ); } void test_reshape() { - // create matrix(row, col) and filled with 0, 1, 2, ... - // for all possible shape - int row = 4; - int col = 4; - Eigen::MatrixXi mx(row, col); - Eigen::Matrix4i m4(row, col); - - for(int r = 0; r < row; ++r) { - for(int c = 0; c < col; ++c) { - mx(r, c) = col * c + r; - m4(r, c) = col * c + r; - } - } - - mx.reshape(8, 2).leftCols(2); + Eigen::MatrixXi mx = Eigen::MatrixXi::Random(4, 4); + Eigen::Matrix4i m4 = Eigen::Matrix4i::Random(4, 4); // test dynamic-size matrix - CALL_SUBTEST(dynamic_reshape_all_size(mx, 4, 4)); - CALL_SUBTEST(static_reshape_all_size(mx)); + CALL_SUBTEST(reshape_all_size(mx)); // test static-size matrix - CALL_SUBTEST(dynamic_reshape_all_size(m4, 4, 4)); - CALL_SUBTEST(static_reshape_all_size(m4)); - + CALL_SUBTEST(reshape_all_size(m4)); // test dynamic-size const matrix - CALL_SUBTEST(dynamic_reshape_all_size(static_cast(mx), 4, 4)); - CALL_SUBTEST(static_reshape_all_size(static_cast(mx))); + CALL_SUBTEST(reshape_all_size(static_cast(mx))); // test static-size const matrix - CALL_SUBTEST(dynamic_reshape_all_size(static_cast(m4), 4, 4)); - CALL_SUBTEST(static_reshape_all_size(static_cast(m4))); + CALL_SUBTEST(reshape_all_size(static_cast(m4))); } -- cgit v1.2.3