1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2011 Benoit Jacob <jacob.benoit.1@gmail.com> 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#define EIGEN_NO_STATIC_ASSERT 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "main.h" 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ArrayType> void vectorwiseop_array(const ArrayType& m) 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename ArrayType::Index Index; 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename ArrayType::Scalar Scalar; 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Array<Scalar, ArrayType::RowsAtCompileTime, 1> ColVectorType; 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Array<Scalar, 1, ArrayType::ColsAtCompileTime> RowVectorType; 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index rows = m.rows(); 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index cols = m.cols(); 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index r = internal::random<Index>(0, rows-1), 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath c = internal::random<Index>(0, cols-1); 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ArrayType m1 = ArrayType::Random(rows, cols), 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2(rows, cols), 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3(rows, cols); 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ColVectorType colvec = ColVectorType::Random(rows); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath RowVectorType rowvec = RowVectorType::Random(cols); 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test addition 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() += colvec; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() + colvec); 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) + colvec); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() += colvec.transpose()); 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() + colvec.transpose()); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() += rowvec; 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() + rowvec); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) + rowvec); 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() += rowvec.transpose()); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() + rowvec.transpose()); 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test substraction 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() -= colvec; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() - colvec); 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) - colvec); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() -= colvec.transpose()); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() - colvec.transpose()); 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() -= rowvec; 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() - rowvec); 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) - rowvec); 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() -= rowvec.transpose()); 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() - rowvec.transpose()); 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test multiplication 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() *= colvec; 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() * colvec); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) * colvec); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() *= colvec.transpose()); 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() * colvec.transpose()); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() *= rowvec; 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() * rowvec); 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) * rowvec); 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() *= rowvec.transpose()); 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() * rowvec.transpose()); 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test quotient 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() /= colvec; 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() / colvec); 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) / colvec); 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() /= colvec.transpose()); 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() / colvec.transpose()); 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() /= rowvec; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() / rowvec); 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) / rowvec); 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() /= rowvec.transpose()); 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() / rowvec.transpose()); 1047faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1057faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2 = m1; 1067faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // yes, there might be an aliasing issue there but ".rowwise() /=" 1077faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // is suppposed to evaluate " m2.colwise().sum()" into to temporary to avoid 1087faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // evaluating the reducions multiple times 1097faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez if(ArrayType::RowsAtCompileTime>2 || ArrayType::RowsAtCompileTime==Dynamic) 1107faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez { 1117faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2.rowwise() /= m2.colwise().sum(); 1127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m2, m1.rowwise() / m1.colwise().sum()); 1137faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez } 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void vectorwiseop_matrix(const MatrixType& m) 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Index Index; 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename MatrixType::Scalar Scalar; 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename NumTraits<Scalar>::Real RealScalar; 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> ColVectorType; 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType; 1237faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Matrix<RealScalar, MatrixType::RowsAtCompileTime, 1> RealColVectorType; 1247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez typedef Matrix<RealScalar, 1, MatrixType::ColsAtCompileTime> RealRowVectorType; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index rows = m.rows(); 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index cols = m.cols(); 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Index r = internal::random<Index>(0, rows-1), 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath c = internal::random<Index>(0, cols-1); 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MatrixType m1 = MatrixType::Random(rows, cols), 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2(rows, cols), 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m3(rows, cols); 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ColVectorType colvec = ColVectorType::Random(rows); 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath RowVectorType rowvec = RowVectorType::Random(cols); 1377faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez RealColVectorType rcres; 1387faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez RealRowVectorType rrres; 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test addition 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() += colvec; 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() + colvec); 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) + colvec); 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() += colvec.transpose()); 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() + colvec.transpose()); 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() += rowvec; 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() + rowvec); 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) + rowvec); 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() += rowvec.transpose()); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() + rowvec.transpose()); 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // test substraction 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.colwise() -= colvec; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.colwise() - colvec); 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.col(c), m1.col(c) - colvec); 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.colwise() -= colvec.transpose()); 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.colwise() - colvec.transpose()); 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2 = m1; 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m2.rowwise() -= rowvec; 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2, m1.rowwise() - rowvec); 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_IS_APPROX(m2.row(r), m1.row(r) - rowvec); 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m2.rowwise() -= rowvec.transpose()); 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath VERIFY_RAISES_ASSERT(m1.rowwise() - rowvec.transpose()); 1757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1767faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // test norm 1777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez rrres = m1.colwise().norm(); 1787faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(rrres(c), m1.col(c).norm()); 1797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez rcres = m1.rowwise().norm(); 1807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(rcres(r), m1.row(r).norm()); 1817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1827faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // test normalized 1837faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2 = m1.colwise().normalized(); 1847faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m2.col(c), m1.col(c).normalized()); 1857faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2 = m1.rowwise().normalized(); 1867faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m2.row(r), m1.row(r).normalized()); 1877faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 1887faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez // test normalize 1897faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2 = m1; 1907faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2.colwise().normalize(); 1917faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m2.col(c), m1.col(c).normalized()); 1927faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2 = m1; 1937faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m2.rowwise().normalize(); 1947faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez VERIFY_IS_APPROX(m2.row(r), m1.row(r).normalized()); 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid test_vectorwiseop() 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_1(vectorwiseop_array(Array22cd())); 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_2(vectorwiseop_array(Array<double, 3, 2>())); 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_3(vectorwiseop_array(ArrayXXf(3, 4))); 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_4(vectorwiseop_matrix(Matrix4cf())); 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_5(vectorwiseop_matrix(Matrix<float,4,5>())); 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CALL_SUBTEST_6(vectorwiseop_matrix(MatrixXd(7,2))); 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 206