mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-19 08:09:36 +08:00
fix pexp_complex_test
This commit is contained in:
parent
be06c9ad51
commit
18a161bf17
@ -1332,6 +1332,52 @@ void test_conj_helper(Scalar* data1, Scalar* data2, Scalar* ref, Scalar* pval) {
|
||||
VERIFY(test::areApprox(ref, pval, PacketSize) && "conj_helper pmadd");
|
||||
}
|
||||
|
||||
template <typename Scalar, typename Packet, bool HasExp = internal::packet_traits<Scalar>::HasExp>
|
||||
struct exp_complex_test_impl {
|
||||
typedef typename Scalar::value_type RealScalar;
|
||||
static void run(Scalar* data1, Scalar* data2, Scalar* ref, Index size) {
|
||||
const int PacketSize = internal::unpacket_traits<Packet>::size;
|
||||
|
||||
for (int i = 0; i < size; ++i) {
|
||||
data1[i] = Scalar(internal::random<RealScalar>(), internal::random<RealScalar>());
|
||||
}
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, size);
|
||||
|
||||
// Test misc. corner cases.
|
||||
const RealScalar zero = RealScalar(0);
|
||||
const RealScalar one = RealScalar(1);
|
||||
const RealScalar inf = std::numeric_limits<RealScalar>::infinity();
|
||||
const RealScalar nan = std::numeric_limits<RealScalar>::quiet_NaN();
|
||||
for (RealScalar x : {zero, one, inf}) {
|
||||
for (RealScalar y : {zero, one, inf}) {
|
||||
data1[0] = Scalar(x, y);
|
||||
data1[1] = Scalar(-x, y);
|
||||
data1[2] = Scalar(x, -y);
|
||||
data1[3] = Scalar(-x, -y);
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, 4);
|
||||
}
|
||||
}
|
||||
for (RealScalar x : {zero, one, inf}) {
|
||||
data1[0] = Scalar(x, nan);
|
||||
data1[1] = Scalar(-x, nan);
|
||||
data1[2] = Scalar(nan, x);
|
||||
data1[3] = Scalar(nan, -x);
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, 4);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Scalar, typename Packet>
|
||||
struct exp_complex_test_impl<Scalar, Packet, false> {
|
||||
typedef typename Scalar::value_type RealScalar;
|
||||
static void run(Scalar*, Scalar*, Scalar*, Index){};
|
||||
};
|
||||
|
||||
template <typename Scalar, typename Packet>
|
||||
void exp_complex_test(Scalar* data1, Scalar* data2, Scalar* ref, Index size) {
|
||||
exp_complex_test_impl<Scalar, Packet>::run(data1, data2, ref, size);
|
||||
}
|
||||
|
||||
template <typename Scalar, typename Packet>
|
||||
void packetmath_complex() {
|
||||
typedef internal::packet_traits<Scalar> PacketTraits;
|
||||
@ -1447,35 +1493,7 @@ void packetmath_complex() {
|
||||
data1[3] = Scalar(nan, -inf);
|
||||
CHECK_CWISE1_IM1ULP_N(std::log, internal::plog, 4);
|
||||
}
|
||||
|
||||
if (PacketTraits::HasExp) {
|
||||
for (int i = 0; i < size; ++i) {
|
||||
data1[i] = Scalar(internal::random<RealScalar>(), internal::random<RealScalar>());
|
||||
}
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, size);
|
||||
|
||||
// Test misc. corner cases.
|
||||
const RealScalar zero = RealScalar(0);
|
||||
const RealScalar one = RealScalar(1);
|
||||
const RealScalar inf = std::numeric_limits<RealScalar>::infinity();
|
||||
const RealScalar nan = std::numeric_limits<RealScalar>::quiet_NaN();
|
||||
for (RealScalar x : {zero, one, inf}) {
|
||||
for (RealScalar y : {zero, one, inf}) {
|
||||
data1[0] = Scalar(x, y);
|
||||
data1[1] = Scalar(-x, y);
|
||||
data1[2] = Scalar(x, -y);
|
||||
data1[3] = Scalar(-x, -y);
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, 4);
|
||||
}
|
||||
}
|
||||
for (RealScalar x : {zero, one, inf}) {
|
||||
data1[0] = Scalar(x, nan);
|
||||
data1[1] = Scalar(-x, nan);
|
||||
data1[2] = Scalar(nan, x);
|
||||
data1[3] = Scalar(nan, -x);
|
||||
CHECK_CWISE1_N(std::exp, internal::pexp, 4);
|
||||
}
|
||||
}
|
||||
exp_complex_test<Scalar, Packet>(data1, data2, ref, size);
|
||||
}
|
||||
|
||||
template <typename Scalar, typename Packet>
|
||||
|
Loading…
x
Reference in New Issue
Block a user