LCOV - code coverage report
Current view: top level - UTests - flops-test-all.hpp (source / functions) Hit Total Coverage
Test: Coverage inastemp Lines: 102 102 100.0 %
Date: 2022-03-17 09:48:28 Functions: 28 56 50.0 %

          Line data    Source code
       1             : ///////////////////////////////////////////////////////////////////////////
       2             : // Inastemp - Berenger Bramas MPCDF - 2016
       3             : // Under MIT Licence, please you must read the LICENCE file.
       4             : ///////////////////////////////////////////////////////////////////////////
       5             : #ifndef FLOPSTESTALL_HPP
       6             : #define FLOPSTESTALL_HPP
       7             : 
       8             : #include "InastempGlobal.h"
       9             : #include "UTester.hpp"
      10             : 
      11             : #include <cmath>
      12             : #include <cstring>
      13             : 
      14             : template < class VecType >
      15          49 : class FlopsTestAll : public UTester< FlopsTestAll< VecType > > {
      16             :     using Parent = UTester< FlopsTestAll< VecType > >;
      17             : 
      18             :     using RealType = typename VecType::RealType;
      19             :     using MaskType = typename VecType::MaskType;
      20             : 
      21          14 :     void TestBasic() {
      22          84 :         UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      23          84 :         UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      24          84 :         UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      25          84 :         UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      26          84 :         UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      27          98 :         UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      28             : 
      29             : 
      30          14 :         VecType a = 1;
      31             :         {
      32          14 :             VecType res = a + a;
      33          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      34          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      35          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(1));
      36          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      37          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      38          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      39             : 
      40          14 :             res += a;
      41          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      42          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      43          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(2));
      44          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      45          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      46          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      47             :         }
      48             : 
      49          14 :         VecType::ResetFlopsStats();
      50             :         {
      51          14 :             VecType res = a * a;
      52          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(1));
      53          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      54          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      55          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      56          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      57          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      58             : 
      59          14 :             res *= a;
      60          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(2));
      61          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      62          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      63          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      64          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      65          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      66             :         }
      67             : 
      68          14 :         VecType::ResetFlopsStats();
      69             :         {
      70          14 :             VecType res = a / a;
      71          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      72          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(1));
      73          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      74          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      75          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      76          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      77             : 
      78          14 :             res /= a;
      79          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      80          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(2));
      81          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      82          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(0));
      83          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      84          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      85             :         }
      86             : 
      87          14 :         VecType::ResetFlopsStats();
      88             :         {
      89          14 :             VecType res = a - a;
      90          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      91          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
      92          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
      93          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(1));
      94          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      95          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
      96             : 
      97          14 :             res -= a;
      98          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(0));
      99          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(0));
     100          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(0));
     101          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(2));
     102          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     103          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     104             :         }
     105             : 
     106             :         
     107          14 :         VecType::ResetFlopsStats();
     108             :         {
     109         112 :             VecType res = (a*a) + (a/a) - (a+a) * (a-a) / a;
     110             : 
     111          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(2));
     112          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(2));
     113          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(2));
     114          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(2));
     115          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     116          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     117             : 
     118          14 :             res = VecType(0.);      
     119             : 
     120          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()) * size_t(2));
     121          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(VecType::GetVecLength()) * size_t(2));
     122          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()) * size_t(2));
     123          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(VecType::GetVecLength()) * size_t(2));
     124          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     125          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(VecType::GetVecLength()) * size_t(0));
     126             :         }
     127             : 
     128          14 :         VecType::ResetFlopsStats();
     129             :         {
     130          70 :             VecType res = VecType::Fma(VecType(1),VecType(1),VecType(1));
     131             : 
     132          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(VecType::GetVecLength()));
     133          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(0));
     134          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(VecType::GetVecLength()));
     135          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(0));
     136          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(0));
     137          98 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(0));
     138             : 
     139          28 :             res = VecType::Fma(res, res, res);
     140             : 
     141          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getMulOp() , size_t(2 * VecType::GetVecLength()));
     142          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getDivOp() , size_t(0));
     143          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getAddOp() , size_t(2 * VecType::GetVecLength()));
     144          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSubOp() , size_t(0));
     145          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getRsqrt() , size_t(0));
     146          84 :             UASSERTEEQUAL(VecType::GetFlopsStats().getSqrt() , size_t(0));
     147             :         }
     148          14 :     }
     149             : 
     150          14 :     void SetTests() {
     151          42 :         Parent::AddTest(&FlopsTestAll::TestBasic, "Basic test for vec type");
     152          14 :     }
     153             : };
     154             : 
     155             : #endif

Generated by: LCOV version 1.13