diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h index 94b18584e..71862fa1c 100644 --- a/Eigen/src/Core/GenericPacketMath.h +++ b/Eigen/src/Core/GenericPacketMath.h @@ -1562,6 +1562,37 @@ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet pcarg(const Packet& a) { return (Packet)pand(result, peven_mask(result)); // atan2 0 atan2 0 ... } +#ifndef EIGEN_NO_IO + +template +class StreamablePacket { + public: + using Scalar = typename unpacket_traits::type; + StreamablePacket(const Packet& packet) { pstoreu(v_, packet); } + + friend std::ostream& operator<<(std::ostream& os, const StreamablePacket& packet) { + os << "{" << packet.v_[0]; + for (int i = 1; i < unpacket_traits::size; ++i) { + os << "," << packet.v_[i]; + } + os << "}"; + return os; + } + + private: + Scalar v_[unpacket_traits::size]; +}; + +/** + * \internal \returns an intermediary that can be used to ostream packets, e.g. for debugging. + */ +template +StreamablePacket postream(const Packet& packet) { + return StreamablePacket(packet); +} + +#endif // EIGEN_NO_IO + } // end namespace internal } // end namespace Eigen diff --git a/test/packet_ostream.h b/test/packet_ostream.h deleted file mode 100644 index 4a3ee9caf..000000000 --- a/test/packet_ostream.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef TEST_PACKET_OSTREAM -#define TEST_PACKET_OSTREAM - -#include -#include - -// Include this header to be able to print Packets while debugging. - -template ::vectorizable || - Eigen::internal::unpacket_traits::size > 1)> > -std::ostream& operator<<(std::ostream& os, const Packet& packet) { - using Scalar = typename Eigen::internal::unpacket_traits::type; - Scalar v[Eigen::internal::unpacket_traits::size]; - Eigen::internal::pstoreu(v, packet); - os << "{" << v[0]; - for (int i = 1; i < Eigen::internal::unpacket_traits::size; ++i) { - os << "," << v[i]; - } - os << "}"; - return os; -} - -#endif // TEST_PACKET_OSTREAM \ No newline at end of file diff --git a/test/packetmath.cpp b/test/packetmath.cpp index ed3950927..7333ad8fa 100644 --- a/test/packetmath.cpp +++ b/test/packetmath.cpp @@ -10,7 +10,6 @@ #include "packetmath_test_shared.h" #include "random_without_cast_overflow.h" -#include "packet_ostream.h" template inline T REF_ADD(const T& a, const T& b) { @@ -630,6 +629,7 @@ void packetmath() { negate_test(data1, data2, ref, PacketSize); CHECK_CWISE1_IF(PacketTraits::HasReciprocal, REF_RECIPROCAL, internal::preciprocal); CHECK_CWISE1(numext::conj, internal::pconj); + CHECK_CWISE1_IF(PacketTraits::HasSign, numext::sign, internal::psign); for (int offset = 0; offset < 3; ++offset) {