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

Function mixingtypes

test/mixingtypes.cpp:38–287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36 VERIFY( g_called && #XPR" not properly optimized");
37
38template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType)
39{
40 typedef std::complex<float> CF;
41 typedef std::complex<double> CD;
42 typedef Matrix<float, SizeAtCompileType, SizeAtCompileType> Mat_f;
43 typedef Matrix<double, SizeAtCompileType, SizeAtCompileType> Mat_d;
44 typedef Matrix<std::complex<float>, SizeAtCompileType, SizeAtCompileType> Mat_cf;
45 typedef Matrix<std::complex<double>, SizeAtCompileType, SizeAtCompileType> Mat_cd;
46 typedef Matrix<float, SizeAtCompileType, 1> Vec_f;
47 typedef Matrix<double, SizeAtCompileType, 1> Vec_d;
48 typedef Matrix<std::complex<float>, SizeAtCompileType, 1> Vec_cf;
49 typedef Matrix<std::complex<double>, SizeAtCompileType, 1> Vec_cd;
50
51 Mat_f mf = Mat_f::Random(size,size);
52 Mat_d md = mf.template cast<double>();
53 //Mat_d rd = md;
54 Mat_cf mcf = Mat_cf::Random(size,size);
55 Mat_cd mcd = mcf.template cast<complex<double> >();
56 Mat_cd rcd = mcd;
57 Vec_f vf = Vec_f::Random(size,1);
58 Vec_d vd = vf.template cast<double>();
59 Vec_cf vcf = Vec_cf::Random(size,1);
60 Vec_cd vcd = vcf.template cast<complex<double> >();
61 float sf = internal::random<float>();
62 double sd = internal::random<double>();
63 complex<float> scf = internal::random<complex<float> >();
64 complex<double> scd = internal::random<complex<double> >();
65
66 mf+mf;
67
68 float epsf = std::sqrt(std::numeric_limits<float> ::min EIGEN_EMPTY ());
69 double epsd = std::sqrt(std::numeric_limits<double>::min EIGEN_EMPTY ());
70
71 while(std::abs(sf )<epsf) sf = internal::random<float>();
72 while(std::abs(sd )<epsd) sf = internal::random<double>();
73 while(std::abs(scf)<epsf) scf = internal::random<CF>();
74 while(std::abs(scd)<epsd) scd = internal::random<CD>();
75
76// VERIFY_RAISES_ASSERT(mf+md); // does not even compile
77
78#ifdef EIGEN_DONT_VECTORIZE
79 VERIFY_RAISES_ASSERT(vf=vd);
80 VERIFY_RAISES_ASSERT(vf+=vd);
81#endif
82
83 // check scalar products
84 VERIFY_MIX_SCALAR(vcf * sf , vcf * complex<float>(sf));
85 VERIFY_MIX_SCALAR(sd * vcd , complex<double>(sd) * vcd);
86 VERIFY_MIX_SCALAR(vf * scf , vf.template cast<complex<float> >() * scf);
87 VERIFY_MIX_SCALAR(scd * vd , scd * vd.template cast<complex<double> >());
88
89 VERIFY_MIX_SCALAR(vcf * 2 , vcf * complex<float>(2));
90 VERIFY_MIX_SCALAR(vcf * 2.1 , vcf * complex<float>(2.1));
91 VERIFY_MIX_SCALAR(2 * vcf, vcf * complex<float>(2));
92 VERIFY_MIX_SCALAR(2.1 * vcf , vcf * complex<float>(2.1));
93
94 // check scalar quotients
95 VERIFY_MIX_SCALAR(vcf / sf , vcf / complex<float>(sf));

Callers

nothing calls this directly

Calls 15

asDiagonalMethod · 0.80
absMethod · 0.80
noaliasMethod · 0.80
sqrtFunction · 0.50
absFunction · 0.50
powFunction · 0.50
arrayMethod · 0.45
powMethod · 0.45
dotMethod · 0.45
valueMethod · 0.45
transposeMethod · 0.45
evalMethod · 0.45

Tested by

no test coverage detected