LCOV - code coverage report
Current view: top level - tests/xtime - test_xspan.cpp (source / functions) Hit Total Coverage
Test: faslib-coverage.info Lines: 73 76 96.1 %
Date: 2019-12-03 13:22:31 Functions: 7 7 100.0 %

          Line data    Source code
       1             : //
       2             : // Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011
       3             : //
       4             : // Copyright: See COPYING file that comes with this distribution
       5             : //
       6             : 
       7             : #include <iostream>
       8             : #include <cstdio>
       9             : #include <fas/xtime/nanospan.hpp>
      10             : #include <fas/xtime/microspan.hpp>
      11             : #include <fas/xtime/millispan.hpp>
      12             : #include <fas/xtime/xop.hpp>
      13             : #include <fas/xtime/xout.hpp>
      14             : 
      15             : using namespace fas;
      16             : 
      17           6 : inline bool _equal(fas::xsec_t f, fas::xsec_t s, fas::xsec_t c)
      18             : {
      19           6 :   return f >= (s - c) && f <= (s + c);
      20             : }
      21             : 
      22             : template<typename X>
      23           3 : bool test_xspan()
      24             : {
      25           3 :   X span;
      26             : 
      27           3 :   if ( span.sec!=0 || span.xsec!=0 )  return false;
      28             : 
      29           3 :   span = X(10, 1);
      30             : 
      31           3 :   if ( span.sec!=10 || span.xsec!=1 )  return false;
      32             : 
      33             :   /// ----------------
      34             : 
      35           3 :   span = span + X(1);
      36           3 :   span += -2;
      37           3 :   span += 2;
      38             : 
      39           3 :   if ( span.sec!=11 || span.xsec!=1 )  return false;
      40             : 
      41           3 :   span = span + X(10, X::xmax/2 - 1);
      42             : 
      43           3 :   if ( span.sec!=21 || span.xsec!=X::xmax/2)  return false;
      44             : 
      45           3 :   span = span + X(0, X::xmax/2 + 1);
      46             : 
      47           3 :   if ( span.sec!=22 || span.xsec!=1)  return false;
      48             : 
      49           3 :   span += X(0, X::xmax - 1);
      50             : 
      51           3 :   if ( span.sec!=23 || span.xsec!=0)  return false;
      52             : 
      53           3 :   span += nanospan(0, nanospan::xmax/2);
      54             : 
      55           3 :   if ( span.sec!=23 || span.xsec!=X::xmax/2)  return false;
      56             : 
      57           3 :   span += microspan(0, microspan::xmax/2);
      58             : 
      59           3 :   if ( span.sec!=24 || span.xsec!=0)  return false;
      60             : 
      61           3 :   span += millispan(0, millispan::xmax/2);
      62             : 
      63           3 :   if ( span.sec!=24 || span.xsec!=X::xmax/2)  return false;
      64             : 
      65             :   /// ----------------
      66             : 
      67           3 :   span = span - X(1);
      68             :   
      69           3 :   span -= X(-2, 0);
      70           3 :   span -= X(2, 0);
      71             :   
      72           3 :   if ( span.sec!=23 || span.xsec!=X::xmax/2)  return false;
      73             :   
      74           3 :   span = span - X(10, X::xmax/2 + 1);
      75             : 
      76           3 :   if ( span.sec!=12 || span.xsec!=X::xmax - 1)  return false;
      77             :   
      78           3 :   span -= X(0, X::xmax - 1);
      79             : 
      80           3 :   if ( span.sec!=12 || span.xsec!=0)  return false;
      81             :   
      82           3 :   span -= nanospan(0, nanospan::xmax/2);
      83             : 
      84           3 :   if ( span.sec!=11 || span.xsec!=X::xmax/2)  return false;
      85             : 
      86           3 :   span -= microspan(0, microspan::xmax/2);
      87             : 
      88           3 :   if ( span.sec!=11 || span.xsec!=0)  return false;
      89             : 
      90           3 :   span -= millispan(0, millispan::xmax/2);
      91             : 
      92           3 :   if ( span.sec!=10 || span.xsec!=X::xmax/2)  return false;
      93             : 
      94             :   /// ----------------
      95             :   
      96           3 :   span = span / X(2);
      97             : 
      98           3 :   if ( span.sec!=5 || span.xsec!=X::xmax/4)  return false;
      99             : 
     100           3 :   span /= 0.25;
     101             : 
     102           3 :   if ( span.sec!=21 || span.xsec!=0)  return false;
     103             : 
     104           3 :   span = ( span + X(4) ) / X(5);
     105             : 
     106           3 :   if ( span.sec!=5 || span.xsec!=0)  return false;
     107             : 
     108             :   /// ----------------
     109             :   
     110           3 :   span = span * X(5);
     111             : 
     112           3 :   if ( span.sec!=25 || span.xsec!=0)  return false;
     113             : 
     114           3 :   span *= 0.2;
     115             : 
     116           3 :   if ( span.sec!=5 || span.xsec!=0)  return false;
     117             : 
     118           3 :   span *= X(1, X::xmax/10);
     119           3 :   if ( span.sec!=5 || !_equal(span.xsec, X::xmax / 2, 1) )  return false;
     120             : 
     121           3 :   span *= 1.1;
     122             :   
     123           3 :   if ( span.sec!=6 || !_equal(span.xsec, X::xmax / 20, 1) )  return false;
     124             :     
     125           3 :   if ( span == X() ) return false;
     126           3 :   if ( span == X(0) ) return false;
     127           3 :   if ( span == X(0.0) ) return false;
     128             : 
     129           3 :   if ( X() != X(0, 0) ) return false;
     130           3 :   if ( X() != X(0) ) return false;
     131           3 :   if ( X() != X(0.0) ) return false;
     132             :   
     133           3 :   span = X(1.5);
     134             : 
     135           3 :   if ( span > X(1.5) ) return false;
     136           3 :   if ( span >= X(1.51) ) return false;
     137           3 :   if ( span < X(1.5) ) return false;
     138           3 :   if ( span != X(1.5) ) return false;
     139           3 :   if ( !(span == X(1.5))) return false;
     140           3 :   if ( !(span >= X(1.5) )) return false;
     141           3 :   if ( !(span <= X(1.5) )) return false;
     142             : 
     143           3 :   if ( span != X(1, X::xmax/2) ) return false;
     144             : 
     145           3 :   return true;
     146             : }
     147             : 
     148           1 : int main()
     149             : {
     150           1 :   if ( !test_xspan<nanospan>() )
     151           0 :     return -1;
     152           1 :   if ( !test_xspan<microspan>() )
     153           0 :     return -1;
     154           1 :   if ( !test_xspan<millispan>() )
     155           0 :     return -1;
     156           1 :   return 0;
     157           3 : }
     158             : 
     159             : 

Generated by: LCOV version 1.13