1 //  Copyright (c) 2011 David Bellot
2 //
3 //  Distributed under the Boost Software License, Version 1.0. (See
4 //  accompanying file LICENSE_1_0.txt or copy at
5 //  http://www.boost.org/LICENSE_1_0.txt)
6 
7 #include <boost/numeric/ublas/fwd.hpp>
8 #include <boost/numeric/ublas/matrix.hpp>
9 #include <boost/numeric/ublas/matrix_expression.hpp>
10 #include <boost/numeric/ublas/operation/num_rows.hpp>
11 #include <iostream>
12 #include "utils.hpp"
13 
14 
BOOST_UBLAS_TEST_DEF(test_row_major_matrix_container)15 BOOST_UBLAS_TEST_DEF( test_row_major_matrix_container )
16 {
17     BOOST_UBLAS_DEBUG_TRACE( "TEST Row-major Matrix Container" );
18 
19     typedef double value_type;
20     typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::row_major> matrix_type;
21 
22     matrix_type A(5,4);
23 
24     A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
25     A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
26     A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
27     A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
28     A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
29 
30 
31     BOOST_UBLAS_DEBUG_TRACE( "num_rows(A) = " << boost::numeric::ublas::num_rows(A) << " ==> " << A.size1() );
32     BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::num_rows(A) == A.size1() );
33 }
34 
35 
BOOST_UBLAS_TEST_DEF(test_col_major_matrix_container)36 BOOST_UBLAS_TEST_DEF( test_col_major_matrix_container )
37 {
38     BOOST_UBLAS_DEBUG_TRACE( "TEST Column-major Matrix Container" );
39 
40     typedef double value_type;
41     typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::column_major> matrix_type;
42 
43     matrix_type A(5,4);
44 
45     A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
46     A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
47     A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
48     A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
49     A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
50 
51 
52     BOOST_UBLAS_DEBUG_TRACE( "num_rows(A) = " << boost::numeric::ublas::num_rows(A) << " ==> " << A.size1() );
53     BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::num_rows(A) == A.size1() );
54 }
55 
56 
BOOST_UBLAS_TEST_DEF(test_matrix_expression)57 BOOST_UBLAS_TEST_DEF( test_matrix_expression )
58 {
59     BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Expression" );
60 
61     typedef double value_type;
62     typedef boost::numeric::ublas::matrix<value_type> matrix_type;
63 
64     matrix_type A(5,4);
65 
66     A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
67     A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
68     A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
69     A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
70     A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
71 
72 
73     BOOST_UBLAS_DEBUG_TRACE( "num_rows(A') = " << boost::numeric::ublas::num_rows(boost::numeric::ublas::trans(A)) << " ==> " << boost::numeric::ublas::trans(A).size1() );
74     BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::num_rows(boost::numeric::ublas::trans(A)) == boost::numeric::ublas::trans(A).size1() );
75 }
76 
77 
BOOST_UBLAS_TEST_DEF(test_matrix_reference)78 BOOST_UBLAS_TEST_DEF( test_matrix_reference )
79 {
80     BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Reference" );
81 
82     typedef double value_type;
83     typedef boost::numeric::ublas::matrix<value_type> matrix_type;
84     typedef boost::numeric::ublas::matrix_reference<matrix_type> matrix_reference_type;
85 
86     matrix_type A(5,4);
87 
88     A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
89     A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
90     A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
91     A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
92     A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
93 
94 
95     BOOST_UBLAS_DEBUG_TRACE( "num_rows(reference(A)) = " << boost::numeric::ublas::num_rows(matrix_reference_type(A)) << " ==> " << matrix_reference_type(A).size1() );
96     BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::num_rows(matrix_reference_type(A)) == matrix_reference_type(A).size1() );
97 }
98 
99 
main()100 int main()
101 {
102     BOOST_UBLAS_TEST_BEGIN();
103 
104     BOOST_UBLAS_TEST_DO( test_row_major_matrix_container );
105     BOOST_UBLAS_TEST_DO( test_col_major_matrix_container );
106     BOOST_UBLAS_TEST_DO( test_matrix_expression );
107     BOOST_UBLAS_TEST_DO( test_matrix_reference );
108 
109     BOOST_UBLAS_TEST_END();
110 }
111