42#include "Teuchos_UnitTestHarness.hpp"
43#include "Teuchos_TestingHelpers.hpp"
44#include "Teuchos_UnitTestRepository.hpp"
45#include "Teuchos_GlobalMPISession.hpp"
50#include "Kokkos_Core.hpp"
51#include "Kokkos_Complex.hpp"
61template <
typename VectorType>
86 for (
int i=0; i<
sz; i++) {
87 x.fastAccessCoeff(i) = 0.1*i;
88 y.fastAccessCoeff(i) = 0.25*i;
97#define UNARY_UNIT_TEST(VEC, SCALAR_T, OP, OPNAME, USING_OP) \
98 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME) { \
100 UTS::vec_type u = OP(setup.x); \
101 UTS::vec_type v(setup.sz, 0.0); \
102 for (int i=0; i<setup.sz; i++) \
105 v.fastAccessCoeff(i) = OP(setup.x.fastAccessCoeff(i)); \
107 success = compareVecs(u, "u",v, "v", \
108 setup.rtol, setup.atol, out); \
110 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_const) { \
112 UTS::vec_type u = OP(setup.cx); \
113 UTS::vec_type v(1, 0.0); \
114 for (int i=0; i<v.size(); i++) \
117 v.fastAccessCoeff(i) = OP(setup.cx.fastAccessCoeff(0)); \
119 success = compareVecs(u, "u",v, "v", \
120 setup.rtol, setup.atol, out); \
122 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_resize) { \
126 UTS::vec_type v(setup.sz, 0.0); \
127 for (int i=0; i<setup.sz; i++) \
130 v.fastAccessCoeff(i) = OP(setup.x.fastAccessCoeff(i)); \
132 success = compareVecs(u, "u",v, "v", \
133 setup.rtol, setup.atol, out); \
136#define BINARY_UNIT_TEST(VEC, SCALAR_T, OP, OPNAME) \
137 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME) { \
139 UTS::vec_type u = setup.x OP setup.y; \
140 UTS::vec_type v(setup.sz, 0.0); \
141 for (int i=0; i<setup.sz; i++) \
142 v.fastAccessCoeff(i) = setup.x.fastAccessCoeff(i) OP \
143 setup.y.fastAccessCoeff(i); \
144 success = compareVecs(u, "u",v, "v", \
145 setup.rtol, setup.atol, out); \
147 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const) { \
149 UTS::vec_type u = setup.a OP setup.y; \
150 UTS::vec_type v(setup.sz, 0.0); \
151 for (int i=0; i<setup.sz; i++) \
152 v.fastAccessCoeff(i) = setup.a OP setup.y.fastAccessCoeff(i); \
153 success = compareVecs(u, "u",v, "v", \
154 setup.rtol, setup.atol, out); \
156 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const) { \
158 UTS::vec_type u = setup.x OP setup.a ; \
159 UTS::vec_type v(setup.sz, 0.0); \
160 for (int i=0; i<setup.sz; i++) \
161 v.fastAccessCoeff(i) = setup.x.fastAccessCoeff(i) OP \
163 success = compareVecs(u, "u",v, "v", \
164 setup.rtol, setup.atol, out); \
166 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_both_const) { \
168 UTS::vec_type u = setup.cx OP setup.cx; \
169 UTS::vec_type v(1, 0.0); \
170 for (int i=0; i<v.size(); i++) \
171 v.fastAccessCoeff(i) = setup.cx.fastAccessCoeff(0) OP \
172 setup.cx.fastAccessCoeff(0); \
173 success = compareVecs(u, "u",v, "v", \
174 setup.rtol, setup.atol, out); \
176 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const2) { \
178 UTS::vec_type u = setup.cx OP setup.x; \
179 UTS::vec_type v(setup.sz, 0.0); \
180 for (int i=0; i<setup.sz; i++) \
181 v.fastAccessCoeff(i) = setup.cx.fastAccessCoeff(0) OP \
182 setup.x.fastAccessCoeff(i); \
183 success = compareVecs(u, "u",v, "v", \
184 setup.rtol, setup.atol, out); \
186 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const2) { \
188 UTS::vec_type u = setup.x OP setup.cx; \
189 UTS::vec_type v(setup.sz, 0.0); \
190 for (int i=0; i<setup.sz; i++) \
191 v.fastAccessCoeff(i) = setup.x.fastAccessCoeff(i) OP \
192 setup.cx.fastAccessCoeff(0); \
193 success = compareVecs(u, "u",v, "v", \
194 setup.rtol, setup.atol, out); \
196 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_resize) { \
199 u = setup.x OP setup.y; \
200 UTS::vec_type v(setup.sz, 0.0); \
201 for (int i=0; i<setup.sz; i++) \
202 v.fastAccessCoeff(i) = setup.x.fastAccessCoeff(i) OP \
203 setup.y.fastAccessCoeff(i); \
204 success = compareVecs(u, "u",v, "v", \
205 setup.rtol, setup.atol, out); \
207 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const_resize) { \
210 u = setup.a OP setup.y; \
211 UTS::vec_type v(setup.sz, 0.0); \
212 for (int i=0; i<setup.sz; i++) \
213 v.fastAccessCoeff(i) = setup.a OP \
214 setup.y.fastAccessCoeff(i); \
215 success = compareVecs(u, "u",v, "v", \
216 setup.rtol, setup.atol, out); \
218 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const_resize) { \
221 u = setup.x OP setup.a; \
222 UTS::vec_type v(setup.sz, 0.0); \
223 for (int i=0; i<setup.sz; i++) \
224 v.fastAccessCoeff(i) = setup.x.fastAccessCoeff(i) OP \
226 success = compareVecs(u, "u",v, "v", \
227 setup.rtol, setup.atol, out); \
230#define BINARYFUNC_UNIT_TEST(VEC, SCALAR_T, OP, SOP, USING_SOP, OPNAME) \
231 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME) { \
233 UTS::vec_type u = OP(setup.x,setup.y); \
234 UTS::vec_type v(setup.sz, 0.0); \
235 for (int i=0; i<setup.sz; i++) \
238 v.fastAccessCoeff(i) = SOP(setup.x.fastAccessCoeff(i), \
239 setup.y.fastAccessCoeff(i)); \
241 success = compareVecs(u, "u",v, "v", \
242 setup.rtol, setup.atol, out); \
244 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const) { \
246 UTS::vec_type u = OP(setup.a,setup.y); \
247 UTS::vec_type v(setup.sz, 0.0); \
248 for (int i=0; i<setup.sz; i++) \
251 v.fastAccessCoeff(i) = SOP(setup.a, \
252 setup.y.fastAccessCoeff(i)); \
254 success = compareVecs(u, "u",v, "v", \
255 setup.rtol, setup.atol, out); \
257 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const) { \
259 UTS::vec_type u = OP(setup.x,setup.a); \
260 UTS::vec_type v(setup.sz, 0.0); \
261 for (int i=0; i<setup.sz; i++) \
264 v.fastAccessCoeff(i) = SOP(setup.x.fastAccessCoeff(i), \
267 success = compareVecs(u, "u",v, "v", \
268 setup.rtol, setup.atol, out); \
270 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_both_const) { \
272 UTS::vec_type u = OP(setup.cx,setup.cx); \
273 UTS::vec_type v(1, 0.0); \
274 for (int i=0; i<v.size(); i++) \
277 v.fastAccessCoeff(i) = SOP(setup.cx.fastAccessCoeff(0), \
278 setup.cx.fastAccessCoeff(0)); \
280 success = compareVecs(u, "u",v, "v", \
281 setup.rtol, setup.atol, out); \
283 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const2) { \
285 UTS::vec_type u = OP(setup.cx,setup.x); \
286 UTS::vec_type v(setup.sz, 0.0); \
287 for (int i=0; i<setup.sz; i++) \
290 v.fastAccessCoeff(i) = SOP(setup.cx.fastAccessCoeff(0), \
291 setup.x.fastAccessCoeff(i)); \
293 success = compareVecs(u, "u",v, "v", \
294 setup.rtol, setup.atol, out); \
296 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const2) { \
298 UTS::vec_type u = OP(setup.x,setup.cx); \
299 UTS::vec_type v(setup.sz, 0.0); \
300 for (int i=0; i<setup.sz; i++) \
303 v.fastAccessCoeff(i) = SOP(setup.x.fastAccessCoeff(i), \
304 setup.cx.fastAccessCoeff(0)); \
306 success = compareVecs(u, "u",v, "v", \
307 setup.rtol, setup.atol, out); \
309 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_resize) { \
312 u = OP(setup.x,setup.y); \
313 UTS::vec_type v(setup.sz, 0.0); \
314 for (int i=0; i<setup.sz; i++) \
317 v.fastAccessCoeff(i) = SOP(setup.x.fastAccessCoeff(i), \
318 setup.y.fastAccessCoeff(i)); \
320 success = compareVecs(u, "u",v, "v", \
321 setup.rtol, setup.atol, out); \
323 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_left_const_resize) { \
326 u = OP(setup.a,setup.y); \
327 UTS::vec_type v(setup.sz, 0.0); \
328 for (int i=0; i<setup.sz; i++) \
331 v.fastAccessCoeff(i) = SOP(setup.a, \
332 setup.y.fastAccessCoeff(i)); \
334 success = compareVecs(u, "u",v, "v", \
335 setup.rtol, setup.atol, out); \
337 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_right_const_resize) { \
340 u = OP(setup.x,setup.a); \
341 UTS::vec_type v(setup.sz, 0.0); \
342 for (int i=0; i<setup.sz; i++) \
345 v.fastAccessCoeff(i) = SOP(setup.x.fastAccessCoeff(i), \
348 success = compareVecs(u, "u",v, "v", \
349 setup.rtol, setup.atol, out); \
352#define OPASSIGN_UNIT_TEST(VEC, SCALAR_T, OP, OPNAME) \
353 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME) { \
355 UTS::vec_type u = std::sin(setup.x); \
356 UTS::vec_type v = std::sin(setup.x); \
358 for (int i=0; i<setup.sz; i++) \
359 v.fastAccessCoeff(i) OP setup.x.fastAccessCoeff(i); \
360 success = compareVecs(u, "u",v, "v", \
361 setup.rtol, setup.atol, out); \
363 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_const) { \
365 UTS::vec_type u = std::sin(setup.x); \
366 UTS::vec_type v = std::sin(setup.x); \
368 for (int i=0; i<setup.sz; i++) \
369 v.fastAccessCoeff(i) OP setup.a; \
370 success = compareVecs(u, "u",v, "v", \
371 setup.rtol, setup.atol, out); \
373 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_const2) { \
375 UTS::vec_type u = std::sin(setup.x); \
376 UTS::vec_type v = std::sin(setup.x); \
378 for (int i=0; i<setup.sz; i++) \
379 v.fastAccessCoeff(i) OP setup.cx.fastAccessCoeff(0); \
380 success = compareVecs(u, "u",v, "v", \
381 setup.rtol, setup.atol, out); \
383 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, OPNAME##_resize) { \
385 UTS::vec_type u = setup.a; \
386 UTS::vec_type v(setup.sz, 0.0); \
388 for (int i=0; i<setup.sz; i++) { \
389 v.fastAccessCoeff(i) = setup.a; \
390 v.fastAccessCoeff(i) OP setup.x.fastAccessCoeff(i); \
392 success = compareVecs(u, "u",v, "v", \
393 setup.rtol, setup.atol, out); \
396#define SAXPY_UNIT_TEST(VEC, SCALAR_T) \
397 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, saxpy) { \
399 UTS::vec_type u = std::sin(setup.x); \
400 UTS::vec_type v = std::sin(setup.x); \
401 u += setup.x*setup.y; \
402 for (int i=0; i<setup.sz; i++) \
403 v.fastAccessCoeff(i) += \
404 setup.x.fastAccessCoeff(i)*setup.y.fastAccessCoeff(i); \
405 success = compareVecs(u, "u",v, "v", \
406 setup.rtol, setup.atol, out); \
408 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, saxpy_resize) { \
410 UTS::vec_type u = setup.cx; \
411 UTS::vec_type v(setup.sz, 0.0); \
412 u += setup.x*setup.y; \
413 for (int i=0; i<setup.sz; i++) \
414 v.fastAccessCoeff(i) = setup.cx.fastAccessCoeff(0) + \
415 setup.x.fastAccessCoeff(i)*setup.y.fastAccessCoeff(i); \
416 success = compareVecs(u, "u",v, "v", \
417 setup.rtol, setup.atol, out); \
419 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, saxpy_const) { \
421 UTS::vec_type u = std::sin(setup.x); \
422 UTS::vec_type v = std::sin(setup.x); \
423 u += setup.a*setup.y; \
424 for (int i=0; i<setup.sz; i++) \
425 v.fastAccessCoeff(i) += \
426 setup.a*setup.y.fastAccessCoeff(i); \
427 success = compareVecs(u, "u",v, "v", \
428 setup.rtol, setup.atol, out); \
430 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, saxpy_const2) { \
432 UTS::vec_type u = std::sin(setup.x); \
433 UTS::vec_type v = std::sin(setup.x); \
434 u += setup.cx*setup.y; \
435 for (int i=0; i<setup.sz; i++) \
436 v.fastAccessCoeff(i) += \
437 setup.cx.fastAccessCoeff(0)*setup.y.fastAccessCoeff(i); \
438 success = compareVecs(u, "u",v, "v", \
439 setup.rtol, setup.atol, out); \
442#define TERNARY_UNIT_TEST(VEC, SCALAR_T) \
443 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, ternay) { \
445 UTS::vec_type u = std::sin(setup.x); \
446 UTS::vec_type v = -std::sin(setup.x); \
447 u = u >= 0 ? -u : u; \
448 success = compareVecs(u, "u", v, "v", \
449 setup.rtol, setup.atol, out); \
456#define VECTOR_UNIT_TESTS_ANY_TYPE(VEC,SCALAR_T) \
457 UNARY_UNIT_TEST(VEC, SCALAR_T, + , UnaryPlus ,) \
458 UNARY_UNIT_TEST(VEC, SCALAR_T, - , UnaryMinus,) \
459 UNARY_UNIT_TEST(VEC, SCALAR_T, exp , Exp , using std::exp; ) \
460 UNARY_UNIT_TEST(VEC, SCALAR_T, log , Log , using std::log; ) \
461 UNARY_UNIT_TEST(VEC, SCALAR_T, log10, Log10 , using std::log10;) \
462 UNARY_UNIT_TEST(VEC, SCALAR_T, sqrt , Sqrt , using std::sqrt; ) \
463 UNARY_UNIT_TEST(VEC, SCALAR_T, sin , Sin , using std::sin; ) \
464 UNARY_UNIT_TEST(VEC, SCALAR_T, cos , Cos , using std::cos; ) \
465 UNARY_UNIT_TEST(VEC, SCALAR_T, tan , Tan , using std::tan; ) \
466 UNARY_UNIT_TEST(VEC, SCALAR_T, sinh , Sinh , using std::sinh; ) \
467 UNARY_UNIT_TEST(VEC, SCALAR_T, cosh , Cosh , using std::cosh; ) \
468 UNARY_UNIT_TEST(VEC, SCALAR_T, tanh , Tanh , using std::tanh; ) \
469 UNARY_UNIT_TEST(VEC, SCALAR_T, asin , ASin , using std::asin; ) \
470 UNARY_UNIT_TEST(VEC, SCALAR_T, acos , ACos , using std::acos; ) \
471 UNARY_UNIT_TEST(VEC, SCALAR_T, atan , ATan , using std::atan; ) \
472 UNARY_UNIT_TEST(VEC, SCALAR_T, asinh, ASinh , using std::asinh;) \
473 UNARY_UNIT_TEST(VEC, SCALAR_T, acosh, ACosh , using std::acosh;) \
474 UNARY_UNIT_TEST(VEC, SCALAR_T, atanh, ATanh , using std::atanh;) \
476 BINARY_UNIT_TEST(VEC, SCALAR_T, +, Plus) \
477 BINARY_UNIT_TEST(VEC, SCALAR_T, -, Minus) \
478 BINARY_UNIT_TEST(VEC, SCALAR_T, *, Times) \
479 BINARY_UNIT_TEST(VEC, SCALAR_T, /, Divide) \
481 BINARYFUNC_UNIT_TEST(VEC, SCALAR_T, pow, pow, using std::pow;, Pow) \
483 OPASSIGN_UNIT_TEST(VEC, SCALAR_T, +=, PlusEqual) \
484 OPASSIGN_UNIT_TEST(VEC, SCALAR_T, -=, MinusEqual) \
485 OPASSIGN_UNIT_TEST(VEC, SCALAR_T, *=, TimesEqual) \
486 OPASSIGN_UNIT_TEST(VEC, SCALAR_T, /=, DivideEqual) \
488 SAXPY_UNIT_TEST(VEC, SCALAR_T) \
490 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, initializer_list_constructor ) { \
492 UTS::vec_type u{ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; \
493 UTS::vec_type v(setup.sz, 0.0); \
494 for (int i=0; i<setup.sz; i++) \
495 v.fastAccessCoeff(i) = i+1; \
496 success = compareVecs(u, "u", v, "v", \
497 setup.rtol, setup.atol, out); \
499 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, initializer_list_copy ) { \
501 UTS::vec_type u = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; \
502 UTS::vec_type v(setup.sz, 0.0); \
503 for (int i=0; i<setup.sz; i++) \
504 v.fastAccessCoeff(i) = i+1; \
505 success = compareVecs(u, "u", v, "v", \
506 setup.rtol, setup.atol, out); \
508 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, initializer_list_assign ) { \
511 u = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 }; \
512 UTS::vec_type v(setup.sz, 0.0); \
513 for (int i=0; i<setup.sz; i++) \
514 v.fastAccessCoeff(i) = i+1; \
515 success = compareVecs(u, "u", v, "v", \
516 setup.rtol, setup.atol, out); \
518 TEUCHOS_UNIT_TEST( VEC##_##SCALAR_T, range_based_for ) { \
520 UTS::vec_type u(setup.sz, 0.0); \
521 for (auto& z : u) { z = 3.0; } \
522 UTS::vec_type v(setup.sz, 3.0); \
523 success = compareVecs(u, "u", v, "v", \
524 setup.rtol, setup.atol, out); \
530 #define VECTOR_UNIT_TESTS_SFS_ANY_VALUE_TYPE(SCALAR_T) \
531 TEUCHOS_UNIT_TEST( StaticFixedVector##_##SCALAR_T, initializer_list_constructor_partial ) {\
533 UTS::vec_type u{ 1.0}; \
534 UTS::vec_type v(setup.sz, 1.0); \
535 success = compareVecs(u, "u", v, "v", \
536 setup.rtol, setup.atol, out); \
538 TEUCHOS_UNIT_TEST( StaticFixedVector##_##SCALAR_T, initializer_list_constructor_empty ) { \
540 UTS::vec_type u{ std::initializer_list<typename UTS::value_type>()}; \
541 UTS::vec_type v(setup.sz, 0.0); \
542 success = compareVecs(u, "u", v, "v", \
543 setup.rtol, setup.atol, out); \
549#define VECTOR_UNIT_TESTS_COMPLEX_TYPE(VEC,SCALAR_T) \
551 VECTOR_UNIT_TESTS_ANY_TYPE(VEC,SCALAR_T)
558#define VECTOR_UNIT_TESTS_REAL_TYPE(VEC,SCALAR_T) \
560 VECTOR_UNIT_TESTS_ANY_TYPE(VEC,SCALAR_T) \
562 UNARY_UNIT_TEST(VEC, SCALAR_T, cbrt , Cbrt, using std::cbrt;) \
564 BINARYFUNC_UNIT_TEST(VEC, SCALAR_T, atan2, atan2, using std::atan2;, ATan2) \
566 BINARYFUNC_UNIT_TEST(VEC, SCALAR_T, max , max , using std::max ;, Max) \
567 BINARYFUNC_UNIT_TEST(VEC, SCALAR_T, min , min , using std::min ;, Min) \
569 TERNARY_UNIT_TEST(VEC, SCALAR_T)
574#define TEST_DYNAMIC_STORAGE(__storage_type__,__vec_type__,__scalar_type__,__macro_for_tests__)\
575 typedef Kokkos::DefaultExecutionSpace execution_space; \
576 typedef Stokhos::__storage_type__<int,__scalar_type__,execution_space> storage_type; \
577 typedef Sacado::MP::Vector<storage_type> vec_type; \
578 typedef UnitTestSetup<vec_type> UTS; \
579 __macro_for_tests__(__vec_type__,__scalar_type__)
594#define TEST_STATIC_STORAGE(__storage_type__,__vec_type__,__scalar_type__,__scalar_type_name__,__storage_size__,__macro_for_tests__) \
595 typedef ::Kokkos::DefaultExecutionSpace execution_space; \
596 typedef ::Stokhos::__storage_type__<int,__scalar_type__,__storage_size__,execution_space> storage_type; \
597 typedef ::Sacado::MP::Vector<storage_type> vec_type; \
598 typedef UnitTestSetup<vec_type> UTS; \
599 __macro_for_tests__(__vec_type__,__scalar_type_name__)
609#define TEST_STATIC_FIXED_STORAGE(__storage_type__,__vec_type__,__scalar_type__,__scalar_type_name__,__storage_size__,__macro_for_tests__) \
610 TEST_STATIC_STORAGE(__storage_type__,__vec_type__,__scalar_type__,__scalar_type_name__,__storage_size__,__macro_for_tests__) \
611 VECTOR_UNIT_TESTS_SFS_ANY_VALUE_TYPE(__scalar_type_name__)
621#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP)
#define TEST_DYNAMIC_STORAGE(__storage_type__, __vec_type__, __scalar_type__, __macro_for_tests__)
#define VECTOR_UNIT_TESTS_REAL_TYPE(VEC, SCALAR_T)
#define TEST_STATIC_STORAGE(__storage_type__, __vec_type__, __scalar_type__, __scalar_type_name__, __storage_size__, __macro_for_tests__)
#define TEST_STATIC_FIXED_STORAGE(__storage_type__, __vec_type__, __scalar_type__, __scalar_type_name__, __storage_size__, __macro_for_tests__)
#define VECTOR_UNIT_TESTS_COMPLEX_TYPE(VEC, SCALAR_T)
vec_type::value_type value_type