diff options
author | Ilya Tokar <tokarip@google.com> | 2019-12-16 16:00:35 -0500 |
---|---|---|
committer | Ilya Tokar <tokarip@google.com> | 2020-01-07 21:22:44 +0000 |
commit | 19876ced76bd1730008e02fc4c43c2228faed38a (patch) | |
tree | 22f999134e79f84f6f9dc0d19bdfa6740db416f0 /test | |
parent | d0ae052da4ce25a5b4306bfbb5bf8edcd010b663 (diff) |
Bug #1785: Introduce numext::rint.
This provides a new op that matches std::rint and previous behavior of
pround. Also adds corresponding unsupported/../Tensor op.
Performance is the same as e. g. floor (tested SSE/AVX).
Diffstat (limited to 'test')
-rw-r--r-- | test/array_cwise.cpp | 6 | ||||
-rw-r--r-- | test/packetmath.cpp | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp index 48ebcc88b..76fc83c33 100644 --- a/test/array_cwise.cpp +++ b/test/array_cwise.cpp @@ -296,6 +296,7 @@ template<typename ArrayType> void array_real(const ArrayType& m) VERIFY_IS_APPROX(m1.arg(), arg(m1)); VERIFY_IS_APPROX(m1.round(), round(m1)); + VERIFY_IS_APPROX(m1.rint(), rint(m1)); VERIFY_IS_APPROX(m1.floor(), floor(m1)); VERIFY_IS_APPROX(m1.ceil(), ceil(m1)); VERIFY((m1.isNaN() == (Eigen::isnan)(m1)).all()); @@ -331,6 +332,11 @@ template<typename ArrayType> void array_real(const ArrayType& m) VERIFY_IS_APPROX(logistic(m1), (1.0/(1.0+exp(-m1)))); VERIFY_IS_APPROX(arg(m1), ((m1<0).template cast<Scalar>())*std::acos(-1.0)); VERIFY((round(m1) <= ceil(m1) && round(m1) >= floor(m1)).all()); + VERIFY((rint(m1) <= ceil(m1) && rint(m1) >= floor(m1)).all()); + VERIFY(((ceil(m1) - round(m1)) <= Scalar(0.5) || (round(m1) - floor(m1)) <= Scalar(0.5)).all()); + VERIFY(((ceil(m1) - round(m1)) <= Scalar(1.0) && (round(m1) - floor(m1)) <= Scalar(1.0)).all()); + VERIFY(((ceil(m1) - rint(m1)) <= Scalar(0.5) || (rint(m1) - floor(m1)) <= Scalar(0.5)).all()); + VERIFY(((ceil(m1) - rint(m1)) <= Scalar(1.0) && (rint(m1) - floor(m1)) <= Scalar(1.0)).all()); VERIFY((Eigen::isnan)((m1*0.0)/0.0).all()); VERIFY((Eigen::isinf)(m4/0.0).all()); VERIFY(((Eigen::isfinite)(m1) && (!(Eigen::isfinite)(m1*0.0/0.0)) && (!(Eigen::isfinite)(m4/0.0))).all()); diff --git a/test/packetmath.cpp b/test/packetmath.cpp index 9564bc283..ba250443a 100644 --- a/test/packetmath.cpp +++ b/test/packetmath.cpp @@ -518,6 +518,7 @@ template<typename Scalar,typename Packet> void packetmath_real() CHECK_CWISE1_IF(PacketTraits::HasRound, numext::round, internal::pround); CHECK_CWISE1_IF(PacketTraits::HasCeil, numext::ceil, internal::pceil); CHECK_CWISE1_IF(PacketTraits::HasFloor, numext::floor, internal::pfloor); + CHECK_CWISE1_IF(PacketTraits::HasRint, numext::rint, internal::print); // See bug 1785. for (int i=0; i<size; ++i) @@ -526,6 +527,7 @@ template<typename Scalar,typename Packet> void packetmath_real() data2[i] = -1.5 + i; } CHECK_CWISE1_IF(PacketTraits::HasRound, numext::round, internal::pround); + CHECK_CWISE1_IF(PacketTraits::HasRint, numext::rint, internal::print); for (int i=0; i<size; ++i) { |