123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // This file is part of Eigen, a lightweight C++ template library
- // for linear algebra.
- //
- // Copyright (C) 2018 Gael Guennebaud <gael.guennebaud@inria.fr>
- //
- // 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"
- #include <Eigen/SparseCore>
- template<int ExpectedDim,typename Xpr>
- void check_dim(const Xpr& ) {
- STATIC_CHECK( Xpr::NumDimensions == ExpectedDim );
- }
- #if EIGEN_HAS_CXX11
- template<template <typename,int,int> class Object>
- void map_num_dimensions()
- {
- typedef Object<double, 1, 1> ArrayScalarType;
- typedef Object<double, 2, 1> ArrayVectorType;
- typedef Object<double, 1, 2> TransposeArrayVectorType;
- typedef Object<double, 2, 2> ArrayType;
- typedef Object<double, Eigen::Dynamic, 1> DynamicArrayVectorType;
- typedef Object<double, 1, Eigen::Dynamic> DynamicTransposeArrayVectorType;
- typedef Object<double, Eigen::Dynamic, Eigen::Dynamic> DynamicArrayType;
- STATIC_CHECK(ArrayScalarType::NumDimensions == 0);
- STATIC_CHECK(ArrayVectorType::NumDimensions == 1);
- STATIC_CHECK(TransposeArrayVectorType::NumDimensions == 1);
- STATIC_CHECK(ArrayType::NumDimensions == 2);
- STATIC_CHECK(DynamicArrayVectorType::NumDimensions == 1);
- STATIC_CHECK(DynamicTransposeArrayVectorType::NumDimensions == 1);
- STATIC_CHECK(DynamicArrayType::NumDimensions == 2);
- typedef Eigen::Map<ArrayScalarType> ArrayScalarMap;
- typedef Eigen::Map<ArrayVectorType> ArrayVectorMap;
- typedef Eigen::Map<TransposeArrayVectorType> TransposeArrayVectorMap;
- typedef Eigen::Map<ArrayType> ArrayMap;
- typedef Eigen::Map<DynamicArrayVectorType> DynamicArrayVectorMap;
- typedef Eigen::Map<DynamicTransposeArrayVectorType> DynamicTransposeArrayVectorMap;
- typedef Eigen::Map<DynamicArrayType> DynamicArrayMap;
- STATIC_CHECK(ArrayScalarMap::NumDimensions == 0);
- STATIC_CHECK(ArrayVectorMap::NumDimensions == 1);
- STATIC_CHECK(TransposeArrayVectorMap::NumDimensions == 1);
- STATIC_CHECK(ArrayMap::NumDimensions == 2);
- STATIC_CHECK(DynamicArrayVectorMap::NumDimensions == 1);
- STATIC_CHECK(DynamicTransposeArrayVectorMap::NumDimensions == 1);
- STATIC_CHECK(DynamicArrayMap::NumDimensions == 2);
- }
- template<typename Scalar, int Rows, int Cols>
- using TArray = Array<Scalar,Rows,Cols>;
- template<typename Scalar, int Rows, int Cols>
- using TMatrix = Matrix<Scalar,Rows,Cols>;
- #endif
- EIGEN_DECLARE_TEST(num_dimensions)
- {
- int n = 10;
- ArrayXXd A(n,n);
- CALL_SUBTEST( check_dim<2>(A) );
- CALL_SUBTEST( check_dim<2>(A.block(1,1,2,2)) );
- CALL_SUBTEST( check_dim<1>(A.col(1)) );
- CALL_SUBTEST( check_dim<1>(A.row(1)) );
- MatrixXd M(n,n);
- CALL_SUBTEST( check_dim<0>(M.row(1)*M.col(1)) );
- SparseMatrix<double> S(n,n);
- CALL_SUBTEST( check_dim<2>(S) );
- CALL_SUBTEST( check_dim<2>(S.block(1,1,2,2)) );
- CALL_SUBTEST( check_dim<1>(S.col(1)) );
- CALL_SUBTEST( check_dim<1>(S.row(1)) );
- SparseVector<double> s(n);
- CALL_SUBTEST( check_dim<1>(s) );
- CALL_SUBTEST( check_dim<1>(s.head(2)) );
-
- #if EIGEN_HAS_CXX11
- CALL_SUBTEST( map_num_dimensions<TArray>() );
- CALL_SUBTEST( map_num_dimensions<TMatrix>() );
- #endif
- }
|