]>
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.
13 #if defined(__GNUC__) && (__GNUC__ >= 9)
14 #pragma GCC diagnostic ignored "-Wdeprecated-copy"
19 // Test matrix & vector expression templates
20 template <class V
, class M
, int N
>
21 struct test_my_matrix_vector
23 typedef typename
V::value_type value_type
;
25 template <class VP
, class MP
>
26 void test_with(VP
& v1
, VP
& v2
, MP
& m1
) const
31 initialize_matrix(m1
);
32 for (int i
= 0; i
< N
; ++i
)
34 v2
= ublas::row(m1
, i
);
35 std::cout
<< "row (m, " << i
<< ") = " << v2
<< std::endl
;
36 v2
= ublas::column(m1
, i
);
37 std::cout
<< "column (m, " << i
<< ") = " << v2
<< std::endl
;
41 initialize_vector(v1
);
42 initialize_vector(v2
);
45 m1
= ublas::outer_prod(v1
, v2
);
46 std::cout
<< "outer_prod (v1, v2) = " << m1
<< std::endl
;
48 // Matrix vector product
49 initialize_matrix(m1
);
50 initialize_vector(v1
);
51 v2
= ublas::prod(m1
, v1
);
52 std::cout
<< "prod (m1, v1) = " << v2
<< std::endl
;
53 v2
= ublas::prod(v1
, m1
);
54 std::cout
<< "prod (v1, m1) = " << v2
<< std::endl
;
58 void operator()() const
68 test_with(v1
, v2
, m1
);
70 ublas::matrix_row
<M
> mr1(m1
, 1), mr2(m1
, 1);
71 test_with(mr1
, mr2
, m1
);
73 ublas::matrix_column
<M
> mc1(m1
, 1), mc2(m1
, 1);
74 test_with(mc1
, mc2
, m1
);
77 ublas::matrix_vector_range
<M
> mvr1(m1
, ublas::range(0, N
), ublas::range(0, N
)),
78 mvr2(m1
, ublas::range(0, N
), ublas::range(0, N
));
79 test_with(mvr1
, mvr2
, m1
);
83 ublas::matrix_vector_slice
<M
> mvs1(m1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
)),
84 mvs2(m1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
));
85 test_with(mvs1
, mvs2
, m1
);
90 void operator()(int) const
97 ublas::banded_adaptor
<M
> bam1(m1
, 1, 1);
98 test_with(v1
, v2
, bam1
);
100 ublas::matrix_row
<ublas::banded_adaptor
<M
> > mr1(bam1
, 1), mr2(bam1
, 1);
101 test_with(mr1
, mr2
, bam1
);
103 ublas::matrix_column
<ublas::banded_adaptor
<M
> > mc1(bam1
, 1), mc2(bam1
, 1);
104 test_with(mc1
, mc2
, bam1
);
107 ublas::matrix_vector_range
<ublas::banded_adaptor
<M
> > mvr1(bam1
, ublas::range(0, N
), ublas::range(0, N
)),
108 mvr2(bam1
, ublas::range(0, N
), ublas::range(0, N
));
109 test_with(mvr1
, mvr2
, bam1
);
113 ublas::matrix_vector_slice
<ublas::banded_adaptor
<M
> > mvs1(bam1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
)),
114 mvs2(bam1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
));
115 test_with(mvs1
, mvs2
, bam1
);
121 ublas::diagonal_adaptor
<M
> dam1(m1
);
122 test_with(v1
, v2
, dam1
);
124 ublas::matrix_row
<ublas::diagonal_adaptor
<M
> > mr1(dam1
, 1), mr2(dam1
, 1);
125 test_with(mr1
, mr2
, dam1
);
127 ublas::matrix_column
<ublas::diagonal_adaptor
<M
> > mc1(dam1
, 1), mc2(dam1
, 1);
128 test_with(mc1
, mc2
, dam1
);
131 ublas::matrix_vector_range
<ublas::diagonal_adaptor
<M
> > mvr1(dam1
, ublas::range(0, N
), ublas::range(0, N
)),
132 mvr2(dam1
, ublas::range(0, N
), ublas::range(0, N
));
133 test_with(mvr1
, mvr2
, dam1
);
137 ublas::matrix_vector_slice
<ublas::diagonal_adaptor
<M
> > mvs1(dam1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
)),
138 mvs2(dam1
, ublas::slice(0, 1, N
), ublas::slice(0, 1, N
));
139 test_with(mvs1
, mvs2
, dam1
);
147 // Test matrix & vector
148 void test_matrix_vector()
150 std::cout
<< "test_matrix_vector" << std::endl
;
153 #ifdef USE_BOUNDED_ARRAY
155 std::cout
<< "mp_test_type, bounded_array" << std::endl
;
156 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
157 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3>()();
158 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
159 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3>()(0);
163 std::cout
<< "double, bounded_array" << std::endl
;
164 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
165 ublas::banded_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3>()();
166 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
167 ublas::banded_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3>()(0);
170 #ifdef USE_STD_COMPLEX
172 std::cout
<< "std::complex<mp_test_type>, bounded_array" << std::endl
;
173 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
174 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3>()();
175 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
176 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3>()(0);
180 std::cout
<< "std::complex<double>, bounded_array" << std::endl
;
181 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
182 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3>()();
183 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
184 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3>()(0);
189 #ifdef USE_UNBOUNDED_ARRAY
191 std::cout
<< "mp_test_type, unbounded_array" << std::endl
;
192 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
193 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3>()();
194 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
195 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3>()(0);
199 std::cout
<< "double, unbounded_array" << std::endl
;
200 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
201 ublas::banded_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3>()();
202 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
203 ublas::banded_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3>()(0);
206 #ifdef USE_STD_COMPLEX
208 std::cout
<< "std::complex<mp_test_type>, unbounded_array" << std::endl
;
209 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
210 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3>()();
211 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
212 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3>()(0);
216 std::cout
<< "std::complex<double>, unbounded_array" << std::endl
;
217 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
218 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3>()();
219 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
220 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3>()(0);
225 #ifdef USE_STD_VECTOR
227 std::cout
<< "mp_test_type, std::vector" << std::endl
;
228 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
229 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3>()();
230 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
231 ublas::banded_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3>()(0);
235 std::cout
<< "double, std::vector" << std::endl
;
236 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
237 ublas::banded_matrix
<double, ublas::row_major
, std::vector
<double> >, 3>()();
238 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
239 ublas::banded_matrix
<double, ublas::row_major
, std::vector
<double> >, 3>()(0);
242 #ifdef USE_STD_COMPLEX
244 std::cout
<< "std::complex<mp_test_type>, std::vector" << std::endl
;
245 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
246 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3>()();
247 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
248 ublas::banded_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3>()(0);
252 std::cout
<< "std::complex<double>, std::vector" << std::endl
;
253 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
254 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3>()();
255 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
256 ublas::banded_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3>()(0);
263 #ifdef USE_BOUNDED_ARRAY
265 std::cout
<< "mp_test_type, bounded_array" << std::endl
;
266 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
267 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3>()();
268 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::bounded_array
<mp_test_type
, 3> >,
269 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::bounded_array
<mp_test_type
, 3 * 3> >, 3>()(0);
273 std::cout
<< "double, bounded_array" << std::endl
;
274 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
275 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3>()();
276 test_my_matrix_vector
<ublas::vector
<double, ublas::bounded_array
<double, 3> >,
277 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::bounded_array
<double, 3 * 3> >, 3>()(0);
280 #ifdef USE_STD_COMPLEX
282 std::cout
<< "std::complex<mp_test_type>, bounded_array" << std::endl
;
283 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
284 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3>()();
285 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::bounded_array
<std::complex<mp_test_type
>, 3> >,
286 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::bounded_array
<std::complex<mp_test_type
>, 3 * 3> >, 3>()(0);
290 std::cout
<< "std::complex<double>, bounded_array" << std::endl
;
291 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
292 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3>()();
293 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::bounded_array
<std::complex<double>, 3> >,
294 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::bounded_array
<std::complex<double>, 3 * 3> >, 3>()(0);
299 #ifdef USE_UNBOUNDED_ARRAY
301 std::cout
<< "mp_test_type, unbounded_array" << std::endl
;
302 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
303 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3>()();
304 test_my_matrix_vector
<ublas::vector
<mp_test_type
, ublas::unbounded_array
<mp_test_type
> >,
305 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, ublas::unbounded_array
<mp_test_type
> >, 3>()(0);
309 std::cout
<< "double, unbounded_array" << std::endl
;
310 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
311 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3>()();
312 test_my_matrix_vector
<ublas::vector
<double, ublas::unbounded_array
<double> >,
313 ublas::diagonal_matrix
<double, ublas::row_major
, ublas::unbounded_array
<double> >, 3>()(0);
316 #ifdef USE_STD_COMPLEX
318 std::cout
<< "std::complex<mp_test_type>, unbounded_array" << std::endl
;
319 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
320 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3>()();
321 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, ublas::unbounded_array
<std::complex<mp_test_type
> > >,
322 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, ublas::unbounded_array
<std::complex<mp_test_type
> > >, 3>()(0);
326 std::cout
<< "std::complex<double>, unbounded_array" << std::endl
;
327 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
328 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3>()();
329 test_my_matrix_vector
<ublas::vector
<std::complex<double>, ublas::unbounded_array
<std::complex<double> > >,
330 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, ublas::unbounded_array
<std::complex<double> > >, 3>()(0);
335 #ifdef USE_STD_VECTOR
337 std::cout
<< "mp_test_type, std::vector" << std::endl
;
338 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
339 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3>()();
340 test_my_matrix_vector
<ublas::vector
<mp_test_type
, std::vector
<mp_test_type
> >,
341 ublas::diagonal_matrix
<mp_test_type
, ublas::row_major
, std::vector
<mp_test_type
> >, 3>()(0);
345 std::cout
<< "double, std::vector" << std::endl
;
346 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
347 ublas::diagonal_matrix
<double, ublas::row_major
, std::vector
<double> >, 3>()();
348 test_my_matrix_vector
<ublas::vector
<double, std::vector
<double> >,
349 ublas::diagonal_matrix
<double, ublas::row_major
, std::vector
<double> >, 3>()(0);
352 #ifdef USE_STD_COMPLEX
354 std::cout
<< "std::complex<mp_test_type>, std::vector" << std::endl
;
355 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
356 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3>()();
357 test_my_matrix_vector
<ublas::vector
<std::complex<mp_test_type
>, std::vector
<std::complex<mp_test_type
> > >,
358 ublas::diagonal_matrix
<std::complex<mp_test_type
>, ublas::row_major
, std::vector
<std::complex<mp_test_type
> > >, 3>()(0);
362 std::cout
<< "std::complex<double>, std::vector" << std::endl
;
363 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
364 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3>()();
365 test_my_matrix_vector
<ublas::vector
<std::complex<double>, std::vector
<std::complex<double> > >,
366 ublas::diagonal_matrix
<std::complex<double>, ublas::row_major
, std::vector
<std::complex<double> > >, 3>()(0);