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 | |
18 | BOOST_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 | |
50 | BOOST_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 | |
76 | BOOST_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 | |
103 | BOOST_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 | |
147 | BOOST_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 | |
185 | BOOST_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 | |
223 | BOOST_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 | |
262 | int 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 | |