Xyst test code coverage report
Current view: top level - Inciter/AMR - edge.hpp (source / functions) Hit Total Coverage
Commit: 5689ba12dc66a776d3d75f1ee48cc7d78eaa18dc Lines: 25 34 73.5 %
Date: 2024-11-22 19:17:03 Functions: 8 9 88.9 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 8 14 57.1 %

           Branch data     Line data    Source code
       1                 :            : #ifndef AMR_edge_t_h
       2                 :            : #define AMR_edge_t_h
       3                 :            : 
       4                 :            : #include <iostream>
       5                 :            : #include <stddef.h>
       6                 :            : #include <array>
       7                 :            : #include <algorithm>
       8                 :            : 
       9                 :            : namespace AMR {
      10                 :            : 
      11                 :            : class edge_t {
      12                 :            :     using edge_ = std::array< std::size_t, 2 >;
      13                 :            :     private:
      14                 :            :         edge_ data;
      15                 :            :         friend std::ostream& operator<<(std::ostream&, const edge_t&);
      16                 :            : 
      17                 :            :     public:
      18                 :    6022952 :         edge_& get_data() {
      19                 :    6022952 :             return data;
      20                 :            :         }
      21                 :            : 
      22                 : 1785866452 :         const edge_& get_data() const {
      23                 : 1785866452 :             return data;
      24                 :            :         }
      25                 :            : 
      26                 :            :         // Constructors
      27                 :   15414452 :         edge_t()
      28                 :   15414452 :         {
      29                 :   15414452 :         }
      30                 :            : 
      31                 :   12618273 :         edge_t(size_t A, size_t B) : data( {{std::min(A,B), std::max(A,B)}} )
      32                 :            :         {
      33                 :   12618273 :         }
      34                 :            : 
      35                 :    1162278 :         explicit edge_t( edge_ e ) : data( std::move(e) ) {}
      36                 :            : 
      37                 :            :         // Operators
      38                 :            :             // Piggy back underlying edge_ type where possible
      39                 :          0 :         bool operator==(const edge_t& rhs) const
      40                 :            :         {
      41                 :            :           // ensure entries of rhs and this are in ascending order
      42                 :          0 :           auto this_copy = this->data;
      43                 :          0 :           this_copy[0] = std::min(this->data[0], this->data[1]);
      44                 :          0 :           this_copy[1] = std::max(this->data[0], this->data[1]);
      45                 :            :           std::array< std::size_t, 2 > rhs_copy;
      46                 :          0 :           rhs_copy[0] = std::min(rhs.get_data()[0], rhs.get_data()[1]);
      47                 :          0 :           rhs_copy[1] = std::max(rhs.get_data()[0], rhs.get_data()[1]);
      48                 :            : 
      49 [ -  - ][ -  - ]:          0 :           if (this_copy[0] == rhs_copy[0] && this_copy[1] == rhs_copy[1])
                 [ -  - ]
      50                 :          0 :             return true;
      51                 :            :           else
      52                 :          0 :             return false;
      53                 :            :         }
      54                 :            :         //bool operator>(const edge_t& rhs) const
      55                 :            :         //{
      56                 :            :         //  return (data > rhs.get_data());
      57                 :            :         //}
      58                 :  446465832 :         bool operator<(const edge_t& rhs) const
      59                 :            :         {
      60                 :            :           // ensure entries of rhs and this are in ascending order
      61                 :  446465832 :           auto this_copy = this->data;
      62                 :  446465832 :           this_copy[0] = std::min(this->data[0], this->data[1]);
      63                 :  446465832 :           this_copy[1] = std::max(this->data[0], this->data[1]);
      64                 :            :           std::array< std::size_t, 2 > rhs_copy;
      65                 :  446465832 :           rhs_copy[0] = std::min(rhs.get_data()[0], rhs.get_data()[1]);
      66                 :  446465832 :           rhs_copy[1] = std::max(rhs.get_data()[0], rhs.get_data()[1]);
      67                 :            : 
      68         [ +  + ]:  446465832 :           if (this_copy[0] < rhs_copy[0])
      69                 :  156632131 :             return true;
      70 [ +  + ][ +  + ]:  289833701 :           else if (this_copy[0] == rhs_copy[0] && this_copy[1] < rhs_copy[1])
                 [ +  + ]
      71                 :   60134743 :             return true;
      72                 :            :           else
      73                 :  229698958 :             return false;
      74                 :            :         }
      75                 :            : 
      76                 :    6698906 :         size_t first() const
      77                 :            :         {
      78                 :    6698906 :             return data[0];
      79                 :            :         }
      80                 :    6698906 :         size_t second() const
      81                 :            :         {
      82                 :    6698906 :             return data[1];
      83                 :            :         }
      84                 :            : 
      85                 :            :         void replace(size_t new_id, size_t old_id)
      86                 :            :         {
      87                 :            :             if (data[0] == old_id)
      88                 :            :             {
      89                 :            :                 data[0] = new_id;
      90                 :            :             }
      91                 :            : 
      92                 :            :             if (data[1] == old_id)
      93                 :            :             {
      94                 :            :                 data[1] = new_id;
      95                 :            :             }
      96                 :            :         }
      97                 :            : 
      98                 :            : };
      99                 :            : 
     100                 :            : }  // AMR::
     101                 :            : 
     102                 :            : #endif

Generated by: LCOV version 1.16