Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / ublas_interop / test23.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 M, int N>
20 void test_blas_3<M, N>::test()
21 {
22    {
23       M m1(N, N), m2(N, N), m3(N, N);
24
25       // _t_mm
26       initialize_matrix(m1);
27       initialize_matrix(m2);
28       ublas::blas_3::tmm(m1, value_type(1), m2, m1);
29       std::cout << "tmm (m1, 1, m2, m1) = " << m1 << std::endl;
30       initialize_matrix(m1);
31       initialize_matrix(m2);
32       ublas::blas_3::tmm(m1, value_type(1), m2, ublas::trans(m1));
33       std::cout << "tmm (m1, 1, m2, trans (m1)) = " << m1 << std::endl;
34       initialize_matrix(m1);
35       initialize_matrix(m2);
36       ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), m1);
37       std::cout << "tmm (m1, 1, trans (m2), m1) = " << m1 << std::endl;
38       initialize_matrix(m1);
39       initialize_matrix(m2);
40       ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::trans(m1));
41       std::cout << "tmm (m1, 1, trans (m2), trans (m1)) = " << m1 << std::endl;
42 #ifdef USE_STD_COMPLEX
43       initialize_matrix(m1);
44       initialize_matrix(m2);
45       ublas::blas_3::tmm(m1, value_type(1), m2, ublas::herm(m1));
46       std::cout << "tmm (m1, 1, m2, herm (m1)) = " << m1 << std::endl;
47       initialize_matrix(m1);
48       initialize_matrix(m2);
49       ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), m1);
50       std::cout << "tmm (m1, 1, herm (m2), m1) = " << m1 << std::endl;
51       initialize_matrix(m1);
52       initialize_matrix(m2);
53       ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::herm(m1));
54       std::cout << "tmm (m1, 1, trans (m2), herm (m1)) = " << m1 << std::endl;
55       initialize_matrix(m1);
56       initialize_matrix(m2);
57       ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), ublas::trans(m1));
58       std::cout << "tmm (m1, 1, herm (m2), trans (m1)) = " << m1 << std::endl;
59       initialize_matrix(m1);
60       initialize_matrix(m2);
61       ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), ublas::herm(m1));
62       std::cout << "tmm (m1, 1, herm (m2), herm (m1)) = " << m1 << std::endl;
63 #endif
64
65       // _t_sm
66       initialize_matrix(m1);
67       initialize_matrix(m2, ublas::lower_tag());
68       initialize_matrix(m3);
69       ublas::blas_3::tsm(m1, value_type(1), m2, ublas::lower_tag());
70       std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
71       initialize_matrix(m1);
72       initialize_matrix(m2, ublas::upper_tag());
73       ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::lower_tag());
74       std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
75 #ifdef USE_STD_COMPLEX
76       initialize_matrix(m1);
77       initialize_matrix(m2, ublas::upper_tag());
78       ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::lower_tag());
79       std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
80 #endif
81       initialize_matrix(m1);
82       initialize_matrix(m2, ublas::upper_tag());
83       ublas::blas_3::tsm(m1, value_type(1), m2, ublas::upper_tag());
84       std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
85       initialize_matrix(m1);
86       initialize_matrix(m2, ublas::lower_tag());
87       ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::upper_tag());
88       std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
89 #ifdef USE_STD_COMPLEX
90       initialize_matrix(m1);
91       initialize_matrix(m2, ublas::lower_tag());
92       ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::upper_tag());
93       std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
94 #endif
95
96       // _g_mm
97       // _s_mm
98       // _h_mm
99       initialize_matrix(m1);
100       initialize_matrix(m2);
101       initialize_matrix(m3);
102       ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, m3);
103       std::cout << "gmm (m1, 1, 1, m2, m3) = " << m1 << std::endl;
104       initialize_matrix(m1);
105       initialize_matrix(m2);
106       initialize_matrix(m3);
107       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), m3);
108       std::cout << "gmm (m1, 1, 1, trans (m2), m3) = " << m1 << std::endl;
109       initialize_matrix(m1);
110       initialize_matrix(m2);
111       initialize_matrix(m3);
112       ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::trans(m3));
113       std::cout << "gmm (m1, 1, 1, m2, trans (m3)) = " << m1 << std::endl;
114       initialize_matrix(m1);
115       initialize_matrix(m2);
116       initialize_matrix(m3);
117       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
118       std::cout << "gmm (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
119 #ifdef USE_STD_COMPLEX
120       initialize_matrix(m1);
121       initialize_matrix(m2);
122       initialize_matrix(m3);
123       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), m3);
124       std::cout << "gmm (m1, 1, 1, herm (m2), m3) = " << m1 << std::endl;
125       initialize_matrix(m1);
126       initialize_matrix(m2);
127       initialize_matrix(m3);
128       ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::herm(m3));
129       std::cout << "gmm (m1, 1, 1, m2, herm (m3)) = " << m1 << std::endl;
130       initialize_matrix(m1);
131       initialize_matrix(m2);
132       initialize_matrix(m3);
133       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::trans(m3));
134       std::cout << "gmm (m1, 1, 1, herm (m2), trans (m3)) = " << m1 << std::endl;
135       initialize_matrix(m1);
136       initialize_matrix(m2);
137       initialize_matrix(m3);
138       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::herm(m3));
139       std::cout << "gmm (m1, 1, 1, trans (m2), herm (m3)) = " << m1 << std::endl;
140       initialize_matrix(m1);
141       initialize_matrix(m2);
142       initialize_matrix(m3);
143       ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
144       std::cout << "gmm (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
145 #endif
146
147       // s_rk
148       initialize_matrix(m1);
149       initialize_matrix(m2);
150       ublas::blas_3::srk(m1, value_type(1), value_type(1), m2);
151       std::cout << "srk (m1, 1, 1, m2) = " << m1 << std::endl;
152       initialize_matrix(m1);
153       initialize_matrix(m2);
154       ublas::blas_3::srk(m1, value_type(1), value_type(1), ublas::trans(m2));
155       std::cout << "srk (m1, 1, 1, trans (m2)) = " << m1 << std::endl;
156
157 #ifdef USE_STD_COMPLEX
158       // h_rk
159       initialize_matrix(m1);
160       initialize_matrix(m2);
161       ublas::blas_3::hrk(m1, value_type(1), value_type(1), m2);
162       std::cout << "hrk (m1, 1, 1, m2) = " << m1 << std::endl;
163       initialize_matrix(m1);
164       initialize_matrix(m2);
165       ublas::blas_3::hrk(m1, value_type(1), value_type(1), ublas::herm(m2));
166       std::cout << "hrk (m1, 1, 1, herm (m2)) = " << m1 << std::endl;
167 #endif
168
169       // s_r2k
170       initialize_matrix(m1);
171       initialize_matrix(m2);
172       initialize_matrix(m3);
173       ublas::blas_3::sr2k(m1, value_type(1), value_type(1), m2, m3);
174       std::cout << "sr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
175       initialize_matrix(m1);
176       initialize_matrix(m2);
177       initialize_matrix(m3);
178       ublas::blas_3::sr2k(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
179       std::cout << "sr2k (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
180
181 #ifdef USE_STD_COMPLEX
182       // h_r2k
183       initialize_matrix(m1);
184       initialize_matrix(m2);
185       initialize_matrix(m3);
186       ublas::blas_3::hr2k(m1, value_type(1), value_type(1), m2, m3);
187       std::cout << "hr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
188       initialize_matrix(m1);
189       initialize_matrix(m2);
190       initialize_matrix(m3);
191       ublas::blas_3::hr2k(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
192       std::cout << "hr2k (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
193 #endif
194    }
195 }
196
197 #ifdef USE_FLOAT
198 template struct test_blas_3<ublas::matrix<mp_test_type>, 3>;
199 #endif
200
201 #ifdef USE_DOUBLE
202 template struct test_blas_3<ublas::matrix<double>, 3>;
203 #endif
204
205 #ifdef USE_STD_COMPLEX
206 #ifdef USE_FLOAT
207 template struct test_blas_3<ublas::matrix<std::complex<mp_test_type> >, 3>;
208 #endif
209
210 #ifdef USE_DOUBLE
211 template struct test_blas_3<ublas::matrix<std::complex<double> >, 3>;
212 #endif
213 #endif