1*bf2c3715SXin Li // This file is part of Eigen, a lightweight C++ template library
2*bf2c3715SXin Li // for linear algebra.
3*bf2c3715SXin Li //
4*bf2c3715SXin Li // Copyright (C) 2017 Gael Guennebaud <[email protected]>
5*bf2c3715SXin Li //
6*bf2c3715SXin Li // This Source Code Form is subject to the terms of the Mozilla
7*bf2c3715SXin Li // Public License v. 2.0. If a copy of the MPL was not distributed
8*bf2c3715SXin Li // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9*bf2c3715SXin Li
10*bf2c3715SXin Li
11*bf2c3715SXin Li #define TEST_ENABLE_TEMPORARY_TRACKING
12*bf2c3715SXin Li
13*bf2c3715SXin Li #include "main.h"
14*bf2c3715SXin Li
15*bf2c3715SXin Li template<typename MatrixType> struct Wrapper
16*bf2c3715SXin Li {
17*bf2c3715SXin Li MatrixType m_mat;
WrapperWrapper18*bf2c3715SXin Li inline Wrapper(const MatrixType &x) : m_mat(x) {}
operator const MatrixType&Wrapper19*bf2c3715SXin Li inline operator const MatrixType& () const { return m_mat; }
operator MatrixType&Wrapper20*bf2c3715SXin Li inline operator MatrixType& () { return m_mat; }
21*bf2c3715SXin Li };
22*bf2c3715SXin Li
23*bf2c3715SXin Li enum my_sizes { M = 12, N = 7};
24*bf2c3715SXin Li
ctor_init1(const MatrixType & m)25*bf2c3715SXin Li template<typename MatrixType> void ctor_init1(const MatrixType& m)
26*bf2c3715SXin Li {
27*bf2c3715SXin Li // Check logic in PlainObjectBase::_init1
28*bf2c3715SXin Li Index rows = m.rows();
29*bf2c3715SXin Li Index cols = m.cols();
30*bf2c3715SXin Li
31*bf2c3715SXin Li MatrixType m0 = MatrixType::Random(rows,cols);
32*bf2c3715SXin Li
33*bf2c3715SXin Li VERIFY_EVALUATION_COUNT( MatrixType m1(m0), 1);
34*bf2c3715SXin Li VERIFY_EVALUATION_COUNT( MatrixType m2(m0+m0), 1);
35*bf2c3715SXin Li VERIFY_EVALUATION_COUNT( MatrixType m2(m0.block(0,0,rows,cols)) , 1);
36*bf2c3715SXin Li
37*bf2c3715SXin Li Wrapper<MatrixType> wrapper(m0);
38*bf2c3715SXin Li VERIFY_EVALUATION_COUNT( MatrixType m3(wrapper) , 1);
39*bf2c3715SXin Li }
40*bf2c3715SXin Li
41*bf2c3715SXin Li
EIGEN_DECLARE_TEST(constructor)42*bf2c3715SXin Li EIGEN_DECLARE_TEST(constructor)
43*bf2c3715SXin Li {
44*bf2c3715SXin Li for(int i = 0; i < g_repeat; i++) {
45*bf2c3715SXin Li CALL_SUBTEST_1( ctor_init1(Matrix<float, 1, 1>()) );
46*bf2c3715SXin Li CALL_SUBTEST_1( ctor_init1(Matrix4d()) );
47*bf2c3715SXin Li CALL_SUBTEST_1( ctor_init1(MatrixXcf(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
48*bf2c3715SXin Li CALL_SUBTEST_1( ctor_init1(MatrixXi(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
49*bf2c3715SXin Li }
50*bf2c3715SXin Li {
51*bf2c3715SXin Li Matrix<Index,1,1> a(123);
52*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123);
53*bf2c3715SXin Li }
54*bf2c3715SXin Li {
55*bf2c3715SXin Li Matrix<Index,1,1> a(123.0);
56*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123);
57*bf2c3715SXin Li }
58*bf2c3715SXin Li {
59*bf2c3715SXin Li Matrix<float,1,1> a(123);
60*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123.f);
61*bf2c3715SXin Li }
62*bf2c3715SXin Li {
63*bf2c3715SXin Li Array<Index,1,1> a(123);
64*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123);
65*bf2c3715SXin Li }
66*bf2c3715SXin Li {
67*bf2c3715SXin Li Array<Index,1,1> a(123.0);
68*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123);
69*bf2c3715SXin Li }
70*bf2c3715SXin Li {
71*bf2c3715SXin Li Array<float,1,1> a(123);
72*bf2c3715SXin Li VERIFY_IS_EQUAL(a[0], 123.f);
73*bf2c3715SXin Li }
74*bf2c3715SXin Li {
75*bf2c3715SXin Li Array<Index,3,3> a(123);
76*bf2c3715SXin Li VERIFY_IS_EQUAL(a(4), 123);
77*bf2c3715SXin Li }
78*bf2c3715SXin Li {
79*bf2c3715SXin Li Array<Index,3,3> a(123.0);
80*bf2c3715SXin Li VERIFY_IS_EQUAL(a(4), 123);
81*bf2c3715SXin Li }
82*bf2c3715SXin Li {
83*bf2c3715SXin Li Array<float,3,3> a(123);
84*bf2c3715SXin Li VERIFY_IS_EQUAL(a(4), 123.f);
85*bf2c3715SXin Li }
86*bf2c3715SXin Li {
87*bf2c3715SXin Li MatrixXi m1(M,N);
88*bf2c3715SXin Li VERIFY_IS_EQUAL(m1.rows(),M);
89*bf2c3715SXin Li VERIFY_IS_EQUAL(m1.cols(),N);
90*bf2c3715SXin Li ArrayXXi a1(M,N);
91*bf2c3715SXin Li VERIFY_IS_EQUAL(a1.rows(),M);
92*bf2c3715SXin Li VERIFY_IS_EQUAL(a1.cols(),N);
93*bf2c3715SXin Li VectorXi v1(M);
94*bf2c3715SXin Li VERIFY_IS_EQUAL(v1.size(),M);
95*bf2c3715SXin Li ArrayXi a2(M);
96*bf2c3715SXin Li VERIFY_IS_EQUAL(a2.size(),M);
97*bf2c3715SXin Li }
98*bf2c3715SXin Li }
99