tests:
* change test_is_equal so it just checks for equality, doesn't try anymore to allow to ignoring the difference between col and row vectors.
(needed for the upcoming Index types change)
* in ei_assert, don't report on cerr if we're inside of VERIFY_RAISES_ASSERT
diff --git a/test/block.cpp b/test/block.cpp
index f7529dd..2c28253 100644
--- a/test/block.cpp
+++ b/test/block.cpp
@@ -113,15 +113,15 @@
VERIFY_IS_EQUAL( (m1.block(r1,c1,rows-r1,cols-c1).block(r2-r1,c2-c1,rows-r2,cols-c2)) , (m1.block(r2,c2,rows-r2,cols-c2)) );
VERIFY_IS_EQUAL( (m1.block(r1,c1,r2-r1+1,c2-c1+1).row(0)) , (m1.row(r1).segment(c1,c2-c1+1)) );
VERIFY_IS_EQUAL( (m1.block(r1,c1,r2-r1+1,c2-c1+1).col(0)) , (m1.col(c1).segment(r1,r2-r1+1)) );
- VERIFY_IS_EQUAL( (m1.block(r1,c1,r2-r1+1,c2-c1+1).transpose().col(0)) , (m1.row(r1).segment(c1,c2-c1+1)) );
- VERIFY_IS_EQUAL( (m1.transpose().block(c1,r1,c2-c1+1,r2-r1+1).col(0)) , (m1.row(r1).segment(c1,c2-c1+1)) );
+ VERIFY_IS_EQUAL( (m1.block(r1,c1,r2-r1+1,c2-c1+1).transpose().col(0)) , (m1.row(r1).segment(c1,c2-c1+1)).transpose() );
+ VERIFY_IS_EQUAL( (m1.transpose().block(c1,r1,c2-c1+1,r2-r1+1).col(0)) , (m1.row(r1).segment(c1,c2-c1+1)).transpose() );
// expressions without direct access
VERIFY_IS_EQUAL( ((m1+m2).block(r1,c1,rows-r1,cols-c1).block(r2-r1,c2-c1,rows-r2,cols-c2)) , ((m1+m2).block(r2,c2,rows-r2,cols-c2)) );
VERIFY_IS_EQUAL( ((m1+m2).block(r1,c1,r2-r1+1,c2-c1+1).row(0)) , ((m1+m2).row(r1).segment(c1,c2-c1+1)) );
VERIFY_IS_EQUAL( ((m1+m2).block(r1,c1,r2-r1+1,c2-c1+1).col(0)) , ((m1+m2).col(c1).segment(r1,r2-r1+1)) );
- VERIFY_IS_EQUAL( ((m1+m2).block(r1,c1,r2-r1+1,c2-c1+1).transpose().col(0)) , ((m1+m2).row(r1).segment(c1,c2-c1+1)) );
- VERIFY_IS_EQUAL( ((m1+m2).transpose().block(c1,r1,c2-c1+1,r2-r1+1).col(0)) , ((m1+m2).row(r1).segment(c1,c2-c1+1)) );
+ VERIFY_IS_EQUAL( ((m1+m2).block(r1,c1,r2-r1+1,c2-c1+1).transpose().col(0)) , ((m1+m2).row(r1).segment(c1,c2-c1+1)).transpose() );
+ VERIFY_IS_EQUAL( ((m1+m2).transpose().block(c1,r1,c2-c1+1,r2-r1+1).col(0)) , ((m1+m2).row(r1).segment(c1,c2-c1+1)).transpose() );
// evaluation into plain matrices from expressions with direct access (stress MapBase)
DynamicMatrixType dm;
diff --git a/test/main.h b/test/main.h
index 0c0381f..d1a68be 100644
--- a/test/main.h
+++ b/test/main.h
@@ -69,6 +69,7 @@
// case the exception is not properly caught.
// This may happen when a second exceptions is raise in a destructor.
static bool no_more_assert = false;
+ static bool report_on_cerr_on_assert_failure = true;
struct ei_assert_exception
{
@@ -94,7 +95,8 @@
#define ei_assert(a) \
if( (!(a)) && (!no_more_assert) ) \
- { \
+ { \
+ if(report_on_cerr_on_assert_failure) \
std::cerr << #a << " " __FILE__ << "(" << __LINE__ << ")\n"; \
Eigen::no_more_assert = true; \
throw Eigen::ei_assert_exception(); \
@@ -110,7 +112,9 @@
try { \
Eigen::ei_assert_list.clear(); \
Eigen::ei_push_assert = true; \
+ Eigen::report_on_cerr_on_assert_failure = false; \
a; \
+ Eigen::report_on_cerr_on_assert_failure = true; \
Eigen::ei_push_assert = false; \
std::cerr << "One of the following asserts should have been raised:\n"; \
for (uint ai=0 ; ai<ei_assert_list.size() ; ++ai) \
@@ -127,13 +131,19 @@
if( (!(a)) && (!no_more_assert) ) \
{ \
Eigen::no_more_assert = true; \
+ if(report_on_cerr_on_assert_failure) \
std::cerr << #a << " " __FILE__ << "(" << __LINE__ << ")\n"; \
throw Eigen::ei_assert_exception(); \
}
#define VERIFY_RAISES_ASSERT(a) { \
Eigen::no_more_assert = false; \
- try { a; VERIFY(Eigen::should_raise_an_assert && # a); } \
+ try { \
+ Eigen::report_on_cerr_on_assert_failure = false; \
+ a; \
+ Eigen::report_on_cerr_on_assert_failure = true; \
+ VERIFY(Eigen::should_raise_an_assert && # a); \
+ } \
catch (Eigen::ei_assert_exception e) { VERIFY(true); } \
}
@@ -357,46 +367,8 @@
return m.isUnitary(test_precision<typename ei_traits<Derived>::Scalar>());
}
-template<typename Derived1, typename Derived2,
- bool IsVector = bool(Derived1::IsVectorAtCompileTime) && bool(Derived2::IsVectorAtCompileTime) >
-struct test_is_equal_impl
-{
- static bool run(const Derived1& a1, const Derived2& a2)
- {
- if(a1.size() == 0 && a2.size() == 0) return true;
- if(a1.size() != a2.size()) return false;
- // we evaluate a2 into a temporary of the shape of a1. this allows to let Assign.h handle the transposing if needed.
- typename Derived1::PlainObject a2_evaluated(a2.size());
- a2_evaluated(0,0) = a2(0,0); // shut up GCC 4.5.0 bogus warning about a2_evaluated's array being used uninitialized in the 1x1 case, see block_1 test
- a2_evaluated = a2;
- for(int i = 0; i < a1.size(); ++i)
- if(a1.coeff(i) != a2_evaluated.coeff(i)) return false;
- return true;
- }
-};
-
-template<typename Derived1, typename Derived2>
-struct test_is_equal_impl<Derived1, Derived2, false>
-{
- static bool run(const Derived1& a1, const Derived2& a2)
- {
- if(a1.size() == 0 && a2.size() == 0) return true;
- if(a1.rows() != a2.rows()) return false;
- if(a1.cols() != a2.cols()) return false;
- for(int j = 0; j < a1.cols(); ++j)
- for(int i = 0; i < a1.rows(); ++i)
- if(a1.coeff(i,j) != a2.coeff(i,j)) return false;
- return true;
- }
-};
-
-template<typename Derived1, typename Derived2>
-bool test_is_equal(const Derived1& a1, const Derived2& a2)
-{
- return test_is_equal_impl<Derived1, Derived2>::run(a1, a2);
-}
-
-bool test_is_equal(const int actual, const int expected)
+template<typename T, typename U>
+bool test_is_equal(T actual, U expected)
{
if (actual==expected)
return true;