LCOV - code coverage report
Current view: top level - src/Test/Set - Matrix4.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 100.0 % 54 54
Test Date: 2026-01-21 04:31:22 Functions: 100.0 % 30 30

            Line data    Source code
       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              : 
       9              : namespace Test
      10              : {
      11              : namespace Set
      12              : {
      13              : template <int dim, ::Set::Sym sym>
      14              : class Matrix4
      15              : {
      16              : public:
      17           10 :     static int PODTest(int verbose = 1)
      18              :     {
      19           10 :         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           10 :         Util::Test::SubMessage("POD", ret);
      41           10 :         return ret;
      42              :     }
      43              : 
      44              : 
      45           10 :     static int SymmetryTest(int /*verbose*/ = 0)
      46              :     {
      47           10 :         int failed = 0;
      48           10 :         ::Set::Matrix4<dim,sym> matrix = ::Set::Matrix4<dim,sym>::Random();
      49              : 
      50              :         //Util::Message(INFO,matrix);
      51              :         //std::cout << matrix << std::endl;
      52              :         if (sym == ::Set::Sym::MajorMinor)
      53              :         {
      54            7 :             for (int i = 0; i < dim; i++)
      55           18 :                 for (int j = 0; j < dim; j++)
      56           48 :                     for (int k = 0; k < dim; k++)
      57          132 :                         for (int l = 0; l < dim; l++)
      58              :                         {
      59          194 :                             if (matrix(i,j,k,l) != matrix(k,l,i,j)) failed += 1; // breaks major symmetry
      60          194 :                             if (matrix(i,j,k,l) != matrix(i,j,l,k)) failed += 1; // breaks minor symmetry
      61          194 :                             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            7 :             for (int i = 0; i < dim; i++)
      67           18 :                 for (int j = 0; j < dim; j++)
      68           48 :                     for (int k = 0; k < dim; k++)
      69          132 :                         for (int l = 0; l < dim; l++)
      70              :                         {
      71          194 :                             if (matrix(i,j,k,l) != matrix(i,j,l,k)) failed += 1;
      72          194 :                             if (matrix(i,j,k,l) != matrix(i,k,j,l)) failed += 1;
      73          194 :                             if (matrix(i,j,k,l) != matrix(i,k,l,j)) failed += 1;
      74          194 :                             if (matrix(i,j,k,l) != matrix(i,l,j,k)) failed += 1;
      75          194 :                             if (matrix(i,j,k,l) != matrix(i,l,k,j)) failed += 1;
      76          194 :                             if (matrix(i,j,k,l) != matrix(j,i,k,l)) failed += 1;
      77          194 :                             if (matrix(i,j,k,l) != matrix(j,i,l,k)) failed += 1;
      78          194 :                             if (matrix(i,j,k,l) != matrix(j,k,i,l)) failed += 1;
      79          194 :                             if (matrix(i,j,k,l) != matrix(j,k,l,i)) failed += 1;
      80          194 :                             if (matrix(i,j,k,l) != matrix(j,l,i,k)) failed += 1;
      81          194 :                             if (matrix(i,j,k,l) != matrix(j,l,k,i)) failed += 1;
      82          194 :                             if (matrix(i,j,k,l) != matrix(k,i,j,l)) failed += 1;
      83          194 :                             if (matrix(i,j,k,l) != matrix(k,i,l,j)) failed += 1;
      84          194 :                             if (matrix(i,j,k,l) != matrix(k,j,i,l)) failed += 1;
      85          194 :                             if (matrix(i,j,k,l) != matrix(k,j,l,i)) failed += 1;
      86          194 :                             if (matrix(i,j,k,l) != matrix(k,l,i,j)) failed += 1;
      87          194 :                             if (matrix(i,j,k,l) != matrix(k,l,j,i)) failed += 1;
      88          194 :                             if (matrix(i,j,k,l) != matrix(l,i,j,k)) failed += 1;
      89          194 :                             if (matrix(i,j,k,l) != matrix(l,i,k,j)) failed += 1;
      90          194 :                             if (matrix(i,j,k,l) != matrix(l,j,i,k)) failed += 1;
      91          194 :                             if (matrix(i,j,k,l) != matrix(l,j,k,i)) failed += 1;
      92          194 :                             if (matrix(i,j,k,l) != matrix(l,k,i,j)) failed += 1;
      93          194 :                             if (matrix(i,j,k,l) != matrix(l,k,j,i)) failed += 1;
      94              :                         }
      95              :         }
      96              :         else 
      97              :         {
      98            6 :             return failed;
      99              :         }
     100              : 
     101              : 
     102            4 :         Util::Test::SubMessage("Symmetry", failed);
     103            4 :         return failed;
     104              :     }
     105              : 
     106           10 :     static int Test(int verbose = 1)
     107              :     {
     108           10 :         std::string funcname = __PRETTY_FUNCTION__;
     109           10 :         auto pos = funcname.find('[');
     110           10 :         if (pos != std::string_view::npos) funcname = funcname.substr(0, pos); 
     111              : 
     112           10 :         Util::Test::Message(funcname);
     113           10 :         int failed = 0;
     114              : 
     115           10 :         failed += PODTest(verbose);
     116           10 :         failed += SymmetryTest(verbose);
     117           10 :         return failed;
     118           10 :     }
     119              : 
     120              : };
     121              : }
     122              : }
     123              : 
     124              : #endif
        

Generated by: LCOV version 2.0-1