diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-06-14 12:06:10 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-06-14 12:06:10 +0200 |
commit | a8c08e8b8e8bdd486a5a27b9f1e92c48ef4361cd (patch) | |
tree | 2c80ba97d7f03930acf827514ddce17baf1dfa00 /test | |
parent | 756ac4a93dea57bf61079c4867e712a8c26d77f6 (diff) |
Implement expr+scalar, scalar+expr, expr-scalar, and scalar-expr as binary expressions, and generalize supported scalar types.
The following functors are now deprecated: scalar_add_op, scalar_sub_op, and scalar_rsub_op.
Diffstat (limited to 'test')
-rw-r--r-- | test/linearstructure.cpp | 16 | ||||
-rw-r--r-- | test/mixingtypes.cpp | 12 |
2 files changed, 28 insertions, 0 deletions
diff --git a/test/linearstructure.cpp b/test/linearstructure.cpp index 7eef976d2..17474af10 100644 --- a/test/linearstructure.cpp +++ b/test/linearstructure.cpp @@ -93,6 +93,22 @@ template<typename MatrixType> void real_complex(DenseIndex rows = MatrixType::Ro g_called = false; VERIFY_IS_APPROX(m1/s, m1/Scalar(s)); VERIFY(g_called && "matrix<complex> / real not properly optimized"); + + g_called = false; + VERIFY_IS_APPROX(s+m1.array(), Scalar(s)+m1.array()); + VERIFY(g_called && "real + matrix<complex> not properly optimized"); + + g_called = false; + VERIFY_IS_APPROX(m1.array()+s, m1.array()+Scalar(s)); + VERIFY(g_called && "matrix<complex> + real not properly optimized"); + + g_called = false; + VERIFY_IS_APPROX(s-m1.array(), Scalar(s)-m1.array()); + VERIFY(g_called && "real - matrix<complex> not properly optimized"); + + g_called = false; + VERIFY_IS_APPROX(m1.array()-s, m1.array()-Scalar(s)); + VERIFY(g_called && "matrix<complex> - real not properly optimized"); } void test_linearstructure() diff --git a/test/mixingtypes.cpp b/test/mixingtypes.cpp index dee4f35df..cf2207114 100644 --- a/test/mixingtypes.cpp +++ b/test/mixingtypes.cpp @@ -75,6 +75,18 @@ template<int SizeAtCompileType> void mixingtypes(int size = SizeAtCompileType) VERIFY_IS_APPROX(vcf / sf , vcf / complex<float>(sf)); VERIFY_IS_APPROX(vf / scf , vf.template cast<complex<float> >() / scf); + // check scalar increment + VERIFY_IS_APPROX(vcf.array() + sf , vcf.array() + complex<float>(sf)); + VERIFY_IS_APPROX(sd + vcd.array(), complex<double>(sd) + vcd.array()); + VERIFY_IS_APPROX(vf.array() + scf, vf.template cast<complex<float> >().array() + scf); + VERIFY_IS_APPROX(scd + vd.array() , scd + vd.template cast<complex<double> >().array()); + + // check scalar subtractions + VERIFY_IS_APPROX(vcf.array() - sf , vcf.array() - complex<float>(sf)); + VERIFY_IS_APPROX(sd - vcd.array(), complex<double>(sd) - vcd.array()); + VERIFY_IS_APPROX(vf.array() - scf, vf.template cast<complex<float> >().array() - scf); + VERIFY_IS_APPROX(scd - vd.array() , scd - vd.template cast<complex<double> >().array()); + // check dot product vf.dot(vf); #if 0 // we get other compilation errors here than just static asserts |