]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multiprecision/test/ublas_interop/test42.cpp
2 // Copyright (c) 2000-2002
3 // Joerg Walter, Mathias Koch
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 // The authors gratefully acknowledge the support of
10 // GeNeSys mbH & Co. KG in producing this work.
15 // Test matrix & vector expression templates
16 template<class V
, class M
, int N
>
17 struct test_my_matrix_vector
{
18 typedef typename
V::value_type value_type
;
20 template<class VP
, class MP
>
21 void test_with (VP
&v1
, VP
&v2
, MP
&m1
) const {
25 initialize_matrix (m1
);
26 for (int i
= 0; i
< N
; ++ i
) {
27 v2
= ublas::row (m1
, i
);
28 std::cout
<< "row (m, " << i
<< ") = " << v2
<< std::endl
;
29 v2
= ublas::column (m1
, i
);
30 std::cout
<< "column (m, " << i
<< ") = " << v2
<< std::endl
;
34 initialize_vector (v1
);
35 initialize_vector (v2
);
38 m1
= ublas::outer_prod (v1
, v2
);
39 std::cout
<< "outer_prod (v1, v2) = " << m1
<< std::endl
;
41 // Matrix vector product
42 initialize_matrix (m1
);
43 initialize_vector (v1
);
44 v2
= ublas::prod (m1
, v1
);
45 std::cout
<< "prod (m1, v1) = " << v2
<< std::endl
;
46 v2
= ublas::prod (v1
, m1
);
47 std::cout
<< "prod (v1, m1) = " << v2
<< std::endl
;
51 void operator () () const {
60 test_with (v1
, v2
, m1
);
62 ublas::matrix_row
<M
> mr1 (m1
, 1), mr2 (m1
, 1);
63 test_with (mr1
, mr2
, m1
);
65 ublas::matrix_column
<M
> mc1 (m1
, 1), mc2 (m1
, 1);
66 test_with (mc1
, mc2
, m1
);
69 ublas::matrix_vector_range
<M
> mvr1 (m1
, ublas::range (0, N
), ublas::range (0, N
)),
70 mvr2 (m1
, ublas::range (0, N
), ublas::range (0, N
));
71 test_with (mvr1
, mvr2
, m1
);
75 ublas::matrix_vector_slice
<M
> mvs1 (m1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
)),
76 mvs2 (m1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
));
77 test_with (mvs1
, mvs2
, m1
);
82 void operator () (int) const {
88 ublas::banded_adaptor
<M
> bam1 (m1
, 1, 1);
89 test_with (v1
, v2
, bam1
);
91 ublas::matrix_row
<ublas::banded_adaptor
<M
> > mr1 (bam1
, 1), mr2 (bam1
, 1);
92 test_with (mr1
, mr2
, bam1
);
94 ublas::matrix_column
<ublas::banded_adaptor
<M
> > mc1 (bam1
, 1), mc2 (bam1
, 1);
95 test_with (mc1
, mc2
, bam1
);
98 ublas::matrix_vector_range
<ublas::banded_adaptor
<M
> > mvr1 (bam1
, ublas::range (0, N
), ublas::range (0, N
)),
99 mvr2 (bam1
, ublas::range (0, N
), ublas::range (0, N
));
100 test_with (mvr1
, mvr2
, bam1
);
104 ublas::matrix_vector_slice
<ublas::banded_adaptor
<M
> > mvs1 (bam1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
)),
105 mvs2 (bam1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
));
106 test_with (mvs1
, mvs2
, bam1
);
112 ublas::diagonal_adaptor
<M
> dam1 (m1
);
113 test_with (v1
, v2
, dam1
);
115 ublas::matrix_row
<ublas::diagonal_adaptor
<M
> > mr1 (dam1
, 1), mr2 (dam1
, 1);
116 test_with (mr1
, mr2
, dam1
);
118 ublas::matrix_column
<ublas::diagonal_adaptor
<M
> > mc1 (dam1
, 1), mc2 (dam1
, 1);
119 test_with (mc1
, mc2
, dam1
);
122 ublas::matrix_vector_range
<ublas::diagonal_adaptor
<M
> > mvr1 (dam1
, ublas::range (0, N
), ublas::range (0, N
)),
123 mvr2 (dam1
, ublas::range (0, N
), ublas::range (0, N
));
124 test_with (mvr1
, mvr2
, dam1
);
128 ublas::matrix_vector_slice
<ublas::diagonal_adaptor
<M
> > mvs1 (dam1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
)),
129 mvs2 (dam1
, ublas::slice (0, 1, N
), ublas::slice (0, 1, N
));
130 test_with (mvs1
, mvs2
, dam1
);
138 // Test matrix & vector
139 void test_matrix_vector () {
140 std::cout
<< "test_matrix_vector" << std::endl
;
143 #ifdef USE_BOUNDED_ARRAY
145 std::cout
<< "mp_test_type, bounded_array" << std::endl
;
146 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
147 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3> () ();
148 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
149 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3> () (0);
153 std::cout
<< "double, bounded_array" << std::endl
;
154 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
155 ublas::banded_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3> () ();
156 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
157 ublas::banded_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3> () (0);
160 #ifdef USE_STD_COMPLEX
162 std::cout
<< "std::complex<mp_test_type>, bounded_array" << std::endl
;
163 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
164 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3> () ();
165 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
166 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3> () (0);
170 std::cout
<< "std::complex<double>, bounded_array" << std::endl
;
171 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
172 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3> () ();
173 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
174 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3> () (0);
179 #ifdef USE_UNBOUNDED_ARRAY
181 std::cout
<< "mp_test_type, unbounded_array" << std::endl
;
182 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
183 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3> () ();
184 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
185 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3> () (0);
189 std::cout
<< "double, unbounded_array" << std::endl
;
190 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
191 ublas::banded_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3> () ();
192 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
193 ublas::banded_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3> () (0);
196 #ifdef USE_STD_COMPLEX
198 std::cout
<< "std::complex<mp_test_type>, unbounded_array" << std::endl
;
199 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
200 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3> () ();
201 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
202 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3> () (0);
206 std::cout
<< "std::complex<double>, unbounded_array" << std::endl
;
207 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
208 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3> () ();
209 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
210 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3> () (0);
215 #ifdef USE_STD_VECTOR
217 std::cout
<< "mp_test_type, std::vector" << std::endl
;
218 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
219 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3> () ();
220 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
221 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3> () (0);
225 std::cout
<< "double, std::vector" << std::endl
;
226 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
227 ublas::banded_matrix
<double, ublas::row_major
, std::vector
<double> >, 3> () ();
228 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
229 ublas::banded_matrix
<double, ublas::row_major
, std::vector
<double> >, 3> () (0);
232 #ifdef USE_STD_COMPLEX
234 std::cout
<< "std::complex<mp_test_type>, std::vector" << std::endl
;
235 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
236 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3> () ();
237 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
238 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3> () (0);
242 std::cout
<< "std::complex<double>, std::vector" << std::endl
;
243 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
244 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3> () ();
245 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
246 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3> () (0);
253 #ifdef USE_BOUNDED_ARRAY
255 std::cout
<< "mp_test_type, bounded_array" << std::endl
;
256 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
257 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3> () ();
258 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
259 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3> () (0);
263 std::cout
<< "double, bounded_array" << std::endl
;
264 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
265 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3> () ();
266 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
267 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3> () (0);
270 #ifdef USE_STD_COMPLEX
272 std::cout
<< "std::complex<mp_test_type>, bounded_array" << std::endl
;
273 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
274 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3> () ();
275 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
276 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3> () (0);
280 std::cout
<< "std::complex<double>, bounded_array" << std::endl
;
281 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
282 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3> () ();
283 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
284 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3> () (0);
289 #ifdef USE_UNBOUNDED_ARRAY
291 std::cout
<< "mp_test_type, unbounded_array" << std::endl
;
292 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
293 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3> () ();
294 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
295 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3> () (0);
299 std::cout
<< "double, unbounded_array" << std::endl
;
300 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
301 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3> () ();
302 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
303 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3> () (0);
306 #ifdef USE_STD_COMPLEX
308 std::cout
<< "std::complex<mp_test_type>, unbounded_array" << std::endl
;
309 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
310 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3> () ();
311 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
312 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3> () (0);
316 std::cout
<< "std::complex<double>, unbounded_array" << std::endl
;
317 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
318 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3> () ();
319 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
320 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3> () (0);
325 #ifdef USE_STD_VECTOR
327 std::cout
<< "mp_test_type, std::vector" << std::endl
;
328 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
329 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3> () ();
330 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
331 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3> () (0);
335 std::cout
<< "double, std::vector" << std::endl
;
336 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
337 ublas::diagonal_matrix
<double, ublas::row_major
, std::vector
<double> >, 3> () ();
338 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
339 ublas::diagonal_matrix
<double, ublas::row_major
, std::vector
<double> >, 3> () (0);
342 #ifdef USE_STD_COMPLEX
344 std::cout
<< "std::complex<mp_test_type>, std::vector" << std::endl
;
345 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
346 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3> () ();
347 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
348 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3> () (0);
352 std::cout
<< "std::complex<double>, std::vector" << std::endl
;
353 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
354 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3> () ();
355 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
356 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3> () (0);