aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/packetmath.cpp14
-rw-r--r--test/packetmath_test_shared.h11
2 files changed, 18 insertions, 7 deletions
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index f19d72502..ab9bec183 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -933,7 +933,7 @@ void packetmath_complex() {
for (int i = 0; i < size; ++i) {
data1[i] = Scalar(internal::random<RealScalar>(), internal::random<RealScalar>());
}
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, size);
// Test misc. corner cases.
const RealScalar zero = RealScalar(0);
@@ -944,32 +944,32 @@ void packetmath_complex() {
data1[1] = Scalar(-zero, zero);
data1[2] = Scalar(one, zero);
data1[3] = Scalar(zero, one);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
data1[0] = Scalar(-one, zero);
data1[1] = Scalar(zero, -one);
data1[2] = Scalar(one, one);
data1[3] = Scalar(-one, -one);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
data1[0] = Scalar(inf, zero);
data1[1] = Scalar(zero, inf);
data1[2] = Scalar(-inf, zero);
data1[3] = Scalar(zero, -inf);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
data1[0] = Scalar(inf, inf);
data1[1] = Scalar(-inf, inf);
data1[2] = Scalar(inf, -inf);
data1[3] = Scalar(-inf, -inf);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
data1[0] = Scalar(nan, zero);
data1[1] = Scalar(zero, nan);
data1[2] = Scalar(nan, one);
data1[3] = Scalar(one, nan);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
data1[0] = Scalar(nan, nan);
data1[1] = Scalar(inf, nan);
data1[2] = Scalar(nan, inf);
data1[3] = Scalar(-inf, nan);
- CHECK_CWISE1(numext::sqrt, internal::psqrt);
+ CHECK_CWISE1_N(numext::sqrt, internal::psqrt, 4);
}
}
diff --git a/test/packetmath_test_shared.h b/test/packetmath_test_shared.h
index f8dc3711c..46a42604b 100644
--- a/test/packetmath_test_shared.h
+++ b/test/packetmath_test_shared.h
@@ -115,6 +115,17 @@ template<typename Scalar> bool areApprox(const Scalar* a, const Scalar* b, int s
VERIFY(test::areApprox(ref, data2, PacketSize) && #POP); \
}
+// Checks component-wise for input of size N. All of data1, data2, and ref
+// should have size at least ceil(N/PacketSize)*PacketSize to avoid memory
+// access errors.
+#define CHECK_CWISE1_N(REFOP, POP, N) { \
+ for (int i=0; i<N; ++i) \
+ ref[i] = REFOP(data1[i]); \
+ for (int j=0; j<N; j+=PacketSize) \
+ internal::pstore(data2 + j, POP(internal::pload<Packet>(data1 + j))); \
+ VERIFY(test::areApprox(ref, data2, N) && #POP); \
+}
+
template<bool Cond,typename Packet>
struct packet_helper
{