Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / ublas_interop / test22.cpp
1 //
2 //  Copyright (c) 2000-2002
3 //  Joerg Walter, Mathias Koch
4 //
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)
8 //
9 //  The authors gratefully acknowledge the support of
10 //  GeNeSys mbH & Co. KG in producing this work.
11 //
12
13 #if defined(__GNUC__) && (__GNUC__ >= 9)
14 #pragma GCC diagnostic ignored "-Wdeprecated-copy"
15 #endif
16
17 #include "test2.hpp"
18
19 template <class V, class M, int N>
20 void test_blas_2<V, M, N>::test()
21 {
22    {
23       V v1(N), v2(N);
24       M m(N, N);
25
26       // _t_mv
27       initialize_vector(v1);
28       initialize_matrix(m);
29       ublas::blas_2::tmv(v1, m);
30       std::cout << "tmv (v1, m) = " << v1 << std::endl;
31       initialize_vector(v1);
32       initialize_matrix(m);
33       ublas::blas_2::tmv(v1, ublas::trans(m));
34       std::cout << "tmv (v1, trans (m)) = " << v1 << std::endl;
35 #ifdef USE_STD_COMPLEX
36       initialize_vector(v1);
37       initialize_matrix(m);
38       ublas::blas_2::tmv(v1, ublas::herm(m));
39       std::cout << "tmv (v1, herm (m)) = " << v1 << std::endl;
40 #endif
41
42       // _t_sv
43       initialize_vector(v1);
44       initialize_vector(v2);
45       initialize_matrix(m, ublas::lower_tag());
46       ublas::blas_2::tsv(v1, m, ublas::lower_tag());
47       std::cout << "tsv (v1, m) = " << v1 << " " << ublas::prod(m, v1) - v2 << std::endl;
48       initialize_vector(v1);
49       initialize_vector(v2);
50       initialize_matrix(m, ublas::upper_tag());
51       ublas::blas_2::tsv(v1, ublas::trans(m), ublas::lower_tag());
52       std::cout << "tsv (v1, trans (m)) = " << v1 << " " << ublas::prod(ublas::trans(m), v1) - v2 << std::endl;
53 #ifdef USE_STD_COMPLEX
54       initialize_vector(v1);
55       initialize_vector(v2);
56       initialize_matrix(m, ublas::upper_tag());
57       ublas::blas_2::tsv(v1, ublas::herm(m), ublas::lower_tag());
58       std::cout << "tsv (v1, herm (m)) = " << v1 << " " << ublas::prod(ublas::herm(m), v1) - v2 << std::endl;
59 #endif
60       initialize_vector(v1);
61       initialize_vector(v2);
62       initialize_matrix(m, ublas::upper_tag());
63       ublas::blas_2::tsv(v1, m, ublas::upper_tag());
64       std::cout << "tsv (v1, m) = " << v1 << " " << ublas::prod(m, v1) - v2 << std::endl;
65       initialize_vector(v1);
66       initialize_vector(v2);
67       initialize_matrix(m, ublas::lower_tag());
68       ublas::blas_2::tsv(v1, ublas::trans(m), ublas::upper_tag());
69       std::cout << "tsv (v1, trans (m)) = " << v1 << " " << ublas::prod(ublas::trans(m), v1) - v2 << std::endl;
70 #ifdef USE_STD_COMPLEX
71       initialize_vector(v1);
72       initialize_vector(v2);
73       initialize_matrix(m, ublas::lower_tag());
74       ublas::blas_2::tsv(v1, ublas::herm(m), ublas::upper_tag());
75       std::cout << "tsv (v1, herm (m)) = " << v1 << " " << ublas::prod(ublas::herm(m), v1) - v2 << std::endl;
76 #endif
77
78       // _g_mv
79       // _s_mv
80       // _h_mv
81       initialize_vector(v1);
82       initialize_vector(v2);
83       initialize_matrix(m);
84       ublas::blas_2::gmv(v1, value_type(1), value_type(1), m, v2);
85       std::cout << "gmv (v1, 1, 1, m, v2) = " << v1 << std::endl;
86       ublas::blas_2::gmv(v1, value_type(1), value_type(1), ublas::trans(m), v2);
87       std::cout << "gmv (v1, 1, 1, trans (m), v2) = " << v1 << std::endl;
88 #ifdef USE_STD_COMPLEX
89       ublas::blas_2::gmv(v1, value_type(1), value_type(1), ublas::herm(m), v2);
90       std::cout << "gmv (v1, 1, 1, herm (m), v2) = " << v1 << std::endl;
91 #endif
92
93       // _g_r
94       // _g_ru
95       // _g_rc
96       initialize_vector(v1);
97       initialize_vector(v2);
98       initialize_matrix(m);
99       ublas::blas_2::gr(m, value_type(1), v1, v2);
100       std::cout << "gr (m, 1, v1, v2) = " << m << std::endl;
101       ublas::blas_2::gr(m, value_type(1), v1, ublas::conj(v2));
102       std::cout << "gr (m, 1, v1, conj (v2)) = " << m << std::endl;
103
104       // _s_r
105       initialize_vector(v1);
106       initialize_matrix(m);
107       ublas::blas_2::sr(m, value_type(1), v1);
108       std::cout << "sr (m, 1, v1) = " << m << std::endl;
109
110 #ifdef USE_STD_COMPLEX
111       // _h_r
112       initialize_vector(v1);
113       initialize_matrix(m);
114       ublas::blas_2::hr(m, value_type(1), v1);
115       std::cout << "hr (m, 1, v1) = " << m << std::endl;
116 #endif
117
118       // _s_r2
119       initialize_vector(v1);
120       initialize_vector(v2);
121       initialize_matrix(m);
122       ublas::blas_2::sr2(m, value_type(1), v1, v2);
123       std::cout << "sr2 (m, 1, v1, v2) = " << m << std::endl;
124
125 #ifdef USE_STD_COMPLEX
126       // _h_r2
127       initialize_vector(v1);
128       initialize_vector(v2);
129       initialize_matrix(m);
130       ublas::blas_2::hr2(m, value_type(1), v1, v2);
131       std::cout << "hr2 (m, 1, v1, v2) = " << m << std::endl;
132 #endif
133    }
134 }
135
136 #ifdef USE_FLOAT
137 template struct test_blas_2<ublas::vector<mp_test_type>, ublas::matrix<mp_test_type>, 3>;
138 #endif
139
140 #ifdef USE_DOUBLE
141 template struct test_blas_2<ublas::vector<double>, ublas::matrix<double>, 3>;
142 #endif
143
144 #ifdef USE_STD_COMPLEX
145 #ifdef USE_FLOAT
146 template struct test_blas_2<ublas::vector<std::complex<mp_test_type> >, ublas::matrix<std::complex<mp_test_type> >, 3>;
147 #endif
148
149 #ifdef USE_DOUBLE
150 template struct test_blas_2<ublas::vector<std::complex<double> >, ublas::matrix<std::complex<double> >, 3>;
151 #endif
152 #endif