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

Function vectorVisitor

dependence/eigen-3.4.0/test/visitor.cpp:99–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

97}
98
99template<typename VectorType> void vectorVisitor(const VectorType& w)
100{
101 typedef typename VectorType::Scalar Scalar;
102
103 Index size = w.size();
104
105 // construct a random vector where all coefficients are different
106 VectorType v;
107 v = VectorType::Random(size);
108 for(Index i = 0; i < size; i++)
109 for(Index i2 = 0; i2 < i; i2++)
110 while(v(i) == v(i2)) // yes, ==
111 v(i) = internal::random<Scalar>();
112
113 Scalar minc = v(0), maxc = v(0);
114 Index minidx=0, maxidx=0;
115 for(Index i = 0; i < size; i++)
116 {
117 if(v(i) < minc)
118 {
119 minc = v(i);
120 minidx = i;
121 }
122 if(v(i) > maxc)
123 {
124 maxc = v(i);
125 maxidx = i;
126 }
127 }
128 Index eigen_minidx, eigen_maxidx;
129 Scalar eigen_minc, eigen_maxc;
130 eigen_minc = v.minCoeff(&eigen_minidx);
131 eigen_maxc = v.maxCoeff(&eigen_maxidx);
132 VERIFY(minidx == eigen_minidx);
133 VERIFY(maxidx == eigen_maxidx);
134 VERIFY_IS_APPROX(minc, eigen_minc);
135 VERIFY_IS_APPROX(maxc, eigen_maxc);
136 VERIFY_IS_APPROX(minc, v.minCoeff());
137 VERIFY_IS_APPROX(maxc, v.maxCoeff());
138
139 Index idx0 = internal::random<Index>(0,size-1);
140 Index idx1 = eigen_minidx;
141 Index idx2 = eigen_maxidx;
142 VectorType v1(v), v2(v);
143 v1(idx0) = v1(idx1);
144 v2(idx0) = v2(idx2);
145 v1.minCoeff(&eigen_minidx);
146 v2.maxCoeff(&eigen_maxidx);
147 VERIFY(eigen_minidx == (std::min)(idx0,idx1));
148 VERIFY(eigen_maxidx == (std::min)(idx0,idx2));
149
150 if (!NumTraits<Scalar>::IsInteger && size > 2) {
151 // Test NaN propagation by replacing an element with NaN.
152 for (Index i = 0; i < size; ++i) {
153 if (i != minidx && i != maxidx) {
154 v(i) = NumTraits<Scalar>::quiet_NaN();
155 break;
156 }

Callers 1

EIGEN_DECLARE_TESTFunction · 0.85

Calls 4

vFunction · 0.50
sizeMethod · 0.45
minCoeffMethod · 0.45
maxCoeffMethod · 0.45

Tested by

no test coverage detected