MCPcopy Create free account
hub / github.com/PX4/eigen / array

Function array

test/array.cpp:12–128  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10#include "main.h"
11
12template<typename ArrayType> void array(const ArrayType& m)
13{
14 typedef typename ArrayType::Index Index;
15 typedef typename ArrayType::Scalar Scalar;
16 typedef typename ArrayType::RealScalar RealScalar;
17 typedef Array<Scalar, ArrayType::RowsAtCompileTime, 1> ColVectorType;
18 typedef Array<Scalar, 1, ArrayType::ColsAtCompileTime> RowVectorType;
19
20 Index rows = m.rows();
21 Index cols = m.cols();
22
23 ArrayType m1 = ArrayType::Random(rows, cols),
24 m2 = ArrayType::Random(rows, cols),
25 m3(rows, cols);
26 ArrayType m4 = m1; // copy constructor
27 VERIFY_IS_APPROX(m1, m4);
28
29 ColVectorType cv1 = ColVectorType::Random(rows);
30 RowVectorType rv1 = RowVectorType::Random(cols);
31
32 Scalar s1 = internal::random<Scalar>(),
33 s2 = internal::random<Scalar>();
34
35 // scalar addition
36 VERIFY_IS_APPROX(m1 + s1, s1 + m1);
37 VERIFY_IS_APPROX(m1 + s1, ArrayType::Constant(rows,cols,s1) + m1);
38 VERIFY_IS_APPROX(s1 - m1, (-m1)+s1 );
39 VERIFY_IS_APPROX(m1 - s1, m1 - ArrayType::Constant(rows,cols,s1));
40 VERIFY_IS_APPROX(s1 - m1, ArrayType::Constant(rows,cols,s1) - m1);
41 VERIFY_IS_APPROX((m1*Scalar(2)) - s2, (m1+m1) - ArrayType::Constant(rows,cols,s2) );
42 m3 = m1;
43 m3 += s2;
44 VERIFY_IS_APPROX(m3, m1 + s2);
45 m3 = m1;
46 m3 -= s1;
47 VERIFY_IS_APPROX(m3, m1 - s1);
48
49 // scalar operators via Maps
50 m3 = m1;
51 ArrayType::Map(m1.data(), m1.rows(), m1.cols()) -= ArrayType::Map(m2.data(), m2.rows(), m2.cols());
52 VERIFY_IS_APPROX(m1, m3 - m2);
53
54 m3 = m1;
55 ArrayType::Map(m1.data(), m1.rows(), m1.cols()) += ArrayType::Map(m2.data(), m2.rows(), m2.cols());
56 VERIFY_IS_APPROX(m1, m3 + m2);
57
58 m3 = m1;
59 ArrayType::Map(m1.data(), m1.rows(), m1.cols()) *= ArrayType::Map(m2.data(), m2.rows(), m2.cols());
60 VERIFY_IS_APPROX(m1, m3 * m2);
61
62 m3 = m1;
63 m2 = ArrayType::Random(rows,cols);
64 m2 = (m2==0).select(1,m2);
65 ArrayType::Map(m1.data(), m1.rows(), m1.cols()) /= ArrayType::Map(m2.data(), m2.rows(), m2.cols());
66 VERIFY_IS_APPROX(m1, m3 / m2);
67
68 // reductions
69 VERIFY_IS_APPROX(m1.abs().colwise().sum().sum(), m1.abs().sum());

Callers 1

test_arrayFunction · 0.70

Calls 15

isMuchSmallerThanFunction · 0.85
selectMethod · 0.80
colwiseMethod · 0.80
absMethod · 0.80
rowwiseMethod · 0.80
squareMethod · 0.80
cubeMethod · 0.80
realFunction · 0.70
MapClass · 0.50
absFunction · 0.50
powFunction · 0.50
rowsMethod · 0.45

Tested by 1

test_arrayFunction · 0.56