Gistrec icon

Code coverage macro

Gistrec | PRO | 10/21/19 01:16:59 PM UTC | 0 ⭐ | 563 👁️ | Never ⏰ | []
C++ |

1.02 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
 
struct CoverageNode
{
    CoverageNode(const int in_line)
        : line(in_line)
    {
        if (first)
        {
            next = first;
        }
        first = this;
    }
 
    int line;
    bool covered;
    CoverageNode *next;
 
    static CoverageNode *first;
};
 
CoverageNode *CoverageNode::first;
 
template<class Function>
void for_each_coverage(const Function &function)
{
    for (const auto *node = CoverageNode::first; node; node = node->next)
    {
        function(*node);
    }
}
 
template<int line>
struct LineCoverage
{
    static CoverageNode node;
};
 
template<int line>
CoverageNode LineCoverage<line>::node = CoverageNode(line);
 
#define BRANCH() LineCoverage<__LINE__>::node.covered = true
 
void foo(const bool b)
{
    if (b)
        BRANCH();
    else
        BRANCH();
}
 
int main()
{
    foo(false);
 
    for_each_coverage([] (const CoverageNode &node) {
        std::cout << node.line << " " << node.covered << std::endl;
    });
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎