extend mixingtype test to check diagonal products and fix the later for real*complex products

This commit is contained in:
Gael Guennebaud 2009-09-04 10:17:28 +02:00
parent a7ed998d52
commit 6902ef0824
2 changed files with 22 additions and 12 deletions

View File

@ -29,7 +29,7 @@
template<typename MatrixType, typename DiagonalType, int ProductOrder> template<typename MatrixType, typename DiagonalType, int ProductOrder>
struct ei_traits<DiagonalProduct<MatrixType, DiagonalType, ProductOrder> > struct ei_traits<DiagonalProduct<MatrixType, DiagonalType, ProductOrder> >
{ {
typedef typename MatrixType::Scalar Scalar; typedef typename ei_scalar_product_traits<typename MatrixType::Scalar, typename DiagonalType::Scalar>::ReturnType Scalar;
enum { enum {
RowsAtCompileTime = MatrixType::RowsAtCompileTime, RowsAtCompileTime = MatrixType::RowsAtCompileTime,
ColsAtCompileTime = MatrixType::ColsAtCompileTime, ColsAtCompileTime = MatrixType::ColsAtCompileTime,

View File

@ -33,6 +33,7 @@
#include "main.h" #include "main.h"
using namespace std;
template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType) template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType)
{ {
@ -45,14 +46,14 @@ template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType)
typedef Matrix<std::complex<float>, SizeAtCompileType, 1> Vec_cf; typedef Matrix<std::complex<float>, SizeAtCompileType, 1> Vec_cf;
typedef Matrix<std::complex<double>, SizeAtCompileType, 1> Vec_cd; typedef Matrix<std::complex<double>, SizeAtCompileType, 1> Vec_cd;
Mat_f mf(size,size); Mat_f mf = Mat_f::Random(size,size);
Mat_d md(size,size); Mat_d md = mf.template cast<double>();
Mat_cf mcf(size,size); Mat_cf mcf = Mat_cf::Random(size,size);
Mat_cd mcd(size,size); Mat_cd mcd = mcf.template cast<complex<double> >();
Vec_f vf(size,1); Vec_f vf = Vec_f::Random(size,1);
Vec_d vd(size,1); Vec_d vd = vf.template cast<double>();
Vec_cf vcf(size,1); Vec_cf vcf = Vec_cf::Random(size,1);
Vec_cd vcd(size,1); Vec_cd vcd = vcf.template cast<complex<double> >();
mf+mf; mf+mf;
VERIFY_RAISES_ASSERT(mf+md); VERIFY_RAISES_ASSERT(mf+md);
@ -64,7 +65,16 @@ template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType)
vf.dot(vf); vf.dot(vf);
VERIFY_RAISES_ASSERT(vd.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 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. // especially as that might be rewritten as cwise product .sum() which would make that automatic.
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
}
void mixingtypes_large(int size) void mixingtypes_large(int size)