49 typedef std::complex<float> CF;
50 typedef std::complex<double> CD;
61 Mat_d
md =
mf.template cast<double>();
63 Mat_cf mcf = Mat_cf::Random(
size,
size);
64 Mat_cd mcd = mcf.template cast<complex<double> >();
66 Vec_f vf = Vec_f::Random(
size, 1);
67 Vec_d vd = vf.template cast<double>();
68 Vec_cf vcf = Vec_cf::Random(
size, 1);
69 Vec_cd vcd = vcf.template cast<complex<double> >();
70 float sf = internal::random<float>();
71 double sd = internal::random<double>();
72 complex<float> scf = internal::random<complex<float> >();
73 complex<double> scd = internal::random<complex<double> >();
80 while (
std::abs(sf) < epsf) sf = internal::random<float>();
81 while (
std::abs(sd) < epsd) sd = internal::random<double>();
82 while (
std::abs(scf) < epsf) scf = internal::random<CF>();
83 while (
std::abs(scd) < epsd) scd = internal::random<CD>();
128 VERIFY_IS_APPROX(vf.asDiagonal() * mcf, vf.template
cast<complex<float> >().asDiagonal() * mcf);
130 VERIFY_IS_APPROX(mcf * vf.asDiagonal(), mcf * vf.template
cast<complex<float> >().asDiagonal());
134 VERIFY_IS_APPROX((vf.transpose() * vcf).value(), (vf.template
cast<complex<float> >().transpose() * vcf).value());
137 VERIFY_IS_APPROX((vf * vcf.transpose()).eval(), (vf.template
cast<complex<float> >() * vcf.transpose()).eval());
141 VERIFY_IS_APPROX((vf * vcf.transpose()).eval(), (vf.template
cast<complex<float> >() * vcf.transpose()).eval());
157 VERIFY_IS_APPROX(sd *
md.adjoint() * mcd, (sd *
md).template cast<CD>().eval().adjoint() * mcd);
159 VERIFY_IS_APPROX(sd *
md.adjoint() * mcd.adjoint(), (sd *
md).template cast<CD>().eval().adjoint() * mcd.adjoint());
160 VERIFY_IS_APPROX(sd * mcd.adjoint() *
md.adjoint(), sd * mcd.adjoint() *
md.template cast<CD>().adjoint());
161 VERIFY_IS_APPROX(sd *
md * mcd.adjoint(), (sd *
md).template cast<CD>().eval() * mcd.adjoint());
164 VERIFY_IS_APPROX(sf *
mf.adjoint() * mcf, (sf *
mf).template cast<CF>().eval().adjoint() * mcf);
166 VERIFY_IS_APPROX(sf *
mf.adjoint() * mcf.adjoint(), (sf *
mf).template cast<CF>().eval().adjoint() * mcf.adjoint());
167 VERIFY_IS_APPROX(sf * mcf.adjoint() *
mf.adjoint(), sf * mcf.adjoint() *
mf.template cast<CF>().adjoint());
168 VERIFY_IS_APPROX(sf *
mf * mcf.adjoint(), (sf *
mf).template cast<CF>().eval() * mcf.adjoint());
177 VERIFY_IS_APPROX(scf * vcf.adjoint() *
mf, scf * vcf.adjoint() *
mf.template cast<CF>().eval());
178 VERIFY_IS_APPROX(sf * vf.adjoint() * mcf, sf * vf.adjoint().template cast<CF>().eval() * mcf);
179 VERIFY_IS_APPROX(scf * vf.adjoint() * mcf, scf * vf.adjoint().template cast<CF>().eval() * mcf);
184 VERIFY_IS_APPROX(scd * mcd * vd, scd * mcd * vd.template cast<CD>().eval());
187 VERIFY_IS_APPROX(scd * vcd.adjoint() *
md, scd * vcd.adjoint() *
md.template cast<CD>().eval());
188 VERIFY_IS_APPROX(sd * vd.adjoint() * mcd, sd * vd.adjoint().template cast<CD>().eval() * mcd);
189 VERIFY_IS_APPROX(scd * vd.adjoint() * mcd, scd * vd.adjoint().template cast<CD>().eval() * mcd);
192 sd * vcd.adjoint() *
md.template cast<CD>().eval().template triangularView<Upper>());
194 scd * vcd.adjoint() *
md.template cast<CD>().eval().template triangularView<Lower>());
195 VERIFY_IS_APPROX(sd * vcd.adjoint() *
md.transpose().template triangularView<Upper>(),
196 sd * vcd.adjoint() *
md.transpose().template cast<CD>().eval().template triangularView<Upper>());
197 VERIFY_IS_APPROX(scd * vcd.adjoint() *
md.transpose().template triangularView<Lower>(),
198 scd * vcd.adjoint() *
md.transpose().template cast<CD>().eval().template triangularView<Lower>());
200 sd * vd.adjoint().template cast<CD>().eval() * mcd.template triangularView<Lower>());
202 scd * vd.adjoint().template cast<CD>().eval() * mcd.template triangularView<Upper>());
203 VERIFY_IS_APPROX(sd * vd.adjoint() * mcd.transpose().template triangularView<Lower>(),
204 sd * vd.adjoint().template cast<CD>().eval() * mcd.transpose().template triangularView<Lower>());
205 VERIFY_IS_APPROX(scd * vd.adjoint() * mcd.transpose().template triangularView<Upper>(),
206 scd * vd.adjoint().template cast<CD>().eval() * mcd.transpose().template triangularView<Upper>());
233 Mat_cd((sd * mcd *
md.template cast<CD>().eval()).template triangularView<Upper>()));
235 Mat_cd((sd *
md.template cast<CD>().eval() * mcd).template triangularView<Upper>()));
237 Mat_cd((scd * mcd *
md.template cast<CD>().eval()).template triangularView<Upper>()));
239 Mat_cd((scd *
md.template cast<CD>().eval() * mcd).template triangularView<Upper>()));
241 VERIFY_IS_APPROX(
md.array() * mcd.array(),
md.template cast<CD>().eval().array() * mcd.array());
242 VERIFY_IS_APPROX(mcd.array() *
md.array(), mcd.array() *
md.template cast<CD>().eval().array());
244 VERIFY_IS_APPROX(
md.array() + mcd.array(),
md.template cast<CD>().eval().array() + mcd.array());
245 VERIFY_IS_APPROX(mcd.array() +
md.array(), mcd.array() +
md.template cast<CD>().eval().array());
247 VERIFY_IS_APPROX(
md.array() - mcd.array(),
md.template cast<CD>().eval().array() - mcd.array());
248 VERIFY_IS_APPROX(mcd.array() -
md.array(), mcd.array() -
md.template cast<CD>().eval().array());
250 if (mcd.array().abs().minCoeff() > epsd) {
251 VERIFY_IS_APPROX(
md.array() / mcd.array(),
md.template cast<CD>().eval().array() / mcd.array());
253 if (
md.array().abs().minCoeff() > epsd) {
254 VERIFY_IS_APPROX(mcd.array() /
md.array(), mcd.array() /
md.template cast<CD>().eval().array());
257 if (
md.array().abs().minCoeff() > epsd || mcd.array().abs().minCoeff() > epsd) {
258 VERIFY_IS_APPROX(
md.array().pow(mcd.array()),
md.template cast<CD>().eval().array().pow(mcd.array()));
259 VERIFY_IS_APPROX(mcd.array().pow(
md.array()), mcd.array().pow(
md.template cast<CD>().eval().array()));
272 VERIFY_IS_APPROX(rcd.array() *=
md.array(), mcd.array() *
md.template cast<CD>().eval().array());
274 if (
md.array().abs().minCoeff() > epsd) {
275 VERIFY_IS_APPROX(rcd.array() /=
md.array(), mcd.array() /
md.template cast<CD>().eval().array());
280 mcd + (
md.template cast<CD>().eval()) + mcd * (
md.template cast<CD>().eval()));
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
#define EIGEN_EMPTY
Definition: Macros.h:1081
Matrix2f mf
Definition: MatrixBase_cast.cpp:2
Matrix2d md
Definition: MatrixBase_cast.cpp:1
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
EIGEN_DEVICE_FUNC const GlobalUnaryPowReturnType< Derived, ScalarExponent > pow(const Eigen::ArrayBase< Derived > &x, const ScalarExponent &exponent)
Definition: GlobalFunctions.h:137
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
#define min(a, b)
Definition: datatypes.h:22
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
#define VERIFY_MIX_SCALAR(XPR, REF)
Definition: mixingtypes.cpp:42
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
EIGEN_DEVICE_FUNC NewType cast(const OldType &x)
Definition: MathFunctions.h:362
internal::nested_eval< T, 1 >::type eval(const T &xpr)
Definition: sparse_permutations.cpp:47