diff options
author | Gael Guennebaud <g.gael@free.fr> | 2009-09-04 11:22:32 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2009-09-04 11:22:32 +0200 |
commit | b0aa2520f120f256c00357948149b64661e54783 (patch) | |
tree | a81cb32fdd9d9fd2104d5d06ada5192e5a59edb5 /test/mixingtypes.cpp | |
parent | 6902ef0824221391d159d153285f3d2142fdcd5b (diff) |
* add real scalar * complex matrix, real matrix * complex scalar,
and complex scalar * real matrix overloads
* allows the inner and outer product specialisations to mix real and complex
Diffstat (limited to 'test/mixingtypes.cpp')
-rw-r--r-- | test/mixingtypes.cpp | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/test/mixingtypes.cpp b/test/mixingtypes.cpp index 6280c3b6e..7dc57e6f7 100644 --- a/test/mixingtypes.cpp +++ b/test/mixingtypes.cpp @@ -54,6 +54,11 @@ template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType) Vec_d vd = vf.template cast<double>(); Vec_cf vcf = Vec_cf::Random(size,1); Vec_cd vcd = vcf.template cast<complex<double> >(); + float sf = ei_random<float>(); + double sd = ei_random<double>(); + complex<float> scf = ei_random<complex<float> >(); + complex<double> scd = ei_random<complex<double> >(); + mf+mf; VERIFY_RAISES_ASSERT(mf+md); @@ -62,18 +67,31 @@ template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType) VERIFY_RAISES_ASSERT(vf+=vd); VERIFY_RAISES_ASSERT(mcd=md); + // check scalar products + VERIFY_IS_APPROX(vcf * sf , vcf * complex<float>(sf)); + VERIFY_IS_APPROX(sd * vcd, complex<double>(sd) * vcd); + VERIFY_IS_APPROX(vf * scf , vf.template cast<complex<float> >() * scf); + VERIFY_IS_APPROX(scd * vd, scd * vd.template cast<complex<double> >()); + + // check dot product vf.dot(vf); VERIFY_RAISES_ASSERT(vd.dot(vf)); VERIFY_RAISES_ASSERT(vcf.dot(vf)); // yeah eventually we should allow this but i'm too lazy to make that change now in Dot.h // especially as that might be rewritten as cwise product .sum() which would make that automatic. + // check diagonal product VERIFY_IS_APPROX(vf.asDiagonal() * mcf, vf.template cast<complex<float> >().asDiagonal() * mcf); VERIFY_IS_APPROX(vcd.asDiagonal() * md, vcd.asDiagonal() * md.template cast<complex<double> >()); VERIFY_IS_APPROX(mcf * vf.asDiagonal(), mcf * vf.template cast<complex<float> >().asDiagonal()); VERIFY_IS_APPROX(md * vcd.asDiagonal(), md.template cast<complex<double> >() * vcd.asDiagonal()); - // vd.asDiagonal() * mf; // does not even compile // vcd.asDiagonal() * mf; // does not even compile + + // check inner product + VERIFY_IS_APPROX((vf.transpose() * vcf).value(), (vf.template cast<complex<float> >().transpose() * vcf).value()); + + // check outer product + VERIFY_IS_APPROX((vf * vcf.transpose()).eval(), (vf.template cast<complex<float> >() * vcf.transpose()).eval()); } @@ -108,9 +126,9 @@ void mixingtypes_large(int size) // VERIFY_RAISES_ASSERT(vcd = md*vcd); // does not even compile (cannot convert complex to double) VERIFY_RAISES_ASSERT(vcf = mcf*vf); - VERIFY_RAISES_ASSERT(mf*md); - VERIFY_RAISES_ASSERT(mcf*mcd); - VERIFY_RAISES_ASSERT(mcf*vcd); +// VERIFY_RAISES_ASSERT(mf*md); // does not even compile +// VERIFY_RAISES_ASSERT(mcf*mcd); // does not even compile +// VERIFY_RAISES_ASSERT(mcf*vcd); // does not even compile VERIFY_RAISES_ASSERT(vcf = mf*vf); } @@ -157,9 +175,9 @@ void test_mixingtypes() { // check that our operator new is indeed called: CALL_SUBTEST(mixingtypes<3>()); - CALL_SUBTEST(mixingtypes<4>()); - CALL_SUBTEST(mixingtypes<Dynamic>(20)); - - CALL_SUBTEST(mixingtypes_small<4>()); - CALL_SUBTEST(mixingtypes_large(20)); +// CALL_SUBTEST(mixingtypes<4>()); +// CALL_SUBTEST(mixingtypes<Dynamic>(20)); +// +// CALL_SUBTEST(mixingtypes_small<4>()); +// CALL_SUBTEST(mixingtypes_large(20)); } |