cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

num_dimensions.cpp (3212B)


      1 // This file is part of Eigen, a lightweight C++ template library
      2 // for linear algebra.
      3 //
      4 // Copyright (C) 2018 Gael Guennebaud <gael.guennebaud@inria.fr>
      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 #include <Eigen/SparseCore>
     12 
     13 template<int ExpectedDim,typename Xpr>
     14 void check_dim(const Xpr& ) {
     15   STATIC_CHECK( Xpr::NumDimensions == ExpectedDim );
     16 }
     17 
     18 #if EIGEN_HAS_CXX11
     19 template<template <typename,int,int> class Object>
     20 void map_num_dimensions()
     21 {
     22   typedef Object<double, 1, 1> ArrayScalarType;
     23   typedef Object<double, 2, 1> ArrayVectorType;
     24   typedef Object<double, 1, 2> TransposeArrayVectorType;
     25   typedef Object<double, 2, 2> ArrayType;
     26   typedef Object<double, Eigen::Dynamic, 1> DynamicArrayVectorType;
     27   typedef Object<double, 1, Eigen::Dynamic> DynamicTransposeArrayVectorType;
     28   typedef Object<double, Eigen::Dynamic, Eigen::Dynamic> DynamicArrayType;
     29 
     30   STATIC_CHECK(ArrayScalarType::NumDimensions == 0);
     31   STATIC_CHECK(ArrayVectorType::NumDimensions == 1);
     32   STATIC_CHECK(TransposeArrayVectorType::NumDimensions == 1);
     33   STATIC_CHECK(ArrayType::NumDimensions == 2);
     34   STATIC_CHECK(DynamicArrayVectorType::NumDimensions == 1);
     35   STATIC_CHECK(DynamicTransposeArrayVectorType::NumDimensions == 1);
     36   STATIC_CHECK(DynamicArrayType::NumDimensions == 2);
     37 
     38   typedef Eigen::Map<ArrayScalarType> ArrayScalarMap;
     39   typedef Eigen::Map<ArrayVectorType> ArrayVectorMap;
     40   typedef Eigen::Map<TransposeArrayVectorType> TransposeArrayVectorMap;
     41   typedef Eigen::Map<ArrayType> ArrayMap;
     42   typedef Eigen::Map<DynamicArrayVectorType> DynamicArrayVectorMap;
     43   typedef Eigen::Map<DynamicTransposeArrayVectorType> DynamicTransposeArrayVectorMap;
     44   typedef Eigen::Map<DynamicArrayType> DynamicArrayMap;
     45 
     46   STATIC_CHECK(ArrayScalarMap::NumDimensions == 0);
     47   STATIC_CHECK(ArrayVectorMap::NumDimensions == 1);
     48   STATIC_CHECK(TransposeArrayVectorMap::NumDimensions == 1);
     49   STATIC_CHECK(ArrayMap::NumDimensions == 2);
     50   STATIC_CHECK(DynamicArrayVectorMap::NumDimensions == 1);
     51   STATIC_CHECK(DynamicTransposeArrayVectorMap::NumDimensions == 1);
     52   STATIC_CHECK(DynamicArrayMap::NumDimensions == 2);
     53 }
     54 
     55 template<typename Scalar, int Rows, int Cols>
     56 using TArray = Array<Scalar,Rows,Cols>;
     57 
     58 template<typename Scalar, int Rows, int Cols>
     59 using TMatrix = Matrix<Scalar,Rows,Cols>;
     60 
     61 #endif
     62 
     63 EIGEN_DECLARE_TEST(num_dimensions)
     64 {
     65   int n = 10;
     66   ArrayXXd A(n,n);
     67   CALL_SUBTEST( check_dim<2>(A) );
     68   CALL_SUBTEST( check_dim<2>(A.block(1,1,2,2)) );
     69   CALL_SUBTEST( check_dim<1>(A.col(1)) );
     70   CALL_SUBTEST( check_dim<1>(A.row(1)) );
     71 
     72   MatrixXd M(n,n);
     73   CALL_SUBTEST( check_dim<0>(M.row(1)*M.col(1)) );
     74 
     75   SparseMatrix<double> S(n,n);
     76   CALL_SUBTEST( check_dim<2>(S) );
     77   CALL_SUBTEST( check_dim<2>(S.block(1,1,2,2)) );
     78   CALL_SUBTEST( check_dim<1>(S.col(1)) );
     79   CALL_SUBTEST( check_dim<1>(S.row(1)) );
     80 
     81   SparseVector<double> s(n);
     82   CALL_SUBTEST( check_dim<1>(s) );
     83   CALL_SUBTEST( check_dim<1>(s.head(2)) );
     84   
     85 
     86   #if EIGEN_HAS_CXX11
     87   CALL_SUBTEST( map_num_dimensions<TArray>() );
     88   CALL_SUBTEST( map_num_dimensions<TMatrix>() );
     89   #endif
     90 }