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/size.hpp>
11#include <boost/numeric/ublas/tags.hpp>
12#include <boost/numeric/ublas/vector.hpp>
13#include <boost/numeric/ublas/vector_expression.hpp>
14#include <iostream>
15#include "utils.hpp"
16
17
18BOOST_UBLAS_TEST_DEF( test_vector_container )
19{
20 BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Container" );
21
22 typedef double value_type;
23 typedef boost::numeric::ublas::vector<value_type> vector_type;
24
25 vector_type v(5);
26
27 v(0) = 0.555950;
28 v(1) = 0.108929;
29 v(2) = 0.948014;
30 v(3) = 0.023787;
31 v(4) = 1.023787;
32
33
34 // size(v)
35 BOOST_UBLAS_DEBUG_TRACE( "size(v) = " << boost::numeric::ublas::size(v) << " ==> " << v.size() );
36 BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(v) == v.size() );
37
38 // size<1>(v)
39 BOOST_UBLAS_DEBUG_TRACE( "size<1>(v) = " << (boost::numeric::ublas::size<1>(v)) << " ==> " << v.size() );
40 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(v) == v.size()) );
41
42 // [NOT_COMPILE]: this should *correctly* cause a compilation error
43 // size<2>(v)
44 //BOOST_UBLAS_DEBUG_TRACE( "size<2>(v) = " << (boost::numeric::ublas::size<vector_type,2>(v)) << " ==> " << v.size() );
45 //BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(v) == v.size()) );
46 // [/NOT_COMPILE]
47}
48
49
50BOOST_UBLAS_TEST_DEF( test_vector_expression )
51{
52 BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Expression" );
53
54 typedef double value_type;
55 typedef boost::numeric::ublas::vector<value_type> vector_type;
56
57 vector_type v(5);
58
59 v(0) = 0.555950;
60 v(1) = 0.108929;
61 v(2) = 0.948014;
62 v(3) = 0.023787;
63 v(4) = 1.023787;
64
65
66 // size(-v)
67 BOOST_UBLAS_DEBUG_TRACE( "size(-v) = " << boost::numeric::ublas::size(-v) << " ==> " << (-v).size() );
68 BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(-v) == (-v).size() );
69
70 // size<1>(-v)
71 BOOST_UBLAS_DEBUG_TRACE( "size<1>(-v) = " << (boost::numeric::ublas::size<1>(-v)) << " ==> " << (-v).size() );
72 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(-v) == (-v).size()) );
73}
74
75
76BOOST_UBLAS_TEST_DEF( test_vector_reference )
77{
78 BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Reference" );
79
80 typedef double value_type;
81 typedef boost::numeric::ublas::vector<value_type> vector_type;
82 typedef boost::numeric::ublas::vector_reference<vector_type> vector_reference_type;
83
84 vector_type v(5);
85
86 v(0) = 0.555950;
87 v(1) = 0.108929;
88 v(2) = 0.948014;
89 v(3) = 0.023787;
90 v(4) = 1.023787;
91
92
93 // size(reference(v)
94 BOOST_UBLAS_DEBUG_TRACE( "size(reference(v)) = " << boost::numeric::ublas::size(vector_reference_type(v)) << " ==> " << vector_reference_type(v).size() );
95 BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(vector_reference_type(v)) == vector_reference_type(v).size() );
96
97 // size<1>(reference(v))
98 BOOST_UBLAS_DEBUG_TRACE( "size<1>(reference(v)) = " << (boost::numeric::ublas::size<1>(vector_reference_type(v))) << " ==> " << vector_reference_type(v).size() );
99 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(vector_reference_type(v)) == vector_reference_type(v).size()) );
100}
101
102
103BOOST_UBLAS_TEST_DEF( test_row_major_matrix_container )
104{
105 BOOST_UBLAS_DEBUG_TRACE( "TEST Row-major Matrix Container" );
106
107 typedef double value_type;
108 typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::row_major> matrix_type;
109
110 matrix_type A(5,4);
111
112 A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
113 A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
114 A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
115 A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
116 A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
117
118
119 // [NOT_COMPILE]
120 // size(A)
121 //BOOST_UBLAS_DEBUG_TRACE( "size(A) = " << boost::numeric::ublas::size(A) << " ==> " << A.size1() );
122 //BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(A) == A.size1() );
123 // [/NOT_COMPILE]
124
125 // size<1>(A)
126 BOOST_UBLAS_DEBUG_TRACE( "size<1>(A) = " << (boost::numeric::ublas::size<1>(A)) << " ==> " << A.size1() );
127 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(A) == A.size1()) );
128
129 // size<2>(A)
130 BOOST_UBLAS_DEBUG_TRACE( "size<2>(A) = " << (boost::numeric::ublas::size<2>(A)) << " ==> " << A.size2() );
131 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(A) == A.size2()) );
132
133 // size<major>(A)
134 BOOST_UBLAS_DEBUG_TRACE( "size<major>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A)) << " ==> " << A.size1() );
135 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A) == A.size1()) );
136
137 // size<minor>(A)
138 BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A)) << " ==> " << A.size2() );
139 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A) == A.size2()) );
140
141 // size<leading>(A)
142 BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A)) << " ==> " << A.size2() );
143 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A) == A.size2()) );
144}
145
146
147BOOST_UBLAS_TEST_DEF( test_col_major_matrix_container )
148{
149 BOOST_UBLAS_DEBUG_TRACE( "TEST Column-major Matrix Container" );
150
151 typedef double value_type;
152 typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::column_major> matrix_type;
153
154 matrix_type A(5,4);
155
156 A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
157 A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
158 A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
159 A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
160 A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
161
162
163 // size<1>(A)
164 BOOST_UBLAS_DEBUG_TRACE( "size<1>(A) = " << (boost::numeric::ublas::size<1>(A)) << " ==> " << A.size1() );
165 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(A) == A.size1()) );
166
167 // size<2>(A)
168 BOOST_UBLAS_DEBUG_TRACE( "size<2>(A) = " << (boost::numeric::ublas::size<2>(A)) << " ==> " << A.size2() );
169 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(A) == A.size2()) );
170
171 // size<major>(A)
172 BOOST_UBLAS_DEBUG_TRACE( "size<major>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A)) << " ==> " << A.size2() );
173 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A) == A.size2()) );
174
175 // size<minor>(A)
176 BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A)) << " ==> " << A.size1() );
177 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A) == A.size1()) );
178
179 // size<leading>(A)
180 BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A)) << " ==> " << A.size1() );
181 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A) == A.size1()) );
182}
183
184
185BOOST_UBLAS_TEST_DEF( test_matrix_expression )
186{
187 BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Expression" );
188
189 typedef double value_type;
190 typedef boost::numeric::ublas::matrix<value_type> matrix_type;
191
192 matrix_type A(5,4);
193
194 A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
195 A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
196 A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
197 A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
198 A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
199
200
201 // size<1>(A')
202 BOOST_UBLAS_DEBUG_TRACE( "size<1>(A') = " << (boost::numeric::ublas::size<1>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
203 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(boost::numeric::ublas::trans(A)) == A.size2()) );
204
205 // size<2>(A')
206 BOOST_UBLAS_DEBUG_TRACE( "size<2>(A') = " << (boost::numeric::ublas::size<2>(boost::numeric::ublas::trans(A))) << " ==> " << A.size1() );
207 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(boost::numeric::ublas::trans(A)) == A.size1()) );
208
209 // size<major>(A') [A is row-major => A' column-major, and viceversa]
210 BOOST_UBLAS_DEBUG_TRACE( "size<major>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(boost::numeric::ublas::trans(A))) << " ==> " << A.size1() );
211 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(boost::numeric::ublas::trans(A)) == A.size1()) );
212
213 // size<minor>(A') [A is row-major => A' column-major, and viceversa]
214 BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
215 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(boost::numeric::ublas::trans(A)) == A.size2()) );
216
217 // size<leading>(A') [A row-major => A' column-major, and viceversa]
218 BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
219 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(boost::numeric::ublas::trans(A)) == A.size2()) );
220}
221
222
223BOOST_UBLAS_TEST_DEF( test_matrix_reference )
224{
225 BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Reference" );
226
227 typedef double value_type;
228 typedef boost::numeric::ublas::matrix<value_type> matrix_type;
229 typedef boost::numeric::ublas::matrix_reference<matrix_type> matrix_reference_type;
230
231 matrix_type A(5,4);
232
233 A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
234 A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
235 A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
236 A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
237 A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
238
239
240 // size<1>(reference(A))
241 BOOST_UBLAS_DEBUG_TRACE( "size<1>(reference(A)) = " << (boost::numeric::ublas::size<1>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size1() );
242 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(matrix_reference_type(A)) == matrix_reference_type(A).size1()) );
243
244 // size<2>(reference(A))
245 BOOST_UBLAS_DEBUG_TRACE( "size<2>(reference(A)) = " << (boost::numeric::ublas::size<2>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
246 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
247
248 // size<major>(reference(A))
249 BOOST_UBLAS_DEBUG_TRACE( "size<major>(reference(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size1() );
250 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(matrix_reference_type(A)) == matrix_reference_type(A).size1()) );
251
252 // size<minor>(reference(A))
253 BOOST_UBLAS_DEBUG_TRACE( "size<minor>(reference(A)) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
254 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
255
256 // size<leading>(reference(A))
257 BOOST_UBLAS_DEBUG_TRACE( "size<leading>(reference(A)) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
258 BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
259}
260
261
262int main()
263{
264 BOOST_UBLAS_TEST_BEGIN();
265
266 BOOST_UBLAS_TEST_DO( test_vector_container );
267 BOOST_UBLAS_TEST_DO( test_vector_expression );
268 BOOST_UBLAS_TEST_DO( test_vector_reference );
269 BOOST_UBLAS_TEST_DO( test_row_major_matrix_container );
270 BOOST_UBLAS_TEST_DO( test_col_major_matrix_container );
271 BOOST_UBLAS_TEST_DO( test_matrix_expression );
272 BOOST_UBLAS_TEST_DO( test_matrix_reference );
273
274 BOOST_UBLAS_TEST_END();
275}
276

source code of boost/libs/numeric/ublas/test/size.cpp