P4C
The P4 Compiler
Loading...
Searching...
No Matches
coverage.h
1/*
2 * SPDX-FileCopyrightText: 2022 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef MIDEND_COVERAGE_H_
8#define MIDEND_COVERAGE_H_
9
10#include <set>
11#include <vector>
12
13#include "ir/ir.h"
14#include "ir/visitor.h"
15#include "lib/source_file.h"
16
22
23namespace P4::Coverage {
24
27 bool operator()(const IR::Node *s1, const IR::Node *s2) const;
28};
29
33 bool coverStatements = false;
35 bool coverTableEntries = false;
37 bool coverActions = false;
39 bool coverParserStates = false;
40
42 bool onlyCoveringTests = false;
43};
44
47using CoverageSet = std::set<const IR::Node *, SourceIdCmp>;
48
51class CollectNodes : public Inspector {
53 CoverageSet coverableNodes;
54
56 CoverageOptions coverageOptions;
57
59 bool preorder(const IR::BaseAssignmentStatement *stmt) override;
60 bool preorder(const IR::MethodCallStatement *stmt) override;
61 bool preorder(const IR::ExitStatement *stmt) override;
62
64 bool preorder(const IR::Entry *entry) override;
65
67 bool preorder(const IR::P4Action *act) override;
68
70 bool preorder(const IR::ParserState *state) override;
71
72 public:
73 explicit CollectNodes(CoverageOptions coverageOptions);
74
77};
78
80void printCoverageReport(const CoverageSet &all, const CoverageSet &visited);
81
83void logCoverage(const CoverageSet &all, const CoverageSet &visited, const CoverageSet &new_);
84
85} // namespace P4::Coverage
86
87#endif /* MIDEND_COVERAGE_H_ */
const CoverageSet & getCoverableNodes()
Definition coverage.cpp:102
Definition node.h:53
Definition coverage.cpp:11
bool coverParserStates
Cover IR::ParserState.
Definition coverage.h:39
bool coverStatements
Cover IR::Statement.
Definition coverage.h:33
bool onlyCoveringTests
Skip tests which do not increase coverage.
Definition coverage.h:42
void printCoverageReport(const CoverageSet &all, const CoverageSet &visited)
Produces detailed final coverage log.
Definition coverage.cpp:70
bool coverActions
Cover IR::P4Action.
Definition coverage.h:37
std::set< const IR::Node *, SourceIdCmp > CoverageSet
Definition coverage.h:47
void logCoverage(const CoverageSet &all, const CoverageSet &visited, const CoverageSet &new_)
Logs nodes from new_ which have not yet been visited (are not members of visited).
Definition coverage.cpp:91
bool coverTableEntries
Cover IR::Entry.
Definition coverage.h:35
Specifies general options and which IR nodes to track with this particular visitor.
Definition coverage.h:31
Utility function to compare IR nodes in a set. We use their source info.
Definition coverage.h:26