1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "main.h" 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void array_for_matrix(const MatrixType& m) 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Index Index; 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Scalar Scalar; 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> ColVectorType; 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType; 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index rows = m.rows(); 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index cols = m.cols(); 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixType m1 = MatrixType::Random(rows, cols), 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = MatrixType::Random(rows, cols), 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3(rows, cols); 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ColVectorType cv1 = ColVectorType::Random(rows); 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath RowVectorType rv1 = RowVectorType::Random(cols); 287faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar s1 = internal::random<Scalar>(), 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath s2 = internal::random<Scalar>(); 317faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // scalar addition 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1.array() + s1, s1 + m1.array()); 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX((m1.array() + s1).matrix(), MatrixType::Constant(rows,cols,s1) + m1); 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(((m1*Scalar(2)).array() - s2).matrix(), (m1+m1) - MatrixType::Constant(rows,cols,s2) ); 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3.array() += s2; 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3, (m1.array() + s2).matrix()); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3.array() -= s1; 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3, (m1.array() - s1).matrix()); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // reductions 447faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum().sum() - m1.sum(), m1.squaredNorm()); 457faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum().sum() - m1.sum(), m1.squaredNorm()); 467faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum() + m2.colwise().sum() - (m1+m2).colwise().sum(), (m1+m2).squaredNorm()); 477faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum() - m2.rowwise().sum() - (m1-m2).rowwise().sum(), (m1-m2).squaredNorm()); 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1.colwise().sum(), m1.colwise().redux(internal::scalar_sum_op<Scalar>())); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // vector-wise ops 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3.colwise() += cv1, m1.colwise() + cv1); 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3.colwise() -= cv1, m1.colwise() - cv1); 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3.rowwise() += rv1, m1.rowwise() + rv1); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m3.rowwise() -= rv1, m1.rowwise() - rv1); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // empty objects 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1.block(0,0,0,cols).colwise().sum(), RowVectorType::Zero(cols)); 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1.block(0,0,rows,0).rowwise().prod(), ColVectorType::Ones(rows)); 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // verify the const accessors exist 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar& ref_m1 = m.matrix().array().coeffRef(0); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar& ref_m2 = m.matrix().array().coeffRef(0,0); 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar& ref_a1 = m.array().matrix().coeffRef(0); 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar& ref_a2 = m.array().matrix().coeffRef(0,0); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(&ref_a1 == &ref_m1); 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(&ref_a2 == &ref_m2); 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void comparisons(const MatrixType& m) 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez using std::abs; 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Index Index; 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Scalar Scalar; 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename NumTraits<Scalar>::Real RealScalar; 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index rows = m.rows(); 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index cols = m.cols(); 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index r = internal::random<Index>(0, rows-1), 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath c = internal::random<Index>(0, cols-1); 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixType m1 = MatrixType::Random(rows, cols), 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = MatrixType::Random(rows, cols), 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3(rows, cols); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(((m1.array() + Scalar(1)) > m1.array()).all()); 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(((m1.array() - Scalar(1)) < m1.array()).all()); 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (rows*cols>1) 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3 = m1; 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3(r,c) += 1; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(! (m1.array() < m3.array()).all() ); 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(! (m1.array() > m3.array()).all() ); 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // comparisons to scalar 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY( (m1.array() != (m1(r,c)+1) ).any() ); 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY( (m1.array() > (m1(r,c)-1) ).any() ); 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY( (m1.array() < (m1(r,c)+1) ).any() ); 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY( (m1.array() == m1(r,c) ).any() ); 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test Select 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array()<m2.array()).select(m1,m2), m1.cwiseMin(m2) ); 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array()>m2.array()).select(m1,m2), m1.cwiseMax(m2) ); 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar mid = (m1.cwiseAbs().minCoeff() + m1.cwiseAbs().maxCoeff())/Scalar(2); 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<cols; ++j) 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=0; i<rows; ++i) 1127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m3(i,j) = abs(m1(i,j))<mid ? 0 : m1(i,j); 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array().abs()<MatrixType::Constant(rows,cols,mid).array()) 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath .select(MatrixType::Zero(rows,cols),m1), m3); 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // shorter versions: 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array().abs()<MatrixType::Constant(rows,cols,mid).array()) 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath .select(0,m1), m3); 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array().abs()>=MatrixType::Constant(rows,cols,mid).array()) 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath .select(m1,0), m3); 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // even shorter version: 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX( (m1.array().abs()<mid).select(0,m1), m3); 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // count 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY(((m1.array().abs()+1)>RealScalar(0.1)).count() == rows*cols); 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<typename MatrixType::Index, Dynamic, 1> VectorOfIndices; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // TODO allows colwise/rowwise for array 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(((m1.array().abs()+1)>RealScalar(0.1)).matrix().colwise().count(), VectorOfIndices::Constant(cols,rows).transpose()); 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(((m1.array().abs()+1)>RealScalar(0.1)).matrix().rowwise().count(), VectorOfIndices::Constant(rows, cols)); 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename VectorType> void lpNorm(const VectorType& v) 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1357faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez using std::sqrt; 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VectorType u = VectorType::Random(v.size()); 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(u.template lpNorm<Infinity>(), u.cwiseAbs().maxCoeff()); 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(u.template lpNorm<1>(), u.cwiseAbs().sum()); 1407faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(u.template lpNorm<2>(), sqrt(u.array().abs().square().sum())); 1417faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(numext::pow(u.template lpNorm<5>(), typename VectorType::RealScalar(5)), u.array().abs().pow(5).sum()); 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void cwise_min_max(const MatrixType& m) 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Index Index; 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Scalar Scalar; 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index rows = m.rows(); 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index cols = m.cols(); 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixType m1 = MatrixType::Random(rows, cols); 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // min/max with array 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar maxM1 = m1.maxCoeff(); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar minM1 = m1.minCoeff(); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, minM1), m1.cwiseMin(MatrixType::Constant(rows,cols, minM1))); 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1, m1.cwiseMin(MatrixType::Constant(rows,cols, maxM1))); 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, maxM1), m1.cwiseMax(MatrixType::Constant(rows,cols, maxM1))); 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m1, m1.cwiseMax(MatrixType::Constant(rows,cols, minM1))); 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // min/max with scalar input 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, minM1), m1.cwiseMin( minM1)); 1667faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m1, m1.cwiseMin(maxM1)); 1677faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(-m1, (-m1).cwiseMin(-minM1)); 1687faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(-m1.array(), ((-m1).array().min)( -minM1)); 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, maxM1), m1.cwiseMax( maxM1)); 1717faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m1, m1.cwiseMax(minM1)); 1727faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(-m1, (-m1).cwiseMax(-maxM1)); 1737faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(-m1.array(), ((-m1).array().max)(-maxM1)); 1747faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, minM1).array(), (m1.array().min)( minM1)); 1767faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m1.array(), (m1.array().min)( maxM1)); 1777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1787faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(MatrixType::Constant(rows,cols, maxM1).array(), (m1.array().max)( maxM1)); 1797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m1.array(), (m1.array().max)( minM1)); 1807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez} 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1837faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename MatrixTraits> void resize(const MatrixTraits& t) 1847faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{ 1857faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef typename MatrixTraits::Index Index; 1867faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef typename MatrixTraits::Scalar Scalar; 1877faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Matrix<Scalar,Dynamic,Dynamic> MatrixType; 1887faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Array<Scalar,Dynamic,Dynamic> Array2DType; 1897faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Matrix<Scalar,Dynamic,1> VectorType; 1907faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Array<Scalar,Dynamic,1> Array1DType; 1917faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1927faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez Index rows = t.rows(), cols = t.cols(); 1937faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1947faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez MatrixType m(rows,cols); 1957faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VectorType v(rows); 1967faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez Array2DType a2(rows,cols); 1977faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez Array1DType a1(rows); 1987faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1997faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m.array().resize(rows+1,cols+1); 2007faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY(m.rows()==rows+1 && m.cols()==cols+1); 2017faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez a2.matrix().resize(rows+1,cols+1); 2027faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY(a2.rows()==rows+1 && a2.cols()==cols+1); 2037faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez v.array().resize(cols); 2047faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY(v.size()==cols); 2057faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez a1.matrix().resize(cols); 2067faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY(a1.size()==cols); 2077faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez} 2087faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 2097faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezvoid regression_bug_654() 2107faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{ 2117faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez ArrayXf a = RowVectorXf(3); 2127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VectorXf v = Array<float,1,Dynamic>(3); 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_array_for_matrix() 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( array_for_matrix(Matrix<float, 1, 1>()) ); 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( array_for_matrix(Matrix2f()) ); 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3( array_for_matrix(Matrix4d()) ); 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_4( array_for_matrix(MatrixXcf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_5( array_for_matrix(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_6( array_for_matrix(MatrixXi(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( comparisons(Matrix<float, 1, 1>()) ); 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( comparisons(Matrix2f()) ); 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3( comparisons(Matrix4d()) ); 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_5( comparisons(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_6( comparisons(MatrixXi(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( cwise_min_max(Matrix<float, 1, 1>()) ); 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( cwise_min_max(Matrix2f()) ); 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3( cwise_min_max(Matrix4d()) ); 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_5( cwise_min_max(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_6( cwise_min_max(MatrixXi(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(int i = 0; i < g_repeat; i++) { 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1( lpNorm(Matrix<float, 1, 1>()) ); 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2( lpNorm(Vector2f()) ); 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_7( lpNorm(Vector3d()) ); 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_8( lpNorm(Vector4f()) ); 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_5( lpNorm(VectorXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_4( lpNorm(VectorXcf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 2477faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez for(int i = 0; i < g_repeat; i++) { 2487faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez CALL_SUBTEST_4( resize(MatrixXcf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 2497faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez CALL_SUBTEST_5( resize(MatrixXf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 2507faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez CALL_SUBTEST_6( resize(MatrixXi(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) ); 2517faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez } 2527faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez CALL_SUBTEST_6( regression_bug_654() ); 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 254