| 481 | } |
| 482 | |
| 483 | template<typename Scalar> void packetmath_notcomplex() |
| 484 | { |
| 485 | using std::abs; |
| 486 | typedef internal::packet_traits<Scalar> PacketTraits; |
| 487 | typedef typename PacketTraits::type Packet; |
| 488 | const int PacketSize = PacketTraits::size; |
| 489 | |
| 490 | EIGEN_ALIGN_MAX Scalar data1[PacketTraits::size*4]; |
| 491 | EIGEN_ALIGN_MAX Scalar data2[PacketTraits::size*4]; |
| 492 | EIGEN_ALIGN_MAX Scalar ref[PacketTraits::size*4]; |
| 493 | |
| 494 | Array<Scalar,Dynamic,1>::Map(data1, PacketTraits::size*4).setRandom(); |
| 495 | |
| 496 | ref[0] = data1[0]; |
| 497 | for (int i=0; i<PacketSize; ++i) |
| 498 | ref[0] = (std::min)(ref[0],data1[i]); |
| 499 | VERIFY(internal::isApprox(ref[0], internal::predux_min(internal::pload<Packet>(data1))) && "internal::predux_min"); |
| 500 | |
| 501 | VERIFY((!PacketTraits::Vectorizable) || PacketTraits::HasMin); |
| 502 | VERIFY((!PacketTraits::Vectorizable) || PacketTraits::HasMax); |
| 503 | |
| 504 | CHECK_CWISE2_IF(PacketTraits::HasMin, (std::min), internal::pmin); |
| 505 | CHECK_CWISE2_IF(PacketTraits::HasMax, (std::max), internal::pmax); |
| 506 | CHECK_CWISE1(abs, internal::pabs); |
| 507 | |
| 508 | ref[0] = data1[0]; |
| 509 | for (int i=0; i<PacketSize; ++i) |
| 510 | ref[0] = (std::max)(ref[0],data1[i]); |
| 511 | VERIFY(internal::isApprox(ref[0], internal::predux_max(internal::pload<Packet>(data1))) && "internal::predux_max"); |
| 512 | |
| 513 | for (int i=0; i<PacketSize; ++i) |
| 514 | ref[i] = data1[0]+Scalar(i); |
| 515 | internal::pstore(data2, internal::plset<Packet>(data1[0])); |
| 516 | VERIFY(areApprox(ref, data2, PacketSize) && "internal::plset"); |
| 517 | } |
| 518 | |
| 519 | template<typename Scalar,bool ConjLhs,bool ConjRhs> void test_conj_helper(Scalar* data1, Scalar* data2, Scalar* ref, Scalar* pval) |
| 520 | { |
nothing calls this directly
no test coverage detected