From 9a3cae465510fad8f671724d71ef59a4a8199125 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 1 Oct 2009 13:27:03 +0200 Subject: better fix for (v * v') * v, we still have to find a way to reorder it --- Eigen/src/Core/Product.h | 7 +------ test/product_extra.cpp | 5 ----- test/product_small.cpp | 6 ++++++ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h index 3c5c56f1c..cc751650d 100644 --- a/Eigen/src/Core/Product.h +++ b/Eigen/src/Core/Product.h @@ -135,7 +135,7 @@ struct ProductReturnType { typedef typename ei_nested::type LhsNested; typedef typename ei_nested::type RhsNested; - typedef GeneralProduct Type; + typedef GeneralProduct Type; }; @@ -212,11 +212,6 @@ class GeneralProduct ei_outer_product_selector<(int(Dest::Flags)&RowMajorBit) ? RowMajor : ColMajor>::run(*this, dest, alpha); } - Scalar coeff(int row, int col) const - { - return this->lhs().coeff(row) * this->rhs().coeff(col); - } - private: GeneralProduct& operator=(const GeneralProduct&); }; diff --git a/test/product_extra.cpp b/test/product_extra.cpp index a67e755d2..8e55c6010 100644 --- a/test/product_extra.cpp +++ b/test/product_extra.cpp @@ -114,11 +114,6 @@ template void product_extra(const MatrixType& m) VERIFY_IS_APPROX(m1.col(j2).adjoint() * m1.block(0,j,m1.rows(),c), m1.col(j2).adjoint().eval() * m1.block(0,j,m1.rows(),c).eval()); VERIFY_IS_APPROX(m1.block(i,0,r,m1.cols()) * m1.row(i2).adjoint(), m1.block(i,0,r,m1.cols()).eval() * m1.row(i2).adjoint().eval()); - - // test (outer_product) * vector with and without temporary - ColVectorType vc3 = ColVectorType::Random(cols), vc4 = ColVectorType::Random(cols); - vcres = (vc2 * vc3.transpose()) * vc4; // without temporary - VERIFY_IS_APPROX(vcres, (vc2 * vc3.transpose()).eval() * vc4); } void test_product_extra() diff --git a/test/product_small.cpp b/test/product_small.cpp index 3aed5cf1b..182af71db 100644 --- a/test/product_small.cpp +++ b/test/product_small.cpp @@ -34,4 +34,10 @@ void test_product_small() CALL_SUBTEST( product(Matrix4d()) ); CALL_SUBTEST( product(Matrix4f()) ); } + + { + // test compilation of (outer_product) * vector + Vector3f v = Vector3f::Random(); + VERIFY_IS_APPROX( (v * v.transpose()) * v, (v * v.transpose()).eval() * v); + } } -- cgit v1.2.3