diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-02-15 21:43:07 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-02-15 21:43:07 +0100 |
commit | f6f057bb7d3fcd24b751cba2e70d416f4a803e1f (patch) | |
tree | cf0d1239c45aac2a3f4da0370a3dcc9c95f65243 /test/product.h | |
parent | 8e1f1ba6a6cf0580da6f8756562f94b6410d5e58 (diff) |
bug #1166: fix shortcomming in gemv when the destination is not a vector at compile-time.
Diffstat (limited to 'test/product.h')
-rw-r--r-- | test/product.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/product.h b/test/product.h index bd92309d2..45bb64958 100644 --- a/test/product.h +++ b/test/product.h @@ -144,6 +144,22 @@ template<typename MatrixType> void product(const MatrixType& m) VERIFY_IS_APPROX(res.col(r).noalias() = square.adjoint() * square.col(r), (square.adjoint() * square.col(r)).eval()); VERIFY_IS_APPROX(res.col(r).noalias() = square * square.col(r), (square * square.col(r)).eval()); + // vector at runtime (see bug 1166) + { + RowSquareMatrixType ref(square); + ColSquareMatrixType ref2(square2); + ref = res = square; + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.col(0).transpose() * square.transpose(), (ref.row(0) = m1.col(0).transpose() * square.transpose())); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.block(0,0,rows,1).transpose() * square.transpose(), (ref.row(0) = m1.col(0).transpose() * square.transpose())); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.col(0).transpose() * square, (ref.row(0) = m1.col(0).transpose() * square)); + VERIFY_IS_APPROX(res.block(0,0,1,rows).noalias() = m1.block(0,0,rows,1).transpose() * square, (ref.row(0) = m1.col(0).transpose() * square)); + ref2 = res2 = square2; + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.row(0) * square2.transpose(), (ref2.row(0) = m1.row(0) * square2.transpose())); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.block(0,0,1,cols) * square2.transpose(), (ref2.row(0) = m1.row(0) * square2.transpose())); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.row(0) * square2, (ref2.row(0) = m1.row(0) * square2)); + VERIFY_IS_APPROX(res2.block(0,0,1,cols).noalias() = m1.block(0,0,1,cols) * square2, (ref2.row(0) = m1.row(0) * square2)); + } + // inner product { Scalar x = square2.row(c) * square2.col(c2); |