MCPcopy Create free account
hub / github.com/LucaFulchir/libRaptorQ / array_real

Function array_real

external/eigen3/test/array.cpp:154–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152}
153
154template<typename ArrayType> void array_real(const ArrayType& m)
155{
156 using std::abs;
157 using std::sqrt;
158 typedef typename ArrayType::Index Index;
159 typedef typename ArrayType::Scalar Scalar;
160 typedef typename NumTraits<Scalar>::Real RealScalar;
161
162 Index rows = m.rows();
163 Index cols = m.cols();
164
165 ArrayType m1 = ArrayType::Random(rows, cols),
166 m2 = ArrayType::Random(rows, cols),
167 m3(rows, cols);
168
169 Scalar s1 = internal::random<Scalar>();
170
171 // these tests are mostly to check possible compilation issues.
172 VERIFY_IS_APPROX(m1.sin(), sin(m1));
173 VERIFY_IS_APPROX(m1.cos(), cos(m1));
174 VERIFY_IS_APPROX(m1.asin(), asin(m1));
175 VERIFY_IS_APPROX(m1.acos(), acos(m1));
176 VERIFY_IS_APPROX(m1.tan(), tan(m1));
177
178 VERIFY_IS_APPROX(cos(m1+RealScalar(3)*m2), cos((m1+RealScalar(3)*m2).eval()));
179
180 VERIFY_IS_APPROX(m1.abs().sqrt(), sqrt(abs(m1)));
181 VERIFY_IS_APPROX(m1.abs(), sqrt(numext::abs2(m1)));
182
183 VERIFY_IS_APPROX(numext::abs2(numext::real(m1)) + numext::abs2(numext::imag(m1)), numext::abs2(m1));
184 VERIFY_IS_APPROX(numext::abs2(real(m1)) + numext::abs2(imag(m1)), numext::abs2(m1));
185 if(!NumTraits<Scalar>::IsComplex)
186 VERIFY_IS_APPROX(numext::real(m1), m1);
187
188 // shift argument of logarithm so that it is not zero
189 Scalar smallNumber = NumTraits<Scalar>::dummy_precision();
190 VERIFY_IS_APPROX((m1.abs() + smallNumber).log() , log(abs(m1) + smallNumber));
191
192 VERIFY_IS_APPROX(m1.exp() * m2.exp(), exp(m1+m2));
193 VERIFY_IS_APPROX(m1.exp(), exp(m1));
194 VERIFY_IS_APPROX(m1.exp() / m2.exp(),(m1-m2).exp());
195
196 VERIFY_IS_APPROX(m1.pow(2), m1.square());
197 VERIFY_IS_APPROX(pow(m1,2), m1.square());
198
199 ArrayType exponents = ArrayType::Constant(rows, cols, RealScalar(2));
200 VERIFY_IS_APPROX(Eigen::pow(m1,exponents), m1.square());
201
202 m3 = m1.abs();
203 VERIFY_IS_APPROX(m3.pow(RealScalar(0.5)), m3.sqrt());
204 VERIFY_IS_APPROX(pow(m3,RealScalar(0.5)), m3.sqrt());
205
206 // scalar by array division
207 const RealScalar tiny = sqrt(std::numeric_limits<RealScalar>::epsilon());
208 s1 += Scalar(tiny);
209 m1 += ArrayType::Constant(rows,cols,Scalar(tiny));
210 VERIFY_IS_APPROX(s1/m1, s1 * m1.inverse());
211

Callers 1

test_arrayFunction · 0.85

Calls 15

abs2Function · 0.85
epsilonFunction · 0.85
absMethod · 0.80
squareMethod · 0.80
transposeInPlaceMethod · 0.80
realFunction · 0.70
imagFunction · 0.70
sinFunction · 0.50
cosFunction · 0.50
asinFunction · 0.50
acosFunction · 0.50
tanFunction · 0.50

Tested by

no test coverage detected