From d92df04ce893b75c9d2c8ebc463c17a05425edb7 Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Wed, 3 Aug 2016 11:50:07 -0700 Subject: [PATCH] Cleaned up the new float16 test a bit --- unsupported/test/cxx11_float16.cpp | 46 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/unsupported/test/cxx11_float16.cpp b/unsupported/test/cxx11_float16.cpp index 69dfd7e80..f646c9750 100644 --- a/unsupported/test/cxx11_float16.cpp +++ b/unsupported/test/cxx11_float16.cpp @@ -11,12 +11,14 @@ #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int #define EIGEN_USE_GPU +// Make sure it's possible to forward declare Eigen::half +//namespace Eigen { +//struct half; +//} #include "main.h" #include -using Eigen::half; - void test_conversion() { // Conversion from float. @@ -37,8 +39,8 @@ void test_conversion() float val1 = float(Eigen::half(half_impl::__half{0x3c00})); float val2 = float(Eigen::half(half_impl::__half{0x3c01})); float val3 = float(Eigen::half(half_impl::__half{0x3c02})); - VERIFY_IS_EQUAL(Eigen::half(0.5 * (val1 + val2)).x, 0x3c00); - VERIFY_IS_EQUAL(Eigen::half(0.5 * (val2 + val3)).x, 0x3c02); + VERIFY_IS_EQUAL(Eigen::half(0.5f * (val1 + val2)).x, 0x3c00); + VERIFY_IS_EQUAL(Eigen::half(0.5f * (val2 + val3)).x, 0x3c02); // Conversion from int. VERIFY_IS_EQUAL(Eigen::half(-1).x, 0xbc00); @@ -61,26 +63,26 @@ void test_conversion() VERIFY_IS_APPROX(float(Eigen::half(half_impl::__half{0x0002})), 1.19209e-07f); // NaNs and infinities. - VERIFY(!isinf(float(Eigen::half(65504.0f)))); // Largest finite number. - VERIFY(!isnan(float(Eigen::half(0.0f)))); - VERIFY(isinf(float(Eigen::half(half_impl::__half{0xfc00})))); - VERIFY(isnan(float(Eigen::half(half_impl::__half{0xfc01})))); - VERIFY(isinf(float(Eigen::half(half_impl::__half{0x7c00})))); - VERIFY(isnan(float(Eigen::half(half_impl::__half{0x7c01})))); - VERIFY(isnan(float(Eigen::half(0.0 / 0.0)))); - VERIFY(isinf(float(Eigen::half(1.0 / 0.0)))); - VERIFY(isinf(float(Eigen::half(-1.0 / 0.0)))); + VERIFY(!(isinf)(float(Eigen::half(65504.0f)))); // Largest finite number. + VERIFY(!(isnan)(float(Eigen::half(0.0f)))); + VERIFY((isinf)(float(Eigen::half(half_impl::__half{0xfc00})))); + VERIFY((isnan)(float(Eigen::half(half_impl::__half{0xfc01})))); + VERIFY((isinf)(float(Eigen::half(half_impl::__half{0x7c00})))); + VERIFY((isnan)(float(Eigen::half(half_impl::__half{0x7c01})))); + VERIFY((isnan)(float(Eigen::half(0.0 / 0.0)))); + VERIFY((isinf)(float(Eigen::half(1.0 / 0.0)))); + VERIFY((isinf)(float(Eigen::half(-1.0 / 0.0)))); // Exactly same checks as above, just directly on the half representation. - VERIFY(!numext::isinf(Eigen::half(half_impl::__half{0x7bff}))); - VERIFY(!numext::isnan(Eigen::half(half_impl::__half{0x0000}))); - VERIFY(numext::isinf(Eigen::half(half_impl::__half{0xfc00}))); - VERIFY(numext::isnan(Eigen::half(half_impl::__half{0xfc01}))); - VERIFY(numext::isinf(Eigen::half(half_impl::__half{0x7c00}))); - VERIFY(numext::isnan(Eigen::half(half_impl::__half{0x7c01}))); - VERIFY(numext::isnan(Eigen::half(0.0 / 0.0))); - VERIFY(numext::isinf(Eigen::half(1.0 / 0.0))); - VERIFY(numext::isinf(Eigen::half(-1.0 / 0.0))); + VERIFY(!(numext::isinf)(Eigen::half(half_impl::__half{0x7bff}))); + VERIFY(!(numext::isnan)(Eigen::half(half_impl::__half{0x0000}))); + VERIFY((numext::isinf)(Eigen::half(half_impl::__half{0xfc00}))); + VERIFY((numext::isnan)(Eigen::half(half_impl::__half{0xfc01}))); + VERIFY((numext::isinf)(Eigen::half(half_impl::__half{0x7c00}))); + VERIFY((numext::isnan)(Eigen::half(half_impl::__half{0x7c01}))); + VERIFY((numext::isnan)(Eigen::half(0.0 / 0.0))); + VERIFY((numext::isinf)(Eigen::half(1.0 / 0.0))); + VERIFY((numext::isinf)(Eigen::half(-1.0 / 0.0))); } void test_arithmetic()