diff options
author | Antonio Sanchez <cantonios@google.com> | 2020-11-19 10:22:42 -0800 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2020-11-24 20:20:36 +0000 |
commit | 22f67b59585805fedf86759f7013b2b670f83386 (patch) | |
tree | 6da38b27b7610b85afb6a3de1affba89d01eb249 /unsupported | |
parent | a3b300f1af7b2bb646c9e64162630ac164802ec8 (diff) |
Fix boolean float conversion and product warnings.
This fixes some gcc warnings such as:
```
Eigen/src/Core/GenericPacketMath.h:655:63: warning: implicit conversion turns floating-point number into bool: 'typename __gnu_cxx::__enable_if<__is_integer<bool>::__value, double>::__type' (aka 'double') to 'bool' [-Wimplicit-conversion-floating-point-to-bool]
Packet psqrt(const Packet& a) { EIGEN_USING_STD(sqrt); return sqrt(a); }
```
Details:
- Added `scalar_sqrt_op<bool>` (`-Wimplicit-conversion-floating-point-to-bool`).
- Added `scalar_square_op<bool>` and `scalar_cube_op<bool>`
specializations (`-Wint-in-bool-context`)
- Deprecated above specialized ops for bool.
- Modified `cxx11_tensor_block_eval` to specialize generator for
booleans (`-Wint-in-bool-context`) and to use `abs` instead of `square` to
avoid deprecated bool ops.
Diffstat (limited to 'unsupported')
-rw-r--r-- | unsupported/test/cxx11_tensor_block_eval.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/unsupported/test/cxx11_tensor_block_eval.cpp b/unsupported/test/cxx11_tensor_block_eval.cpp index a7a49fa1f..b2e26ebb7 100644 --- a/unsupported/test/cxx11_tensor_block_eval.cpp +++ b/unsupported/test/cxx11_tensor_block_eval.cpp @@ -222,7 +222,7 @@ static void test_eval_tensor_unary_expr_block() { input.setRandom(); VerifyBlockEvaluator<T, NumDims, Layout>( - input.square(), [&dims]() { return RandomBlock<Layout>(dims, 1, 10); }); + input.abs(), [&dims]() { return RandomBlock<Layout>(dims, 1, 10); }); } template <typename T, int NumDims, int Layout> @@ -274,7 +274,7 @@ static void test_eval_tensor_broadcast() { // Check that desc.destination() memory is not shared between two broadcast // materializations. VerifyBlockEvaluator<T, NumDims, Layout>( - input.broadcast(bcast) * input.square().broadcast(bcast), + input.broadcast(bcast) * input.abs().broadcast(bcast), [&bcasted_dims]() { return SkewedInnerBlock<Layout>(bcasted_dims); }); } @@ -391,27 +391,46 @@ static void test_eval_tensor_chipping() { // Block expression assignment. VerifyBlockEvaluator<T, NumDims - 1, Layout>( - input.square().chip(chip_offset, chip_dim), + input.abs().chip(chip_offset, chip_dim), [&chipped_dims]() { return FixedSizeBlock(chipped_dims); }); VerifyBlockEvaluator<T, NumDims - 1, Layout>( - input.square().chip(chip_offset, chip_dim), + input.abs().chip(chip_offset, chip_dim), [&chipped_dims]() { return RandomBlock<Layout>(chipped_dims, 1, 10); }); } -template <typename T, int NumDims, int Layout> -static void test_eval_tensor_generator() { - DSizes<Index, NumDims> dims = RandomDims<NumDims>(10, 20); - Tensor<T, NumDims, Layout> input(dims); - input.setRandom(); - auto generator = [](const array<Index, NumDims>& coords) -> T { +template<typename T, int NumDims> +struct SimpleTensorGenerator { + T operator()(const array<Index, NumDims>& coords) const { T result = static_cast<T>(0); for (int i = 0; i < NumDims; ++i) { result += static_cast<T>((i + 1) * coords[i]); } return result; - }; + } +}; + +// Boolean specialization to avoid -Wint-in-bool-context warnings on GCC. +template<int NumDims> +struct SimpleTensorGenerator<bool, NumDims> { + bool operator()(const array<Index, NumDims>& coords) const { + bool result = false; + for (int i = 0; i < NumDims; ++i) { + result ^= coords[i]; + } + return result; + } +}; + + +template <typename T, int NumDims, int Layout> +static void test_eval_tensor_generator() { + DSizes<Index, NumDims> dims = RandomDims<NumDims>(10, 20); + Tensor<T, NumDims, Layout> input(dims); + input.setRandom(); + + auto generator = SimpleTensorGenerator<T, NumDims>(); VerifyBlockEvaluator<T, NumDims, Layout>( input.generate(generator), [&dims]() { return FixedSizeBlock(dims); }); |