aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Rasmus Munk Larsen <rmlarsen@google.com>2020-12-03 22:31:44 +0000
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2020-12-03 22:31:44 +0000
commit4d91519a9be061da5d300079fca17dd0b9328050 (patch)
tree5546a7f478049ce24d8f69f20ad018d6a63ec807 /test
parent25d8ae7465e6430bc2dc7f65800332932d3bb774 (diff)
Add log2() operator to Eigen
Diffstat (limited to 'test')
-rw-r--r--test/array_cwise.cpp4
-rw-r--r--test/packetmath.cpp8
2 files changed, 12 insertions, 0 deletions
diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp
index 48c0935a4..6910f0e1f 100644
--- a/test/array_cwise.cpp
+++ b/test/array_cwise.cpp
@@ -319,6 +319,7 @@ template<typename ArrayType> void array_real(const ArrayType& m)
VERIFY_IS_APPROX(m3.log(), log(m3));
VERIFY_IS_APPROX(m3.log1p(), log1p(m3));
VERIFY_IS_APPROX(m3.log10(), log10(m3));
+ VERIFY_IS_APPROX(m3.log2(), log2(m3));
VERIFY((!(m1>m2) == (m1<=m2)).all());
@@ -372,6 +373,7 @@ template<typename ArrayType> void array_real(const ArrayType& m)
VERIFY_IS_APPROX(pow(m3,RealScalar(-0.5)), m3.rsqrt());
VERIFY_IS_APPROX(log10(m3), log(m3)/log(10));
+ VERIFY_IS_APPROX(log2(m3), log(m3)/log(2));
// scalar by array division
const RealScalar tiny = sqrt(std::numeric_limits<RealScalar>::epsilon());
@@ -423,6 +425,7 @@ template<typename ArrayType> void array_complex(const ArrayType& m)
VERIFY_IS_APPROX(m1.inverse(), inverse(m1));
VERIFY_IS_APPROX(m1.log(), log(m1));
VERIFY_IS_APPROX(m1.log10(), log10(m1));
+ VERIFY_IS_APPROX(m1.log2(), log2(m1));
VERIFY_IS_APPROX(m1.abs(), abs(m1));
VERIFY_IS_APPROX(m1.abs2(), abs2(m1));
VERIFY_IS_APPROX(m1.sqrt(), sqrt(m1));
@@ -478,6 +481,7 @@ template<typename ArrayType> void array_complex(const ArrayType& m)
VERIFY_IS_APPROX(abs(m1), sqrt(square(m1.real())+square(m1.imag())));
VERIFY_IS_APPROX(abs(m1), sqrt(abs2(m1)));
VERIFY_IS_APPROX(log10(m1), log(m1)/log(10));
+ VERIFY_IS_APPROX(log2(m1), log(m1)/log(2));
VERIFY_IS_APPROX( m1.sign(), -(-m1).sign() );
VERIFY_IS_APPROX( m1.sign() * m1.abs(), m1);
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index ae0ead820..d995e8b71 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -488,6 +488,13 @@ void packetmath() {
packetmath_minus_zero_add<Scalar, Packet>();
}
+// Notice that this definition works for complex types as well.
+// c++11 has std::log2 for real, but not for complex types.
+template <typename Scalar>
+Scalar log2(Scalar x) {
+ return Scalar(M_LOG2E) * std::log(x);
+}
+
template <typename Scalar, typename Packet>
void packetmath_real() {
typedef internal::packet_traits<Scalar> PacketTraits;
@@ -506,6 +513,7 @@ void packetmath_real() {
if (internal::random<float>(0, 1) < 0.1f) data1[internal::random<int>(0, PacketSize)] = Scalar(0);
CHECK_CWISE1_IF(PacketTraits::HasLog, std::log, internal::plog);
+ CHECK_CWISE1_IF(PacketTraits::HasLog, log2, internal::plog2);
CHECK_CWISE1_IF(PacketTraits::HasRsqrt, 1 / std::sqrt, internal::prsqrt);
for (int i = 0; i < size; ++i) {