LCOV - code coverage report
Current view: top level - tests/module - registry_test.cpp (source / functions) Hit Total Coverage
Test: wfc-coverage.info Lines: 28 30 93.3 %
Date: 2019-09-17 Functions: 8 9 88.9 %

          Line data    Source code
       1             : 
       2             : #define IOW_DISABLE_LOG
       3             : #include <iow/logger.hpp>
       4             : #include <wfc/core/object_registry.hpp>
       5             : #include <vector>
       6             : #include <algorithm>
       7             : 
       8             : using namespace ::wfc;
       9             : 
      10          25 : struct number: iinterface {
      11             :   int count = 0;
      12             :   number() = default;
      13           4 :   explicit number(int c) noexcept: count(c) {}
      14             : };
      15             : 
      16             : struct number_greater
      17             : {
      18           2 :   bool operator () (const number& left, const number& right) const
      19             :   {
      20           2 :     return left.count > right.count;
      21             :   }
      22             : };
      23             : 
      24           1 : int main()
      25             : {
      26           1 :   object_registry reg;
      27           2 :   std::shared_ptr<number> i0 = std::make_shared<number>(0);
      28           2 :   std::shared_ptr<number> i1 = std::make_shared<number>(1);
      29           2 :   std::shared_ptr<number> i2 = std::make_shared<number>(2);
      30           2 :   std::shared_ptr<number> i3 = std::make_shared<number>(3);
      31           1 :   reg.set_target("i0", i0);
      32           1 :   reg.set_target("i1", i1);
      33           1 :   reg.set_target("i2", i2);
      34           1 :   reg.set_target("i3", i3);
      35             : 
      36           1 :   reg.erase("i0");
      37           2 :   std::vector<number> v;
      38           3 :   reg.for_each<number>([&v](const std::string&, const std::string&, std::shared_ptr<number> p){
      39           3 :     if ( auto i = p )
      40           3 :       v.push_back(*i);
      41           4 :   });
      42             : 
      43           1 :   std::sort(v.begin(), v.end(), number_greater());
      44             : 
      45           1 :   if (v.size()!=3) return -1;
      46             : 
      47           1 :   if (v[0].count!=3) return -1;
      48           1 :   if (v[1].count!=2) return -1;
      49           1 :   if (v[2].count!=1) return -1;
      50             : 
      51           1 :   if ( reg.get_target<number>("i2")->count != 2 )
      52           0 :     return -1;
      53             : 
      54           1 :   if ( auto x = reg.get_target<number>("i4") )
      55           0 :     return -1;
      56             : 
      57           2 :   return 0;
      58             : }

Generated by: LCOV version 1.10