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

Function vectorVisitor

test/visitor.cpp:65–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63}
64
65template<typename VectorType> void vectorVisitor(const VectorType& w)
66{
67 typedef typename VectorType::Scalar Scalar;
68 typedef typename VectorType::Index Index;
69
70 Index size = w.size();
71
72 // construct a random vector where all coefficients are different
73 VectorType v;
74 v = VectorType::Random(size);
75 for(Index i = 0; i < size; i++)
76 for(Index i2 = 0; i2 < i; i2++)
77 while(v(i) == v(i2)) // yes, ==
78 v(i) = internal::random<Scalar>();
79
80 Scalar minc = v(0), maxc = v(0);
81 Index minidx=0, maxidx=0;
82 for(Index i = 0; i < size; i++)
83 {
84 if(v(i) < minc)
85 {
86 minc = v(i);
87 minidx = i;
88 }
89 if(v(i) > maxc)
90 {
91 maxc = v(i);
92 maxidx = i;
93 }
94 }
95 Index eigen_minidx, eigen_maxidx;
96 Scalar eigen_minc, eigen_maxc;
97 eigen_minc = v.minCoeff(&eigen_minidx);
98 eigen_maxc = v.maxCoeff(&eigen_maxidx);
99 VERIFY(minidx == eigen_minidx);
100 VERIFY(maxidx == eigen_maxidx);
101 VERIFY_IS_APPROX(minc, eigen_minc);
102 VERIFY_IS_APPROX(maxc, eigen_maxc);
103 VERIFY_IS_APPROX(minc, v.minCoeff());
104 VERIFY_IS_APPROX(maxc, v.maxCoeff());
105
106 Index idx0 = internal::random<Index>(0,size-1);
107 Index idx1 = eigen_minidx;
108 Index idx2 = eigen_maxidx;
109 VectorType v1(v), v2(v);
110 v1(idx0) = v1(idx1);
111 v2(idx0) = v2(idx2);
112 v1.minCoeff(&eigen_minidx);
113 v2.maxCoeff(&eigen_maxidx);
114 VERIFY(eigen_minidx == (std::min)(idx0,idx1));
115 VERIFY(eigen_maxidx == (std::min)(idx0,idx2));
116}
117
118void test_visitor()
119{

Callers 1

test_visitorFunction · 0.85

Calls 3

sizeMethod · 0.45
minCoeffMethod · 0.45
maxCoeffMethod · 0.45

Tested by 1

test_visitorFunction · 0.68