aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/stable_norm.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-01-23 22:40:11 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-01-23 22:40:11 +0100
commit1cf85bd875ecbcfa1240b4ec08122d40d79101fd (patch)
tree64dacc9ef8e8f8fd6d4de1a707fff0c3d73c917f /test/stable_norm.cpp
parent369d6d1ae31c3e1a0f03196ccb9c792c6913ed76 (diff)
bug #977: add stableNormalize[d] methods: they are analogues to normalize[d] but with carefull handling of under/over-flow
Diffstat (limited to 'test/stable_norm.cpp')
-rw-r--r--test/stable_norm.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/stable_norm.cpp b/test/stable_norm.cpp
index 7561ae8be..9f12320e0 100644
--- a/test/stable_norm.cpp
+++ b/test/stable_norm.cpp
@@ -163,6 +163,20 @@ template<typename MatrixType> void stable_norm(const MatrixType& m)
VERIFY(!(numext::isfinite)(v.blueNorm())); VERIFY((numext::isnan)(v.blueNorm()));
VERIFY(!(numext::isfinite)(v.hypotNorm())); VERIFY((numext::isnan)(v.hypotNorm()));
}
+
+ // stableNormalize[d]
+ {
+ VERIFY_IS_APPROX(vrand.stableNormalized(), vrand.normalized());
+ MatrixType vcopy(vrand);
+ vcopy.stableNormalize();
+ VERIFY_IS_APPROX(vcopy, vrand.normalized());
+ VERIFY_IS_APPROX((vrand.stableNormalized()).norm(), RealScalar(1));
+ VERIFY_IS_APPROX(vcopy.norm(), RealScalar(1));
+ VERIFY_IS_APPROX((vbig.stableNormalized()).norm(), RealScalar(1));
+ VERIFY_IS_APPROX((vsmall.stableNormalized()).norm(), RealScalar(1));
+ VERIFY_IS_APPROX(vbig, vbig.stableNorm() * vbig.stableNormalized());
+ VERIFY_IS_APPROX(vsmall, vsmall.stableNorm() * vsmall.stableNormalized());
+ }
}
void test_stable_norm()