aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2013-02-23 22:58:14 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2013-02-23 22:58:14 +0100
commit42af5870a4a0385f9b9fd272a158460708016062 (patch)
tree4b03f6398f560db6fb1e3c7ea051002777187465 /test
parent274c24c26295735011df381df5fb270e59b378c1 (diff)
Fix array unit test: isApprox(log(0),log(0)) is false, and summing up signed float value might result in very small values and thus large numerical errors
Diffstat (limited to 'test')
-rw-r--r--test/array.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/test/array.cpp b/test/array.cpp
index 4c6393d9a..a8fe62585 100644
--- a/test/array.cpp
+++ b/test/array.cpp
@@ -6,7 +6,7 @@
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
+#define EIGEN_DONT_VECTORIZE
#include "main.h"
template<typename ArrayType> void array(const ArrayType& m)
@@ -64,8 +64,11 @@ template<typename ArrayType> void array(const ArrayType& m)
VERIFY_IS_APPROX(m1, m3 / m2);
// reductions
- VERIFY_IS_APPROX(m1.colwise().sum().sum(), m1.sum());
- VERIFY_IS_APPROX(m1.rowwise().sum().sum(), m1.sum());
+ VERIFY_IS_APPROX(m1.abs().colwise().sum().sum(), m1.abs().sum());
+ VERIFY_IS_APPROX(m1.abs().rowwise().sum().sum(), m1.abs().sum());
+ using std::abs;
+ VERIFY_IS_MUCH_SMALLER_THAN(abs(m1.colwise().sum().sum() - m1.sum()), m1.abs().sum());
+ VERIFY_IS_MUCH_SMALLER_THAN(abs(m1.rowwise().sum().sum() - m1.sum()), m1.abs().sum());
if (!internal::isApprox(m1.sum(), (m1+m2).sum(), test_precision<Scalar>()))
VERIFY_IS_NOT_APPROX(((m1+m2).rowwise().sum()).sum(), m1.sum());
VERIFY_IS_APPROX(m1.colwise().sum(), m1.colwise().redux(internal::scalar_sum_op<Scalar>()));
@@ -188,8 +191,7 @@ template<typename ArrayType> void array_real(const ArrayType& m)
if(!NumTraits<Scalar>::IsComplex)
VERIFY_IS_APPROX(internal::real(m1), m1);
- //VERIFY_IS_APPROX(m1.abs().log(), std::log(std::abs(m1)));
- VERIFY_IS_APPROX(m1.abs().log(), log(abs(m1)));
+ VERIFY((m1.abs().log() == log(abs(m1))).all());
// VERIFY_IS_APPROX(m1.exp(), std::exp(m1));
VERIFY_IS_APPROX(m1.exp() * m2.exp(), exp(m1+m2));