MCPcopy Create free account
hub / github.com/avaxman/Directional / array_real

Function array_real

external/eigen/test/array_cwise.cpp:761–912  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

759}
760
761template<typename ArrayType> void array_real(const ArrayType& m)
762{
763 using numext::abs;
764 using std::sqrt;
765 typedef typename ArrayType::Scalar Scalar;
766 typedef typename NumTraits<Scalar>::Real RealScalar;
767
768 Index rows = m.rows();
769 Index cols = m.cols();
770
771 ArrayType m1 = ArrayType::Random(rows, cols),
772 m2 = ArrayType::Random(rows, cols),
773 m3(rows, cols),
774 m4 = m1;
775
776 // avoid denormalized values so verification doesn't fail on platforms that don't support them
777 // denormalized behavior is tested elsewhere (unary_op_test, binary_ops_test)
778 const Scalar min = (std::numeric_limits<Scalar>::min)();
779 m1 = (m1.abs()<min).select(Scalar(0),m1);
780 m2 = (m2.abs()<min).select(Scalar(0),m2);
781 m4 = (m4.abs()<min).select(Scalar(1),m4);
782
783 Scalar s1 = internal::random<Scalar>();
784
785 // these tests are mostly to check possible compilation issues with free-functions.
786 VERIFY_IS_APPROX(m1.sin(), sin(m1));
787 VERIFY_IS_APPROX(m1.cos(), cos(m1));
788 VERIFY_IS_APPROX(m1.tan(), tan(m1));
789 VERIFY_IS_APPROX(m1.asin(), asin(m1));
790 VERIFY_IS_APPROX(m1.acos(), acos(m1));
791 VERIFY_IS_APPROX(m1.atan(), atan(m1));
792 VERIFY_IS_APPROX(m1.sinh(), sinh(m1));
793 VERIFY_IS_APPROX(m1.cosh(), cosh(m1));
794 VERIFY_IS_APPROX(m1.tanh(), tanh(m1));
795 VERIFY_IS_APPROX(m1.atan2(m2), atan2(m1,m2));
796
797 VERIFY_IS_APPROX(m1.tanh().atanh(), atanh(tanh(m1)));
798 VERIFY_IS_APPROX(m1.sinh().asinh(), asinh(sinh(m1)));
799 VERIFY_IS_APPROX(m1.cosh().acosh(), acosh(cosh(m1)));
800 VERIFY_IS_APPROX(m1.tanh().atanh(), atanh(tanh(m1)));
801 VERIFY_IS_APPROX(m1.logistic(), logistic(m1));
802
803 VERIFY_IS_APPROX(m1.arg(), arg(m1));
804 VERIFY_IS_APPROX(m1.round(), round(m1));
805 VERIFY_IS_APPROX(m1.rint(), rint(m1));
806 VERIFY_IS_APPROX(m1.floor(), floor(m1));
807 VERIFY_IS_APPROX(m1.ceil(), ceil(m1));
808 VERIFY((m1.isNaN() == (Eigen::isnan)(m1)).all());
809 VERIFY((m1.isInf() == (Eigen::isinf)(m1)).all());
810 VERIFY((m1.isFinite() == (Eigen::isfinite)(m1)).all());
811 VERIFY_IS_APPROX(m4.inverse(), inverse(m4));
812 VERIFY_IS_APPROX(m1.abs(), abs(m1));
813 VERIFY_IS_APPROX(m1.abs2(), abs2(m1));
814 VERIFY_IS_APPROX(m1.square(), square(m1));
815 VERIFY_IS_APPROX(m1.cube(), cube(m1));
816 VERIFY_IS_APPROX(cos(m1+RealScalar(3)*m2), cos((m1+RealScalar(3)*m2).eval()));
817 VERIFY_IS_APPROX(m1.sign(), sign(m1));
818 VERIFY((m1.sqrt().sign().isNaN() == (Eigen::isnan)(sign(sqrt(m1)))).all());

Callers 1

EIGEN_DECLARE_TESTFunction · 0.85

Calls 15

argFunction · 0.85
abs2Function · 0.85
squareFunction · 0.85
cubeFunction · 0.85
selectMethod · 0.80
sinMethod · 0.80
cosMethod · 0.80
sinhMethod · 0.80
coshMethod · 0.80
tanhMethod · 0.80
argMethod · 0.80
roundMethod · 0.80

Tested by

no test coverage detected