test32.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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. #include "test3.hpp"
  13. // Test matrix & vector expression templates
  14. template<class V, class M, int N>
  15. struct test_my_matrix_vector {
  16. typedef typename V::value_type value_type;
  17. template<class VP, class MP>
  18. void test_with (VP &v1, VP &v2, MP &m1) const {
  19. {
  20. // Rows and columns
  21. initialize_matrix (m1);
  22. for (int i = 0; i < N; ++ i) {
  23. v1 = ublas::row (m1, i);
  24. std::cout << "row (m, " << i << ") = " << v1 << std::endl;
  25. v1 = ublas::column (m1, i);
  26. std::cout << "column (m, " << i << ") = " << v1 << std::endl;
  27. }
  28. // Outer product
  29. initialize_vector (v1);
  30. initialize_vector (v2);
  31. m1 = ublas::outer_prod (v1, v2);
  32. std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
  33. // Matrix vector product
  34. initialize_matrix (m1);
  35. initialize_vector (v1);
  36. v2 = ublas::prod (m1, v1);
  37. std::cout << "prod (m1, v1) = " << v2 << std::endl;
  38. v2 = ublas::prod (v1, m1);
  39. std::cout << "prod (v1, m1) = " << v2 << std::endl;
  40. }
  41. }
  42. void operator () () const {
  43. {
  44. V v1 (N, N), v2 (N, N);
  45. M m1 (N, N, N * N);
  46. test_with (v1, v2, m1);
  47. ublas::matrix_row<M> mr1 (m1, 0), mr2 (m1, N - 1);
  48. test_with (mr1, mr2, m1);
  49. ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, N - 1);
  50. test_with (mc1, mc2, m1);
  51. #ifdef USE_RANGE
  52. ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
  53. mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
  54. test_with (mvr1, mvr2, m1);
  55. #endif
  56. #ifdef USE_SLICE
  57. ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
  58. mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
  59. test_with (mvs1, mvs2, m1);
  60. #endif
  61. }
  62. }
  63. };
  64. // Test matrix & vector
  65. void test_matrix_vector () {
  66. std::cout << "test_matrix_vector" << std::endl;
  67. #ifdef USE_SPARSE_MATRIX
  68. #ifdef USE_MAP_ARRAY
  69. #ifdef USE_FLOAT
  70. std::cout << "float, map_array" << std::endl;
  71. test_my_matrix_vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> >,
  72. ublas::mapped_matrix<float, ublas::row_major, ublas::map_array<std::size_t, float> >, 3 > () ();
  73. #endif
  74. #ifdef USE_DOUBLE
  75. std::cout << "double, map_array" << std::endl;
  76. test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
  77. ublas::mapped_matrix<double, ublas::row_major, ublas::map_array<std::size_t, double> >, 3 > () ();
  78. #endif
  79. #ifdef USE_STD_COMPLEX
  80. #ifdef USE_FLOAT
  81. std::cout << "std::complex<float>, map_array" << std::endl;
  82. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > >,
  83. ublas::mapped_matrix<std::complex<float>, ublas::row_major, ublas::map_array<std::size_t, std::complex<float> > >, 3 > () ();
  84. #endif
  85. #ifdef USE_DOUBLE
  86. std::cout << "std::complex<double>, map_array" << std::endl;
  87. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
  88. ublas::mapped_matrix<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, std::complex<double> > >, 3 > () ();
  89. #endif
  90. #endif
  91. #endif
  92. #ifdef USE_STD_MAP
  93. #ifdef USE_FLOAT
  94. std::cout << "float, std::map" << std::endl;
  95. test_my_matrix_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >,
  96. ublas::mapped_matrix<float, ublas::row_major, std::map<std::size_t, float> >, 3 > () ();
  97. #endif
  98. #ifdef USE_DOUBLE
  99. std::cout << "double, std::map" << std::endl;
  100. test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
  101. ublas::mapped_matrix<double, ublas::row_major, std::map<std::size_t, double> >, 3 > () ();
  102. #endif
  103. #ifdef USE_STD_COMPLEX
  104. #ifdef USE_FLOAT
  105. std::cout << "std::complex<float>, std::map" << std::endl;
  106. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >,
  107. ublas::mapped_matrix<std::complex<float>, ublas::row_major, std::map<std::size_t, std::complex<float> > >, 3 > () ();
  108. #endif
  109. #ifdef USE_DOUBLE
  110. std::cout << "std::complex<double>, std::map" << std::endl;
  111. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
  112. ublas::mapped_matrix<std::complex<double>, ublas::row_major, std::map<std::size_t, std::complex<double> > >, 3 > () ();
  113. #endif
  114. #endif
  115. #endif
  116. #endif
  117. #ifdef USE_SPARSE_VECTOR_OF_SPARSE_VECTOR
  118. #ifdef USE_MAP_ARRAY
  119. #ifdef USE_FLOAT
  120. std::cout << "float, mapped_vector map_array" << std::endl;
  121. test_my_matrix_vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> >,
  122. ublas::mapped_vector<float, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, float> > >, 3 > () ();
  123. #endif
  124. #ifdef USE_DOUBLE
  125. std::cout << "double, mapped_vector map_array" << std::endl;
  126. test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
  127. ublas::mapped_vector<double, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, double> > >, 3 > () ();
  128. #endif
  129. #ifdef USE_STD_COMPLEX
  130. #ifdef USE_FLOAT
  131. std::cout << "std::complex<float>, mapped_vector map_array" << std::endl;
  132. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > >,
  133. ublas::mapped_vector<std::complex<float>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<float> > > >, 3 > () ();
  134. #endif
  135. #ifdef USE_DOUBLE
  136. std::cout << "std::complex<double>,mapped_vector map_array" << std::endl;
  137. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
  138. ublas::mapped_vector<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<double> > > >, 3 > () ();
  139. #endif
  140. #endif
  141. #endif
  142. #ifdef USE_STD_MAP
  143. #ifdef USE_FLOAT
  144. std::cout << "float, mapped_vector std::map" << std::endl;
  145. test_my_matrix_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >,
  146. ublas::mapped_vector<float, ublas::row_major, std::map<std::size_t, std::map<std::size_t, float> > >, 3 > () ();
  147. #endif
  148. #ifdef USE_DOUBLE
  149. std::cout << "double, mapped_vector std::map" << std::endl;
  150. test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
  151. ublas::mapped_vector<double, ublas::row_major, std::map<std::size_t, std::map<std::size_t, double> > >, 3 > () ();
  152. #endif
  153. #ifdef USE_STD_COMPLEX
  154. #ifdef USE_FLOAT
  155. std::cout << "std::complex<float>, mapped_vector std::map" << std::endl;
  156. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >,
  157. ublas::mapped_vector<std::complex<float>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<float> > > >, 3 > () ();
  158. #endif
  159. #ifdef USE_DOUBLE
  160. std::cout << "std::complex<double>, mapped_vector std::map" << std::endl;
  161. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
  162. ublas::mapped_vector<std::complex<double>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<double> > > >, 3 > () ();
  163. #endif
  164. #endif
  165. #endif
  166. #endif
  167. #ifdef USE_GENERALIZED_VECTOR_OF_VECTOR
  168. #ifdef USE_MAP_ARRAY
  169. #ifdef USE_FLOAT
  170. std::cout << "float, generalized_vector_of_vector map_array" << std::endl;
  171. test_my_matrix_vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> >,
  172. ublas::generalized_vector_of_vector<float, ublas::row_major, ublas::vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> > > >, 3 > () ();
  173. test_my_matrix_vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> >,
  174. ublas::generalized_vector_of_vector<float, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<float, ublas::map_array<std::size_t, float> >, ublas::map_array<std::size_t, ublas::mapped_vector<float, ublas::map_array<std::size_t, float> > > > >, 3 > () ();
  175. #endif
  176. #ifdef USE_DOUBLE
  177. std::cout << "double, generalized_vector_of_vector map_array" << std::endl;
  178. test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
  179. ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > >, 3 > () ();
  180. test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
  181. ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >, ublas::map_array<std::size_t, ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > > >, 3 > () ();
  182. #endif
  183. #ifdef USE_STD_COMPLEX
  184. #ifdef USE_FLOAT
  185. std::cout << "std::complex<float>, generalized_vector_of_vector map_array" << std::endl;
  186. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > >,
  187. ublas::generalized_vector_of_vector<std::complex<float>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > > > >, 3 > () ();
  188. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > >,
  189. ublas::generalized_vector_of_vector<std::complex<float>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<float>, ublas::map_array<std::size_t, std::complex<float> > > > > >, 3 > () ();
  190. #endif
  191. #ifdef USE_DOUBLE
  192. std::cout << "std::complex<double>, generalized_vector_of_vector map_array" << std::endl;
  193. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
  194. ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > >, 3 > () ();
  195. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
  196. ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > > >, 3 > () ();
  197. #endif
  198. #endif
  199. #endif
  200. #ifdef USE_STD_MAP
  201. #ifdef USE_FLOAT
  202. std::cout << "float, generalized_vector_of_vector std::map" << std::endl;
  203. test_my_matrix_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >,
  204. ublas::generalized_vector_of_vector<float, ublas::row_major, ublas::vector<ublas::mapped_vector<float, std::map<std::size_t, float> > > >, 3 > () ();
  205. test_my_matrix_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >,
  206. ublas::generalized_vector_of_vector<float, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >, std::map<std::size_t, ublas::mapped_vector<float, std::map<std::size_t, float> > > > >, 3 > () ();
  207. #endif
  208. #ifdef USE_DOUBLE
  209. std::cout << "double, generalized_vector_of_vector std::map" << std::endl;
  210. test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
  211. ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, std::map<std::size_t, double> > > >, 3 > () ();
  212. test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
  213. ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >, std::map<std::size_t, ublas::mapped_vector<double, std::map<std::size_t, double> > > > >, 3 > () ();
  214. #endif
  215. #ifdef USE_STD_COMPLEX
  216. #ifdef USE_FLOAT
  217. std::cout << "std::complex<float>, generalized_vector_of_vector std::map" << std::endl;
  218. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >,
  219. ublas::generalized_vector_of_vector<std::complex<float>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > > > >, 3 > () ();
  220. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >,
  221. ublas::generalized_vector_of_vector<std::complex<float>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > > > > >, 3 > () ();
  222. #endif
  223. #ifdef USE_DOUBLE
  224. std::cout << "std::complex<double>, generalized_vector_of_vector std::map" << std::endl;
  225. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
  226. ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > >, 3 > () ();
  227. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
  228. ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > > >, 3 > () ();
  229. #endif
  230. #endif
  231. #endif
  232. #endif
  233. #ifdef USE_COMPRESSED_MATRIX
  234. #ifdef USE_FLOAT
  235. std::cout << "float compressed" << std::endl;
  236. test_my_matrix_vector<ublas::compressed_vector<float>,
  237. ublas::compressed_matrix<float>, 3 > () ();
  238. #endif
  239. #ifdef USE_DOUBLE
  240. std::cout << "double compressed" << std::endl;
  241. test_my_matrix_vector<ublas::compressed_vector<double>,
  242. ublas::compressed_matrix<double>, 3 > () ();
  243. #endif
  244. #ifdef USE_STD_COMPLEX
  245. #ifdef USE_FLOAT
  246. std::cout << "std::complex<float> compressed" << std::endl;
  247. test_my_matrix_vector<ublas::compressed_vector<std::complex<float> >,
  248. ublas::compressed_matrix<std::complex<float> >, 3 > () ();
  249. #endif
  250. #ifdef USE_DOUBLE
  251. std::cout << "std::complex<double> compressed" << std::endl;
  252. test_my_matrix_vector<ublas::compressed_vector<std::complex<double> >,
  253. ublas::compressed_matrix<std::complex<double> >, 3 > () ();
  254. #endif
  255. #endif
  256. #endif
  257. #ifdef USE_COORDINATE_MATRIX
  258. #ifdef USE_FLOAT
  259. std::cout << "float coordinate" << std::endl;
  260. test_my_matrix_vector<ublas::coordinate_vector<float>,
  261. ublas::coordinate_matrix<float>, 3 > () ();
  262. #endif
  263. #ifdef USE_DOUBLE
  264. std::cout << "double coordinate" << std::endl;
  265. test_my_matrix_vector<ublas::coordinate_vector<double>,
  266. ublas::coordinate_matrix<double>, 3 > () ();
  267. #endif
  268. #ifdef USE_STD_COMPLEX
  269. #ifdef USE_FLOAT
  270. std::cout << "std::complex<float> coordinate" << std::endl;
  271. test_my_matrix_vector<ublas::coordinate_vector<std::complex<float> >,
  272. ublas::coordinate_matrix<std::complex<float> >, 3 > () ();
  273. #endif
  274. #ifdef USE_DOUBLE
  275. std::cout << "std::complex<double> coordinate" << std::endl;
  276. test_my_matrix_vector<ublas::coordinate_vector<std::complex<double> >,
  277. ublas::coordinate_matrix<std::complex<double> >, 3 > () ();
  278. #endif
  279. #endif
  280. #endif
  281. #ifdef USE_MAPPED_VECTOR_OF_MAPPED_VECTOR
  282. #ifdef USE_STD_MAP
  283. #ifdef USE_FLOAT
  284. std::cout << "float mapped_vector_of_mapped_vector" << std::endl;
  285. test_my_matrix_vector<ublas::mapped_vector<float, std::map<std::size_t, float> >,
  286. ublas::mapped_vector_of_mapped_vector<float>, 3 > () ();
  287. #endif
  288. #ifdef USE_DOUBLE
  289. std::cout << "double mapped_vector_of_mapped_vector" << std::endl;
  290. test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
  291. ublas::mapped_vector_of_mapped_vector<double>, 3 > () ();
  292. #endif
  293. #ifdef USE_STD_COMPLEX
  294. #ifdef USE_FLOAT
  295. std::cout << "std::complex<float> mapped_vector_of_mapped_vector" << std::endl;
  296. test_my_matrix_vector<ublas::mapped_vector<std::complex<float>, std::map<std::size_t, std::complex<float> > >,
  297. ublas::mapped_vector_of_mapped_vector<std::complex<float> >, 3 > () ();
  298. #endif
  299. #ifdef USE_DOUBLE
  300. std::cout << "std::complex<double> mapped_vector_of_mapped_vector" << std::endl;
  301. test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
  302. ublas::mapped_vector_of_mapped_vector<std::complex<double> >, 3 > () ();
  303. #endif
  304. #endif
  305. #endif
  306. #endif
  307. }