diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-12-09 02:38:07 -0500 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-12-09 02:38:07 -0500 |
commit | 1be6449f2e1bd51393a55b06b967f43dc9be6ec6 (patch) | |
tree | 62514552dd373959719c131237f0c4d00d1fe393 /test/product_extra.cpp | |
parent | 819bcbed192b3b04962bdcc8e99605280e21b4a1 (diff) |
fix bug #127. our product selection logic was flawed in that it used the Max-sized to determine whether the size is 1.
+ test.
Diffstat (limited to 'test/product_extra.cpp')
-rw-r--r-- | test/product_extra.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/product_extra.cpp b/test/product_extra.cpp index fcedacb2c..60f00a4da 100644 --- a/test/product_extra.cpp +++ b/test/product_extra.cpp @@ -116,6 +116,30 @@ template<typename MatrixType> void product_extra(const MatrixType& m) VERIFY_IS_APPROX(tmp, m1 * m1.adjoint() * s1); } +void zero_sized_objects() +{ + // Bug 127 + // + // a product of the form lhs*rhs with + // + // lhs: + // rows = 1, cols = 4 + // RowsAtCompileTime = 1, ColsAtCompileTime = -1 + // MaxRowsAtCompileTime = 1, MaxColsAtCompileTime = 5 + // + // rhs: + // rows = 4, cols = 0 + // RowsAtCompileTime = -1, ColsAtCompileTime = -1 + // MaxRowsAtCompileTime = 5, MaxColsAtCompileTime = 1 + // + // was failing on a runtime assertion, because it had been mis-compiled as a dot product because Product.h was using the + // max-sizes to detect size 1 indicating vectors, and that didn't account for 0-sized object with max-size 1. + + Matrix<float,1,Dynamic,RowMajor,1,5> a(1,4); + Matrix<float,Dynamic,Dynamic,ColMajor,5,1> b(4,0); + a*b; +} + void test_product_extra() { for(int i = 0; i < g_repeat; i++) { @@ -123,5 +147,6 @@ void test_product_extra() CALL_SUBTEST_2( product_extra(MatrixXd(internal::random<int>(1,320), internal::random<int>(1,320))) ); CALL_SUBTEST_3( product_extra(MatrixXcf(internal::random<int>(1,150), internal::random<int>(1,150))) ); CALL_SUBTEST_4( product_extra(MatrixXcd(internal::random<int>(1,150), internal::random<int>(1,150))) ); + CALL_SUBTEST_5( zero_sized_objects() ); } } |