LCOV - code coverage report
Current view: top level - Mock - TriangleCheckerFilter.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 30 30 100.0 %
Date: 2021-02-18 20:07:22 Functions: 25 35 71.4 %

          Line data    Source code
       1             : /**
       2             :  * \file TriangleCheckerFilter.cpp
       3             :  */
       4             : 
       5             : #include "TriangleCheckerFilter.h"
       6             : #include <ATK/Core/TypeTraits.h>
       7             : 
       8             : #include <gtest/gtest.h>
       9             : 
      10             : #include <cmath>
      11             : #include <complex>
      12             : #include <cstdint>
      13             : #include <cstdlib>
      14             : #include <type_traits>
      15             : 
      16             : namespace
      17             : {
      18             :   template<class DataType>
      19    31641850 :   void compare(DataType v1, DataType v2)
      20             :   {
      21             :     if constexpr(std::is_integral<DataType>::value)
      22             :     {
      23    18874380 :       ASSERT_EQ(v1, v2);
      24             :     }
      25             :     else
      26             :     {
      27    12767470 :       if(std::abs(v1) < 1e-5 || std::abs(v2) < 1e-5)
      28             :       {
      29     6556912 :         auto absv1 = std::abs(v1);
      30     6556912 :         auto absv2 = std::abs(v2);
      31     6556912 :         ASSERT_NEAR(absv1, 0, typename ATK::TypeTraits<DataType>::Scalar(1e-5));
      32     6556912 :         ASSERT_NEAR(absv2, 0, typename ATK::TypeTraits<DataType>::Scalar(1e-5));
      33             :       }
      34             :       else
      35             :       {
      36     6210541 :         auto diff = std::abs((v1 - v2) / (v1 + v2));
      37     6210541 :         ASSERT_NEAR(diff, 0, typename ATK::TypeTraits<DataType>::Scalar(1e-5));
      38             :       }
      39             :     }
      40             :   }
      41             : }
      42             : 
      43             : namespace ATK
      44             : {
      45             :   template<class DataType_>
      46         145 :   TriangleCheckerFilter<DataType_>::TriangleCheckerFilter()
      47         145 :   :TypedBaseFilter<DataType_>(1, 0)
      48             :   {
      49         145 :   }
      50             :   
      51             :   template<class DataType_>
      52         132 :   void TriangleCheckerFilter<DataType_>::set_amplitude(DataType_ amplitude)
      53             :   {
      54         132 :     this->amplitude = amplitude;
      55         132 :   }
      56             :   
      57             :   template<class DataType_>
      58         124 :   void TriangleCheckerFilter<DataType_>::set_frequency(int frequency)
      59             :   {
      60         124 :     this->frequency = frequency;
      61         124 :   }
      62             : 
      63             :   template<class DataType_>
      64       10568 :   void TriangleCheckerFilter<DataType_>::process_impl(gsl::index size) const
      65             :   {
      66       10568 :     double real_increment = 2. / input_sampling_rate * frequency;
      67             :     
      68    31652390 :     for(gsl::index i = 0; i < size; ++i)
      69             :     {
      70    31641850 :       state += real_increment * (ascending ? 1 : -1);
      71    31641850 :       if(state >= 1)
      72             :       {
      73      287748 :         state -= 2 * real_increment;
      74      287748 :         ascending = !ascending;
      75             :       }
      76    31354080 :       else if(state <= -1)
      77             :       {
      78      287635 :         state += 2 * real_increment;
      79      287635 :         ascending = !ascending;
      80             :       }
      81    31641850 :       compare(converted_inputs[0][i], TypeTraits<DataType>::from_double(TypeTraits<DataType>::to_double(amplitude) * state));
      82             :     }
      83       10568 :   }
      84             : 
      85             :   template class TriangleCheckerFilter<std::int16_t>;
      86             :   template class TriangleCheckerFilter<std::int32_t>;
      87             :   template class TriangleCheckerFilter<std::int64_t>;
      88             :   template class TriangleCheckerFilter<float>;
      89             :   template class TriangleCheckerFilter<double>;
      90             :   template class TriangleCheckerFilter<std::complex<float>>;
      91             :   template class TriangleCheckerFilter<std::complex<double>>;
      92             : }

Generated by: LCOV version TK-3.3.0-4-gdba42eea