Alamo
Matrix4.H
Go to the documentation of this file.
1#ifndef _TEST_SET_MATRIX4_H
2#define _TEST_SET_MATRIX4_H
3
4#include "Util/String.H"
5#include "Util/Util.H"
6#include "Set/Set.H"
7#include "Set/Matrix4.H"
8
9namespace Test
10{
11namespace Set
12{
13template <int dim, ::Set::Sym sym>
15{
16public:
17 static int PODTest(int verbose = 1)
18 {
19 int ret = 0;
20 if (!std::is_trivially_copyable<::Set::Matrix4<dim,sym>>::value)
21 {
22 if (verbose) Util::Message(INFO,"Is not trivially copyable");
23 ret += 1;
24 }
25 if (std::has_virtual_destructor<::Set::Matrix4<dim,sym>>::value)
26 {
27 if (verbose) Util::Message(INFO,"Should not have virtual destructor");
28 ret += 1;
29 }
30 if (std::is_polymorphic<::Set::Matrix4<dim,sym>>::value)
31 {
32 if (verbose) Util::Message(INFO,"Should not be polymorphic");
33 ret += 1;
34 }
35 if (!std::is_standard_layout<::Set::Matrix4<dim,sym>>::value)
36 {
37 if (verbose) Util::Message(INFO,"Does not have standard layout.");
38 ret += 1;
39 }
40 Util::Test::SubMessage("POD", ret);
41 return ret;
42 }
43
44
45 static int SymmetryTest(int /*verbose*/ = 0)
46 {
47 int failed = 0;
49
50 //Util::Message(INFO,matrix);
51 //std::cout << matrix << std::endl;
52 if (sym == ::Set::Sym::MajorMinor)
53 {
54 for (int i = 0; i < dim; i++)
55 for (int j = 0; j < dim; j++)
56 for (int k = 0; k < dim; k++)
57 for (int l = 0; l < dim; l++)
58 {
59 if (matrix(i,j,k,l) != matrix(k,l,i,j)) failed += 1; // breaks major symmetry
60 if (matrix(i,j,k,l) != matrix(i,j,l,k)) failed += 1; // breaks minor symmetry
61 if (matrix(i,j,k,l) != matrix(j,i,k,l)) failed += 1; // breaks minor symmetry
62 }
63 }
64 else if (sym == ::Set::Sym::Full)
65 {
66 for (int i = 0; i < dim; i++)
67 for (int j = 0; j < dim; j++)
68 for (int k = 0; k < dim; k++)
69 for (int l = 0; l < dim; l++)
70 {
71 if (matrix(i,j,k,l) != matrix(i,j,l,k)) failed += 1;
72 if (matrix(i,j,k,l) != matrix(i,k,j,l)) failed += 1;
73 if (matrix(i,j,k,l) != matrix(i,k,l,j)) failed += 1;
74 if (matrix(i,j,k,l) != matrix(i,l,j,k)) failed += 1;
75 if (matrix(i,j,k,l) != matrix(i,l,k,j)) failed += 1;
76 if (matrix(i,j,k,l) != matrix(j,i,k,l)) failed += 1;
77 if (matrix(i,j,k,l) != matrix(j,i,l,k)) failed += 1;
78 if (matrix(i,j,k,l) != matrix(j,k,i,l)) failed += 1;
79 if (matrix(i,j,k,l) != matrix(j,k,l,i)) failed += 1;
80 if (matrix(i,j,k,l) != matrix(j,l,i,k)) failed += 1;
81 if (matrix(i,j,k,l) != matrix(j,l,k,i)) failed += 1;
82 if (matrix(i,j,k,l) != matrix(k,i,j,l)) failed += 1;
83 if (matrix(i,j,k,l) != matrix(k,i,l,j)) failed += 1;
84 if (matrix(i,j,k,l) != matrix(k,j,i,l)) failed += 1;
85 if (matrix(i,j,k,l) != matrix(k,j,l,i)) failed += 1;
86 if (matrix(i,j,k,l) != matrix(k,l,i,j)) failed += 1;
87 if (matrix(i,j,k,l) != matrix(k,l,j,i)) failed += 1;
88 if (matrix(i,j,k,l) != matrix(l,i,j,k)) failed += 1;
89 if (matrix(i,j,k,l) != matrix(l,i,k,j)) failed += 1;
90 if (matrix(i,j,k,l) != matrix(l,j,i,k)) failed += 1;
91 if (matrix(i,j,k,l) != matrix(l,j,k,i)) failed += 1;
92 if (matrix(i,j,k,l) != matrix(l,k,i,j)) failed += 1;
93 if (matrix(i,j,k,l) != matrix(l,k,j,i)) failed += 1;
94 }
95 }
96 else
97 {
98 return failed;
99 }
100
101
102 Util::Test::SubMessage("Symmetry", failed);
103 return failed;
104 }
105
106 static int Test(int verbose = 1)
107 {
108 std::string funcname = __PRETTY_FUNCTION__;
109 auto pos = funcname.find('[');
110 if (pos != std::string_view::npos) funcname = funcname.substr(0, pos);
111
112 Util::Test::Message(funcname);
113 int failed = 0;
114
115 failed += PODTest(verbose);
116 failed += SymmetryTest(verbose);
117 return failed;
118 }
119
120};
121}
122}
123
124#endif
#define INFO
Definition Util.H:23
static int SymmetryTest(int=0)
Definition Matrix4.H:45
static int PODTest(int verbose=1)
Definition Matrix4.H:17
static int Test(int verbose=1)
Definition Matrix4.H:106
A collection of data types and symmetry-reduced data structures.
Definition Base.H:17
@ MajorMinor
Definition Matrix4.H:12
@ Full
Definition Matrix4.H:12
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:19
Definition GB.H:8
int Message(std::string testname)
Definition Util.cpp:298
int SubMessage(std::string testname, int failed)
Definition Util.cpp:325
void Message(std::string file, std::string func, int line, Args const &... args)
Definition Util.H:128