18 RealScalar largerEps = 10*test_precision<RealScalar>();
25 VectorType
v1 = VectorType::Random(rows);
27 Scalar s1 = internal::random<Scalar>();
29 m1 = MatrixType::Random(rows, cols);
32 m3 = m1.template triangularView<Eigen::Lower>();
33 VERIFY((m3 * v1).
isApprox(m1.template triangularView<Eigen::Lower>() * v1, largerEps));
34 m3 = m1.template triangularView<Eigen::Upper>();
35 VERIFY((m3 * v1).
isApprox(m1.template triangularView<Eigen::Upper>() * v1, largerEps));
36 m3 = m1.template triangularView<Eigen::UnitLower>();
37 VERIFY((m3 * v1).
isApprox(m1.template triangularView<Eigen::UnitLower>() * v1, largerEps));
38 m3 = m1.template triangularView<Eigen::UnitUpper>();
39 VERIFY((m3 * v1).
isApprox(m1.template triangularView<Eigen::UnitUpper>() * v1, largerEps));
42 m3 = m1.template triangularView<Eigen::Lower>();
44 m3 = m1.template triangularView<Eigen::Upper>();
45 VERIFY((m3.conjugate() * v1.conjugate()).
isApprox(m1.conjugate().template triangularView<Eigen::Upper>() * v1.conjugate(), largerEps));
48 m3 = m1.template triangularView<Eigen::Upper>();
49 VERIFY((m3.transpose() *
v1).
isApprox(m1.transpose().template triangularView<Eigen::Lower>() * v1, largerEps));
50 m3 = m1.template triangularView<Eigen::Lower>();
51 VERIFY((m3.transpose() *
v1).
isApprox(m1.transpose().template triangularView<Eigen::Upper>() * v1, largerEps));
52 m3 = m1.template triangularView<Eigen::UnitUpper>();
53 VERIFY((m3.transpose() *
v1).
isApprox(m1.transpose().template triangularView<Eigen::UnitLower>() * v1, largerEps));
54 m3 = m1.template triangularView<Eigen::UnitLower>();
55 VERIFY((m3.transpose() *
v1).
isApprox(m1.transpose().template triangularView<Eigen::UnitUpper>() * v1, largerEps));
58 m3 = m1.template triangularView<Eigen::Upper>();
59 VERIFY((m3.adjoint() *
v1).
isApprox(m1.adjoint().template triangularView<Eigen::Lower>() * v1, largerEps));
60 m3 = m1.template triangularView<Eigen::Lower>();
61 VERIFY((m3.adjoint() * (s1*v1.conjugate())).isApprox(m1.adjoint().template triangularView<Eigen::Upper>() * (s1*v1.conjugate()), largerEps));
62 m3 = m1.template triangularView<Eigen::UnitUpper>();
65 m3 = m1.template triangularView<Eigen::Lower>();
66 VERIFY((v1.transpose() * m3).
isApprox(v1.transpose() * m1.template triangularView<Eigen::Lower>(), largerEps));
67 VERIFY((v1.adjoint() * m3).
isApprox(v1.adjoint() * m1.template triangularView<Eigen::Lower>(), largerEps));
68 VERIFY((v1.adjoint() * m3.adjoint()).
isApprox(v1.adjoint() * m1.template triangularView<Eigen::Lower>().
adjoint(), largerEps));
#define CALL_SUBTEST_6(FUNC)
#define CALL_SUBTEST_4(FUNC)
void adjoint(const MatrixType &m)
#define CALL_SUBTEST_3(FUNC)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
EIGEN_DECLARE_TEST(product_trmv)
void trmv(const MatrixType &m)
#define CALL_SUBTEST_1(FUNC)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
EIGEN_DEVICE_FUNC ConjugateReturnType conjugate() const
NumTraits< Scalar >::Real RealScalar
#define TEST_SET_BUT_UNUSED_VARIABLE(X)
#define CALL_SUBTEST_5(FUNC)
#define EIGEN_TEST_MAX_SIZE
#define CALL_SUBTEST_2(FUNC)
The matrix class, also used for vectors and row-vectors.
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())