LCOV - code coverage report
Current view: top level - tests/io - io_base_suite.cpp (source / functions) Hit Total Coverage
Test: iow-coverage.info Lines: 79 79 100.0 %
Date: 2019-09-16 Functions: 34 35 97.1 %

          Line data    Source code
       1             : #include <iostream>
       2             : #include <iow/io/io_base.hpp>
       3             : #include <iow/io/basic/aspect.hpp>
       4             : 
       5             : #include <fas/testing.hpp>
       6             : 
       7             : 
       8             : struct _start_;
       9           3 : struct ad_start
      10             : {
      11             :   template<typename T>
      12           1 :   void operator() (T& t)  const
      13             :   {
      14           1 :     t.virt();
      15           1 :     t.started = true;
      16           1 :   }
      17             : };
      18             : 
      19             : struct _init_;
      20           3 : struct ad_init
      21             : {
      22             :   template<typename T>
      23           2 :   void operator() (T& t, int val) const
      24             :   {
      25           2 :     t.value = val;
      26           2 :     t.virt();
      27           2 :   }
      28             : };
      29             : 
      30             : struct _stop_;
      31           3 : struct ad_stop
      32             : {
      33             :   template<typename T>
      34           1 :   void operator() (T& t)  const
      35             :   {
      36           1 :     t.started = false;
      37           1 :     t.virt();
      38           1 :   }
      39             : };
      40             : 
      41             : struct _reset_;
      42           3 : struct ad_reset
      43             : {
      44             :   template<typename T>
      45           4 :   void operator() (T& t)  const
      46             :   {
      47           4 :     ++t.resetval;
      48           4 :     t.virt();
      49           4 :   }
      50             : };
      51             : 
      52           3 : class iobase
      53             :   : public ::iow::io::io_base< fas::aspect<
      54             :       ::iow::io::basic::aspect< std::recursive_mutex >::advice_list,
      55             :       fas::advice<_start_, ad_start>,
      56             :       fas::advice<_init_,  ad_init>,
      57             :       fas::advice<_stop_,  ad_stop>,
      58             :       fas::advice<_reset_, ad_reset>,
      59             :       fas::group< ::iow::io::_initialize_, _init_>,
      60             :       fas::group< ::iow::io::_after_stop_, _stop_>,
      61             :       fas::group< ::iow::io::_after_reset_, _reset_>,
      62             :       fas::group< ::iow::io::_after_start_, _start_>,
      63             :       fas::type< ::iow::io::_options_type_, fas::empty_type >
      64             :     > >
      65             : {
      66             : 
      67             : public:
      68           3 :   virtual ~iobase() {}
      69           1 :   void start(int val) { this->start_(*this, val ); }
      70           1 :   void stop() { this->stop_(*this); }
      71           3 :   void reset() { this->reset_(*this); }
      72           1 :   void reconfigure(int val) { this->reconfigure_(*this, val ); }
      73           8 :   virtual void virt() { ++virtval ;}
      74             :   int  value = -1;
      75             :   int  resetval = 0;
      76             :   int  virtval = 0;
      77             :   bool started = false;
      78             : 
      79             : };
      80             : 
      81           3 : UNIT(init, "")
      82             : {
      83             :   using namespace fas::testing;
      84           1 :   iobase io;
      85           1 :   io.reconfigure( 10 );
      86           1 :   t << is_true< assert >(io.virtval==1) << FAS_TESTING_FILE_LINE;
      87           1 :   t << is_true< assert >(io.resetval==0) << FAS_TESTING_FILE_LINE;
      88           1 :   t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
      89           1 :   t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
      90           1 :   t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
      91           1 :   t << is_true< assert >(io.get_id()==0) << FAS_TESTING_FILE_LINE;
      92           1 :   io.reset();
      93           1 :   t << is_true< assert >(io.virtval==2) << FAS_TESTING_FILE_LINE;
      94           1 :   t << is_true< assert >(io.resetval==1) << FAS_TESTING_FILE_LINE;
      95           1 :   t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
      96           1 :   t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
      97           1 :   t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
      98           1 :   t << is_true< assert >(io.get_id()==0) << FAS_TESTING_FILE_LINE;
      99           1 : }
     100             : 
     101             : 
     102           3 : UNIT(start, "")
     103             : {
     104             :   using namespace fas::testing;
     105             :   using namespace fas::testing;
     106           1 :   iobase io;
     107           1 :   io.start( 10 );
     108           1 :   t << is_true< assert >(io.virtval==2) << FAS_TESTING_FILE_LINE;
     109           1 :   t << is_true< assert >(io.resetval==0) << FAS_TESTING_FILE_LINE;
     110           1 :   t << is_true< assert >(io.started) << FAS_TESTING_FILE_LINE;
     111           1 :   t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
     112           1 :   t << is_true< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
     113           1 :   t << is_true< assert >(io.get_id()==1) << FAS_TESTING_FILE_LINE;
     114           1 :   io.stop();
     115           1 :   t << is_true< assert >(io.virtval==4) <<  FAS_TESTING_FILE_LINE;
     116           1 :   t << is_true< assert >(io.resetval==1) << FAS_TESTING_FILE_LINE;
     117           1 :   t << is_false< assert >(io.started) << FAS_TESTING_FILE_LINE;
     118           1 :   t << is_true< assert >(io.value==10) << FAS_TESTING_FILE_LINE;
     119           1 :   t << is_false< assert >( io.status() ) << FAS_TESTING_FILE_LINE;
     120           1 :   t << is_true< assert >(io.get_id()==1) << FAS_TESTING_FILE_LINE;
     121           1 : }
     122             : 
     123             : 
     124           3 : UNIT(owner, "")
     125             : {
     126             :   using namespace fas::testing;
     127             : 
     128           1 :   iobase io;
     129           1 :   int value = 0;
     130           3 :   auto test1= io.wrap([&value](int val) { value = val; }, nullptr);
     131             : 
     132           1 :   test1(10);
     133           1 :   t << is_true< assert >(value==10) << value << FAS_TESTING_FILE_LINE;
     134           1 :   io.reset();
     135           1 :   test1(20);
     136           1 :   t << is_true< assert >(value==10) << value << FAS_TESTING_FILE_LINE;
     137             : 
     138           4 :   auto test2= io.wrap([&value](int val) { value = val; }, [&value](int val) { value = val*-1; });
     139             : 
     140           1 :   test2(30);
     141           1 :   t << is_true< assert >(value==30) << value << FAS_TESTING_FILE_LINE;
     142           1 :   io.reset();
     143           1 :   test2(40);
     144           2 :   t << is_true< assert >(value==-40) << value << FAS_TESTING_FILE_LINE;
     145             : 
     146           1 : }
     147             : 
     148           1 : BEGIN_SUITE(io_base,"")
     149             :   ADD_UNIT(init)
     150             :   ADD_UNIT(start)
     151             :   ADD_UNIT(owner)
     152           7 : END_SUITE(io_base)
     153             : 

Generated by: LCOV version 1.10