diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-01-21 20:43:42 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-01-21 20:43:42 +0100 |
commit | ee37eb4eed09fe35be2acc3699e80f49a44ea99a (patch) | |
tree | 6ae146eacf54d459cf0e4b20a1180bbb25090cbe /test | |
parent | 7cae8918c019feabf6c143c430d0cd82c74aeec3 (diff) |
bug #977: avoid division by 0 in normalize() and normalized().
Diffstat (limited to 'test')
-rw-r--r-- | test/adjoint.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/test/adjoint.cpp b/test/adjoint.cpp index 3b2a53c91..b1e69c2e5 100644 --- a/test/adjoint.cpp +++ b/test/adjoint.cpp @@ -42,6 +42,15 @@ template<> struct adjoint_specific<false> { VERIFY_IS_APPROX(v1, v1.norm() * v3); VERIFY_IS_APPROX(v3, v1.normalized()); VERIFY_IS_APPROX(v3.norm(), RealScalar(1)); + + // check null inputs + VERIFY_IS_APPROX((v1*0).normalized(), (v1*0)); + RealScalar very_small = (std::numeric_limits<RealScalar>::min)(); + VERIFY( (v1*very_small).norm() == 0 ); + VERIFY_IS_APPROX((v1*very_small).normalized(), (v1*very_small)); + v3 = v1*very_small; + v3.normalize(); + VERIFY_IS_APPROX(v3, (v1*very_small)); // check compatibility of dot and adjoint ref = NumTraits<Scalar>::IsInteger ? 0 : (std::max)((std::max)(v1.norm(),v2.norm()),(std::max)((square * v2).norm(),(square.adjoint() * v1).norm())); |