From 044424b0e2d27a33c985803ed3e736e9af28993d Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 16 Jul 2010 14:02:20 +0200 Subject: fix sum()/prod() on empty matrix making sure this does not affect fixed sized object, extend related unit tests including partial reduction --- test/redux.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'test/redux.cpp') diff --git a/test/redux.cpp b/test/redux.cpp index b28252903..9a1df71a8 100644 --- a/test/redux.cpp +++ b/test/redux.cpp @@ -64,6 +64,10 @@ template void matrixRedux(const MatrixType& m) VERIFY_IS_APPROX(m1.block(r0,c0,r1,c1).prod(), m1.block(r0,c0,r1,c1).eval().prod()); VERIFY_IS_APPROX(m1.block(r0,c0,r1,c1).real().minCoeff(), m1.block(r0,c0,r1,c1).real().eval().minCoeff()); VERIFY_IS_APPROX(m1.block(r0,c0,r1,c1).real().maxCoeff(), m1.block(r0,c0,r1,c1).real().eval().maxCoeff()); + + // test empty objects + VERIFY_IS_APPROX(m1.block(r0,c0,0,0).sum(), Scalar(0)); + VERIFY_IS_APPROX(m1.block(r0,c0,0,0).prod(), Scalar(1)); } template void vectorRedux(const VectorType& w) @@ -124,6 +128,13 @@ template void vectorRedux(const VectorType& w) VERIFY_IS_APPROX(minc, v.real().segment(i, size-2*i).minCoeff()); VERIFY_IS_APPROX(maxc, v.real().segment(i, size-2*i).maxCoeff()); } + + // test empty objects + VERIFY_IS_APPROX(v.head(0).sum(), Scalar(0)); + VERIFY_IS_APPROX(v.tail(0).prod(), Scalar(1)); + VERIFY_RAISES_ASSERT(v.head(0).mean()); + VERIFY_RAISES_ASSERT(v.head(0).minCoeff()); + VERIFY_RAISES_ASSERT(v.head(0).maxCoeff()); } void test_redux() -- cgit v1.2.3