aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-09-25 14:54:35 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-09-25 14:54:35 +0200
commit48dfe98abd00f2cb9b62d157f805f69d01b7892b (patch)
treee211b1d152c54f11f3941b0cf61e573ba252367b
parent86caba838db00ed977ed160a893d0a749856a215 (diff)
bug #1308: fix compilation of vector * rowvector::nullary.
-rw-r--r--Eigen/src/Core/ProductEvaluators.h4
-rw-r--r--test/product_extra.cpp16
2 files changed, 18 insertions, 2 deletions
diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h
index b8f92a3dc..8a079fed1 100644
--- a/Eigen/src/Core/ProductEvaluators.h
+++ b/Eigen/src/Core/ProductEvaluators.h
@@ -265,7 +265,7 @@ void outer_product_selector_run(Dst& dst, const Lhs &lhs, const Rhs &rhs, const
// FIXME not very good if rhs is real and lhs complex while alpha is real too
const Index cols = dst.cols();
for (Index j=0; j<cols; ++j)
- func(dst.col(j), rhsEval.coeff(0,j) * actual_lhs);
+ func(dst.col(j), rhsEval.coeff(Index(0),j) * actual_lhs);
}
// Row major result
@@ -278,7 +278,7 @@ void outer_product_selector_run(Dst& dst, const Lhs &lhs, const Rhs &rhs, const
// FIXME not very good if lhs is real and rhs complex while alpha is real too
const Index rows = dst.rows();
for (Index i=0; i<rows; ++i)
- func(dst.row(i), lhsEval.coeff(i,0) * actual_rhs);
+ func(dst.row(i), lhsEval.coeff(i,Index(0)) * actual_rhs);
}
template<typename Lhs, typename Rhs>
diff --git a/test/product_extra.cpp b/test/product_extra.cpp
index d253fd7ed..39abe82bb 100644
--- a/test/product_extra.cpp
+++ b/test/product_extra.cpp
@@ -256,6 +256,20 @@ Index compute_block_size()
return ret;
}
+
+
+template<int>
+void bug_1308()
+{
+ int n = 10;
+ MatrixXd r(n,n);
+ VectorXd v = VectorXd::Random(n);
+ r = v * RowVectorXd::Ones(n);
+ VERIFY_IS_APPROX(r, v.rowwise().replicate(n));
+ r = VectorXd::Ones(n) * v.transpose();
+ VERIFY_IS_APPROX(r, v.rowwise().replicate(n).transpose());
+}
+
void test_product_extra()
{
for(int i = 0; i < g_repeat; i++) {
@@ -268,8 +282,10 @@ void test_product_extra()
}
CALL_SUBTEST_5( bug_127<0>() );
CALL_SUBTEST_5( bug_817<0>() );
+ CALL_SUBTEST_5( bug_1308<0>() );
CALL_SUBTEST_6( unaligned_objects<0>() );
CALL_SUBTEST_7( compute_block_size<float>() );
CALL_SUBTEST_7( compute_block_size<double>() );
CALL_SUBTEST_7( compute_block_size<std::complex<double> >() );
+
}