1 // This file is part of Eigen, a lightweight C++ template library
4 // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 template<typename MatrixType
> void miscMatrices(const MatrixType
& m
)
14 /* this test covers the following files:
15 DiagonalMatrix.h Ones.h
17 typedef typename
MatrixType::Index Index
;
18 typedef typename
MatrixType::Scalar Scalar
;
19 typedef Matrix
<Scalar
, MatrixType::RowsAtCompileTime
, 1> VectorType
;
20 Index rows
= m
.rows();
21 Index cols
= m
.cols();
23 Index r
= internal::random
<Index
>(0, rows
-1), r2
= internal::random
<Index
>(0, rows
-1), c
= internal::random
<Index
>(0, cols
-1);
24 VERIFY_IS_APPROX(MatrixType::Ones(rows
,cols
)(r
,c
), static_cast<Scalar
>(1));
25 MatrixType m1
= MatrixType::Ones(rows
,cols
);
26 VERIFY_IS_APPROX(m1(r
,c
), static_cast<Scalar
>(1));
27 VectorType v1
= VectorType::Random(rows
);
29 Matrix
<Scalar
, MatrixType::RowsAtCompileTime
, MatrixType::RowsAtCompileTime
>
30 square(v1
.asDiagonal());
31 if(r
==r2
) VERIFY_IS_APPROX(square(r
,r2
), v1
[r
]);
32 else VERIFY_IS_MUCH_SMALLER_THAN(square(r
,r2
), static_cast<Scalar
>(1));
33 square
= MatrixType::Zero(rows
, rows
);
34 square
.diagonal() = VectorType::Ones(rows
);
35 VERIFY_IS_APPROX(square
, MatrixType::Identity(rows
, rows
));
38 void test_miscmatrices()
40 for(int i
= 0; i
< g_repeat
; i
++) {
41 CALL_SUBTEST_1( miscMatrices(Matrix
<float, 1, 1>()) );
42 CALL_SUBTEST_2( miscMatrices(Matrix4d()) );
43 CALL_SUBTEST_3( miscMatrices(MatrixXcf(3, 3)) );
44 CALL_SUBTEST_4( miscMatrices(MatrixXi(8, 12)) );
45 CALL_SUBTEST_5( miscMatrices(MatrixXcd(20, 20)) );