diff options
author | Jakub Lichman <lichman.jakub@gmail.com> | 2021-04-23 19:51:43 +0000 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2021-04-23 19:51:43 +0000 |
commit | 1115f5462ecaa84d3c60479f7e23a530a1a415d2 (patch) | |
tree | 0574b4c33c0af8cc716f06473c861f91d9d5d739 /test | |
parent | 3804ca0d905a0a03357db50abc7468f5f90abc98 (diff) |
Tests for pcmp_lt and pcmp_le added
Diffstat (limited to 'test')
-rw-r--r-- | test/packetmath.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/packetmath.cpp b/test/packetmath.cpp index 67d329a67..79e91c819 100644 --- a/test/packetmath.cpp +++ b/test/packetmath.cpp @@ -279,10 +279,45 @@ void packetmath_boolean_mask_ops() { CHECK_CWISE2_IF(true, internal::pcmp_eq, internal::pcmp_eq); } +template <typename Scalar, typename Packet> +void packetmath_boolean_mask_ops_notcomplex() { + const int PacketSize = internal::unpacket_traits<Packet>::size; + const int size = 2 * PacketSize; + EIGEN_ALIGN_MAX Scalar data1[size]; + EIGEN_ALIGN_MAX Scalar data2[size]; + EIGEN_ALIGN_MAX Scalar ref[size]; + + for (int i = 0; i < PacketSize; ++i) { + data1[i] = internal::random<Scalar>(); + data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0); + } + + CHECK_CWISE2_IF(true, internal::pcmp_le, internal::pcmp_le); + CHECK_CWISE2_IF(true, internal::pcmp_lt, internal::pcmp_lt); + + //Test (-0) <=/< (0) for signed operations + for (int i = 0; i < PacketSize; ++i) { + data1[i] = Scalar(-0.0); + data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0); + } + CHECK_CWISE2_IF(true, internal::pcmp_le, internal::pcmp_le); + CHECK_CWISE2_IF(true, internal::pcmp_lt, internal::pcmp_lt); + + //Test NaN + for (int i = 0; i < PacketSize; ++i) { + data1[i] = NumTraits<Scalar>::quiet_NaN(); + data1[i + PacketSize] = internal::random<bool>() ? data1[i] : Scalar(0); + } + CHECK_CWISE2_IF(true, internal::pcmp_le, internal::pcmp_le); + CHECK_CWISE2_IF(true, internal::pcmp_lt, internal::pcmp_lt); +} + // Packet16b representing bool does not support ptrue, pandnot or pcmp_eq, since the scalar path // (for some compilers) compute the bitwise and with 0x1 of the results to keep the value in [0,1]. template<> void packetmath_boolean_mask_ops<bool, internal::packet_traits<bool>::type>() {} +template<> +void packetmath_boolean_mask_ops_notcomplex<bool, internal::packet_traits<bool>::type>() {} template <typename Scalar, typename Packet> void packetmath_minus_zero_add() { @@ -1020,6 +1055,8 @@ void packetmath_notcomplex() { CHECK_CWISE2_IF(PacketTraits::HasMin, propagate_nan_min, (internal::pmin<PropagateNaN>)); CHECK_CWISE2_IF(PacketTraits::HasMax, propagate_nan_max, internal::pmax<PropagateNaN>); } + + packetmath_boolean_mask_ops_notcomplex<Scalar, Packet>(); } template <typename Scalar, typename Packet, bool ConjLhs, bool ConjRhs> |