1 // This file is part of Eigen, a lightweight C++ template library 2 // for linear algebra. 3 // 4 // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com> 5 // 6 // This Source Code Form is subject to the terms of the Mozilla 7 // Public License v. 2.0. If a copy of the MPL was not distributed 8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9 10 #include "main.h" 11 12 #include <Eigen/CXX11/Tensor> 13 14 using Eigen::Tensor; 15 16 17 static void test_dynamic_size() 18 { 19 Eigen::DSizes<int, 3> dimensions(2,3,7); 20 21 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<0>(dimensions), 2); 22 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<1>(dimensions), 3); 23 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<2>(dimensions), 7); 24 VERIFY_IS_EQUAL((int)dimensions.TotalSize(), 2*3*7); 25 VERIFY_IS_EQUAL((int)dimensions[0], 2); 26 VERIFY_IS_EQUAL((int)dimensions[1], 3); 27 VERIFY_IS_EQUAL((int)dimensions[2], 7); 28 } 29 30 static void test_fixed_size() 31 { 32 Eigen::Sizes<2,3,7> dimensions; 33 34 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<0>(dimensions), 2); 35 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<1>(dimensions), 3); 36 VERIFY_IS_EQUAL((int)Eigen::internal::array_get<2>(dimensions), 7); 37 VERIFY_IS_EQUAL((int)dimensions.TotalSize(), 2*3*7); 38 } 39 40 static void test_match() 41 { 42 Eigen::DSizes<unsigned int, 3> dyn((unsigned int)2,(unsigned int)3,(unsigned int)7); 43 Eigen::Sizes<2,3,7> stat; 44 VERIFY_IS_EQUAL(Eigen::dimensions_match(dyn, stat), true); 45 46 Eigen::DSizes<int, 3> dyn1(2,3,7); 47 Eigen::DSizes<int, 2> dyn2(2,3); 48 VERIFY_IS_EQUAL(Eigen::dimensions_match(dyn1, dyn2), false); 49 } 50 51 static void test_rank_zero() 52 { 53 Eigen::Sizes<> scalar; 54 VERIFY_IS_EQUAL((int)scalar.TotalSize(), 1); 55 VERIFY_IS_EQUAL((int)scalar.rank(), 0); 56 VERIFY_IS_EQUAL((int)internal::array_prod(scalar), 1); 57 58 Eigen::DSizes<ptrdiff_t, 0> dscalar; 59 VERIFY_IS_EQUAL((int)dscalar.TotalSize(), 1); 60 VERIFY_IS_EQUAL((int)dscalar.rank(), 0); 61 } 62 63 void test_cxx11_tensor_dimension() 64 { 65 CALL_SUBTEST(test_dynamic_size()); 66 CALL_SUBTEST(test_fixed_size()); 67 CALL_SUBTEST(test_match()); 68 CALL_SUBTEST(test_rank_zero()); 69 } 70