aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2018-12-23 16:13:24 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2018-12-23 16:13:24 +0100
commit38d704def8b6799b14c319d6a67c671374daccc3 (patch)
tree6b65c80fdd49d89b5b2b669a5c879195346bc54b /test
parent5713fb7febf24140bfe748d8b868391f01828992 (diff)
Make sure that psin/pcos return number in [-1,1] for large inputs (though sin/cos on large entries is quite useless because it's inaccurate)
Diffstat (limited to 'test')
-rw-r--r--test/packetmath.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index 7e46b01de..bf0312a73 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -564,6 +564,22 @@ template<typename Scalar,typename Packet> void packetmath_real()
VERIFY((numext::isnan)(data2[0]));
VERIFY((numext::isnan)(data2[1]));
}
+ if(PacketTraits::HasCos)
+ {
+ packet_helper<PacketTraits::HasCos,Packet> h;
+ for(Scalar k = 1; k<Scalar(1000)/std::numeric_limits<Scalar>::epsilon(); k*=2) {
+ data1[0] = k*Scalar(EIGEN_PI) * internal::random<Scalar>(0.8,1.2);
+ data1[1] = (k+1)*Scalar(EIGEN_PI) * internal::random<Scalar>(0.8,1.2);
+ h.store(data2, internal::pcos(h.load(data1)));
+ VERIFY(data2[0]<=Scalar(1.) && data2[0]>=Scalar(-1.));
+ VERIFY(data2[1]<=Scalar(1.) && data2[1]>=Scalar(-1.));
+ data1[0] = (2*k+1)*Scalar(EIGEN_PI)/2 * internal::random<Scalar>(0.8,1.2);
+ data1[1] = (2*k+3)*Scalar(EIGEN_PI)/2 * internal::random<Scalar>(0.8,1.2);
+ h.store(data2, internal::psin(h.load(data1)));
+ VERIFY(data2[0]<=Scalar(1.) && data2[0]>=Scalar(-1.));
+ VERIFY(data2[1]<=Scalar(1.) && data2[1]>=Scalar(-1.));
+ }
+ }
}
}