From bb69a8db5da21f3c6b289d010eaa64e757387dca Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Thu, 12 Nov 2020 13:12:00 -0800 Subject: Explicit casts of S -> std::complex When calling `internal::cast>(x)`, clang often generates an implicit conversion warning due to an implicit cast from type `S` to `T`. This currently affects the following tests: - `basicstuff` - `bfloat16_float` - `cxx11_tensor_casts` The implicit cast leads to widening/narrowing float conversions. Widening warnings only seem to be generated by clang (`-Wdouble-promotion`). To eliminate the warning, we explicitly cast the real-component first from `S` to `T`. We also adjust tests to use `internal::cast` instead of `static_cast` when a complex type may be involved. --- test/bfloat16_float.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'test/bfloat16_float.cpp') diff --git a/test/bfloat16_float.cpp b/test/bfloat16_float.cpp index 79c868e84..09df2b2f2 100644 --- a/test/bfloat16_float.cpp +++ b/test/bfloat16_float.cpp @@ -44,14 +44,14 @@ void test_truncate(float input, float expected_truncation, float expected_roundi template void test_roundtrip() { // Representable T round trip via bfloat16 - VERIFY_IS_EQUAL(static_cast(static_cast(-std::numeric_limits::infinity())), -std::numeric_limits::infinity()); - VERIFY_IS_EQUAL(static_cast(static_cast(std::numeric_limits::infinity())), std::numeric_limits::infinity()); - VERIFY_IS_EQUAL(static_cast(static_cast(T(-1.0))), T(-1.0)); - VERIFY_IS_EQUAL(static_cast(static_cast(T(-0.5))), T(-0.5)); - VERIFY_IS_EQUAL(static_cast(static_cast(T(-0.0))), T(-0.0)); - VERIFY_IS_EQUAL(static_cast(static_cast(T(1.0))), T(1.0)); - VERIFY_IS_EQUAL(static_cast(static_cast(T(0.5))), T(0.5)); - VERIFY_IS_EQUAL(static_cast(static_cast(T(0.0))), T(0.0)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(-std::numeric_limits::infinity()))), -std::numeric_limits::infinity()); + VERIFY_IS_EQUAL((internal::cast(internal::cast(std::numeric_limits::infinity()))), std::numeric_limits::infinity()); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(-1.0)))), T(-1.0)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(-0.5)))), T(-0.5)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(-0.0)))), T(-0.0)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(1.0)))), T(1.0)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(0.5)))), T(0.5)); + VERIFY_IS_EQUAL((internal::cast(internal::cast(T(0.0)))), T(0.0)); } void test_conversion() -- cgit v1.2.3