| 78 | } |
| 79 | |
| 80 | template<typename VectorType> void ref_vector(const VectorType& m) |
| 81 | { |
| 82 | typedef typename VectorType::Scalar Scalar; |
| 83 | typedef typename VectorType::RealScalar RealScalar; |
| 84 | typedef Matrix<Scalar,Dynamic,1,VectorType::Options> DynMatrixType; |
| 85 | typedef Matrix<Scalar,Dynamic,Dynamic,ColMajor> MatrixType; |
| 86 | typedef Matrix<RealScalar,Dynamic,1,VectorType::Options> RealDynMatrixType; |
| 87 | |
| 88 | typedef Ref<VectorType> RefMat; |
| 89 | typedef Ref<DynMatrixType> RefDynMat; |
| 90 | typedef Ref<const DynMatrixType> ConstRefDynMat; |
| 91 | typedef Ref<RealDynMatrixType , 0, InnerStride<> > RefRealMatWithStride; |
| 92 | typedef Ref<DynMatrixType , 0, InnerStride<> > RefMatWithStride; |
| 93 | |
| 94 | Index size = m.size(); |
| 95 | |
| 96 | VectorType v1 = VectorType::Random(size), |
| 97 | v2 = v1; |
| 98 | MatrixType mat1 = MatrixType::Random(size,size), |
| 99 | mat2 = mat1, |
| 100 | mat3 = MatrixType::Random(size,size); |
| 101 | |
| 102 | Index i = internal::random<Index>(0,size-1); |
| 103 | Index bsize = internal::random<Index>(1,size-i); |
| 104 | |
| 105 | { RefMat rm0 = v1; VERIFY_IS_EQUAL(rm0, v1); } |
| 106 | { RefMat rm0 = v1.block(0,0,size,1); VERIFY_IS_EQUAL(rm0, v1); } |
| 107 | { RefDynMat rv1 = v1; VERIFY_IS_EQUAL(rv1, v1); } |
| 108 | { RefDynMat rv1 = v1.block(0,0,size,1); VERIFY_IS_EQUAL(rv1, v1); } |
| 109 | { VERIFY_RAISES_ASSERT( RefMat rm0 = v1.block(0, 0, size, 0); EIGEN_UNUSED_VARIABLE(rm0); ); } |
| 110 | if(VectorType::SizeAtCompileTime!=1) |
| 111 | { VERIFY_RAISES_ASSERT( RefDynMat rv1 = v1.block(0, 0, size, 0); EIGEN_UNUSED_VARIABLE(rv1); ); } |
| 112 | |
| 113 | RefDynMat rv2 = v1.segment(i,bsize); |
| 114 | VERIFY_IS_EQUAL(rv2, v1.segment(i,bsize)); |
| 115 | rv2.setOnes(); |
| 116 | v2.segment(i,bsize).setOnes(); |
| 117 | VERIFY_IS_EQUAL(v1, v2); |
| 118 | |
| 119 | v2.segment(i,bsize).setRandom(); |
| 120 | rv2 = v2.segment(i,bsize); |
| 121 | VERIFY_IS_EQUAL(v1, v2); |
| 122 | |
| 123 | ConstRefDynMat rm3 = v1.segment(i,bsize); |
| 124 | v1.segment(i,bsize) *= 2; |
| 125 | v2.segment(i,bsize) *= 2; |
| 126 | VERIFY_IS_EQUAL(rm3, v2.segment(i,bsize)); |
| 127 | |
| 128 | RefRealMatWithStride rm4 = v1.real(); |
| 129 | VERIFY_IS_EQUAL(rm4, v2.real()); |
| 130 | rm4.array() += 1; |
| 131 | v2.real().array() += 1; |
| 132 | VERIFY_IS_EQUAL(v1, v2); |
| 133 | |
| 134 | RefMatWithStride rm5 = mat1.row(i).transpose(); |
| 135 | VERIFY_IS_EQUAL(rm5, mat1.row(i).transpose()); |
| 136 | rm5.array() += 1; |
| 137 | mat2.row(i).array() += 1; |