aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-10-01 13:27:03 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-10-01 13:27:03 +0200
commit9a3cae465510fad8f671724d71ef59a4a8199125 (patch)
treeff61d999ae7934a0d3d1cbc6c3012df31958a6ea
parent5409ce1625431f9f8149e66028db17e8515ab166 (diff)
better fix for (v * v') * v, we still have to find a way to reorder it
-rw-r--r--Eigen/src/Core/Product.h7
-rw-r--r--test/product_extra.cpp5
-rw-r--r--test/product_small.cpp6
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<Lhs,Rhs,UnrolledProduct>
{
typedef typename ei_nested<Lhs,Rhs::ColsAtCompileTime>::type LhsNested;
typedef typename ei_nested<Rhs,Lhs::RowsAtCompileTime>::type RhsNested;
- typedef GeneralProduct<Lhs, Rhs, UnrolledProduct> Type;
+ typedef GeneralProduct<LhsNested, RhsNested, UnrolledProduct> Type;
};
@@ -212,11 +212,6 @@ class GeneralProduct<Lhs, Rhs, OuterProduct>
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<typename MatrixType> 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);
+ }
}