1 // This file is part of Eigen, a lightweight C++ template library
4 // Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
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 replicate(const MatrixType
& m
)
14 /* this test covers the following files:
17 typedef typename
MatrixType::Index Index
;
18 typedef typename
MatrixType::Scalar Scalar
;
19 typedef Matrix
<Scalar
, MatrixType::RowsAtCompileTime
, 1> VectorType
;
20 typedef Matrix
<Scalar
, Dynamic
, Dynamic
> MatrixX
;
21 typedef Matrix
<Scalar
, Dynamic
, 1> VectorX
;
23 Index rows
= m
.rows();
24 Index cols
= m
.cols();
26 MatrixType m1
= MatrixType::Random(rows
, cols
),
27 m2
= MatrixType::Random(rows
, cols
);
29 VectorType v1
= VectorType::Random(rows
);
34 int f1
= internal::random
<int>(1,10),
35 f2
= internal::random
<int>(1,10);
37 x1
.resize(rows
*f1
,cols
*f2
);
38 for(int j
=0; j
<f2
; j
++)
39 for(int i
=0; i
<f1
; i
++)
40 x1
.block(i
*rows
,j
*cols
,rows
,cols
) = m1
;
41 VERIFY_IS_APPROX(x1
, m1
.replicate(f1
,f2
));
43 x2
.resize(2*rows
,3*cols
);
46 VERIFY_IS_APPROX(x2
, (m2
.template replicate
<2,3>()));
49 for (int j
=0; j
<f1
; ++j
)
51 VERIFY_IS_APPROX(x2
, v1
.rowwise().replicate(f1
));
54 for (int j
=0; j
<f2
; ++j
)
55 vx1
.segment(j
*rows
,rows
) = v1
;
56 VERIFY_IS_APPROX(vx1
, v1
.colwise().replicate(f2
));
59 void test_array_replicate()
61 for(int i
= 0; i
< g_repeat
; i
++) {
62 CALL_SUBTEST_1( replicate(Matrix
<float, 1, 1>()) );
63 CALL_SUBTEST_2( replicate(Vector2f()) );
64 CALL_SUBTEST_3( replicate(Vector3d()) );
65 CALL_SUBTEST_4( replicate(Vector4f()) );
66 CALL_SUBTEST_5( replicate(VectorXf(16)) );
67 CALL_SUBTEST_6( replicate(VectorXcd(10)) );