MCPcopy Create free account
hub / github.com/Derious/cuMPC / array_real

Function array_real

dependence/eigen-3.4.0/test/array_cwise.cpp:334–468  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

332}
333
334template<typename ArrayType> void array_real(const ArrayType& m)
335{
336 using std::abs;
337 using std::sqrt;
338 typedef typename ArrayType::Scalar Scalar;
339 typedef typename NumTraits<Scalar>::Real RealScalar;
340
341 Index rows = m.rows();
342 Index cols = m.cols();
343
344 ArrayType m1 = ArrayType::Random(rows, cols),
345 m2 = ArrayType::Random(rows, cols),
346 m3(rows, cols),
347 m4 = m1;
348
349 m4 = (m4.abs()==Scalar(0)).select(Scalar(1),m4);
350
351 Scalar s1 = internal::random<Scalar>();
352
353 // these tests are mostly to check possible compilation issues with free-functions.
354 VERIFY_IS_APPROX(m1.sin(), sin(m1));
355 VERIFY_IS_APPROX(m1.cos(), cos(m1));
356 VERIFY_IS_APPROX(m1.tan(), tan(m1));
357 VERIFY_IS_APPROX(m1.asin(), asin(m1));
358 VERIFY_IS_APPROX(m1.acos(), acos(m1));
359 VERIFY_IS_APPROX(m1.atan(), atan(m1));
360 VERIFY_IS_APPROX(m1.sinh(), sinh(m1));
361 VERIFY_IS_APPROX(m1.cosh(), cosh(m1));
362 VERIFY_IS_APPROX(m1.tanh(), tanh(m1));
363#if EIGEN_HAS_CXX11_MATH
364 VERIFY_IS_APPROX(m1.tanh().atanh(), atanh(tanh(m1)));
365 VERIFY_IS_APPROX(m1.sinh().asinh(), asinh(sinh(m1)));
366 VERIFY_IS_APPROX(m1.cosh().acosh(), acosh(cosh(m1)));
367#endif
368 VERIFY_IS_APPROX(m1.logistic(), logistic(m1));
369
370 VERIFY_IS_APPROX(m1.arg(), arg(m1));
371 VERIFY_IS_APPROX(m1.round(), round(m1));
372 VERIFY_IS_APPROX(m1.rint(), rint(m1));
373 VERIFY_IS_APPROX(m1.floor(), floor(m1));
374 VERIFY_IS_APPROX(m1.ceil(), ceil(m1));
375 VERIFY((m1.isNaN() == (Eigen::isnan)(m1)).all());
376 VERIFY((m1.isInf() == (Eigen::isinf)(m1)).all());
377 VERIFY((m1.isFinite() == (Eigen::isfinite)(m1)).all());
378 VERIFY_IS_APPROX(m4.inverse(), inverse(m4));
379 VERIFY_IS_APPROX(m1.abs(), abs(m1));
380 VERIFY_IS_APPROX(m1.abs2(), abs2(m1));
381 VERIFY_IS_APPROX(m1.square(), square(m1));
382 VERIFY_IS_APPROX(m1.cube(), cube(m1));
383 VERIFY_IS_APPROX(cos(m1+RealScalar(3)*m2), cos((m1+RealScalar(3)*m2).eval()));
384 VERIFY_IS_APPROX(m1.sign(), sign(m1));
385 VERIFY((m1.sqrt().sign().isNaN() == (Eigen::isnan)(sign(sqrt(m1)))).all());
386
387 // avoid inf and NaNs so verification doesn't fail
388 m3 = m4.abs();
389 VERIFY_IS_APPROX(m3.sqrt(), sqrt(abs(m3)));
390 VERIFY_IS_APPROX(m3.rsqrt(), Scalar(1)/sqrt(abs(m3)));
391 VERIFY_IS_APPROX(rsqrt(m3), Scalar(1)/sqrt(abs(m3)));

Callers 1

EIGEN_DECLARE_TESTFunction · 0.85

Calls 15

squareFunction · 0.85
cubeFunction · 0.85
rsqrtFunction · 0.85
absMethod · 0.80
sinMethod · 0.80
cosMethod · 0.80
sinhMethod · 0.80
coshMethod · 0.80
tanhMethod · 0.80
roundMethod · 0.80
rintMethod · 0.80
floorMethod · 0.80

Tested by

no test coverage detected