From 0e68751b8a0bac59a275b1fe3d818b8259d1cc7f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 6 Jun 2018 19:49:27 +0200 Subject: Fix BLI_ASSERT_UNIT macro w/ non-finite numbers --- source/blender/blenlib/BLI_math_base.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h index 6f8e48d83b2..f455436ce63 100644 --- a/source/blender/blenlib/BLI_math_base.h +++ b/source/blender/blenlib/BLI_math_base.h @@ -200,24 +200,28 @@ double double_round(double x, int ndigits); * check the vector is unit length, or zero length (which can't be helped in some cases). */ #ifndef NDEBUG -/* note: 0.0001 is too small becaues normals may be converted from short's: see [#34322] */ +/** \note 0.0001 is too small becaues normals may be converted from short's: see T34322. */ # define BLI_ASSERT_UNIT_EPSILON 0.0002f +/** + * \note Checks are flipped so NAN doesn't assert. This is done because we're making sure the value was normalized + * and in the case we don't want NAN to be raising asserts since there is nothing to be done in that case. + */ # define BLI_ASSERT_UNIT_V3(v) { \ const float _test_unit = len_squared_v3(v); \ - BLI_assert((fabsf(_test_unit - 1.0f) < BLI_ASSERT_UNIT_EPSILON) || \ - (fabsf(_test_unit) < BLI_ASSERT_UNIT_EPSILON)); \ + BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \ + !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \ } (void)0 # define BLI_ASSERT_UNIT_V2(v) { \ const float _test_unit = len_squared_v2(v); \ - BLI_assert((fabsf(_test_unit - 1.0f) < BLI_ASSERT_UNIT_EPSILON) || \ - (fabsf(_test_unit) < BLI_ASSERT_UNIT_EPSILON)); \ + BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \ + !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \ } (void)0 # define BLI_ASSERT_UNIT_QUAT(q) { \ const float _test_unit = dot_qtqt(q, q); \ - BLI_assert((fabsf(_test_unit - 1.0f) < BLI_ASSERT_UNIT_EPSILON * 10) || \ - (fabsf(_test_unit) < BLI_ASSERT_UNIT_EPSILON * 10)); \ + BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON * 10) || \ + !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON * 10)); \ } (void)0 # define BLI_ASSERT_ZERO_M3(m) { \ -- cgit v1.2.3