1//===- CoverageFilters.cpp - Function coverage mapping filters ------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// These classes provide filtering for function coverage mapping records.
11//
12//===----------------------------------------------------------------------===//
13
14#include "CoverageFilters.h"
15#include "CoverageSummaryInfo.h"
16#include "llvm/Support/Regex.h"
17
18using namespace llvm;
19
20bool NameCoverageFilter::matches(const coverage::FunctionRecord &Function) {
21  StringRef FuncName = Function.Name;
22  return FuncName.find(Name) != StringRef::npos;
23}
24
25bool
26NameRegexCoverageFilter::matches(const coverage::FunctionRecord &Function) {
27  return llvm::Regex(Regex).match(Function.Name);
28}
29
30bool RegionCoverageFilter::matches(const coverage::FunctionRecord &Function) {
31  return PassesThreshold(FunctionCoverageSummary::get(Function)
32                             .RegionCoverage.getPercentCovered());
33}
34
35bool LineCoverageFilter::matches(const coverage::FunctionRecord &Function) {
36  return PassesThreshold(
37      FunctionCoverageSummary::get(Function).LineCoverage.getPercentCovered());
38}
39
40void CoverageFilters::push_back(std::unique_ptr<CoverageFilter> Filter) {
41  Filters.push_back(std::move(Filter));
42}
43
44bool CoverageFilters::matches(const coverage::FunctionRecord &Function) {
45  for (const auto &Filter : Filters) {
46    if (Filter->matches(Function))
47      return true;
48  }
49  return false;
50}
51
52bool
53CoverageFiltersMatchAll::matches(const coverage::FunctionRecord &Function) {
54  for (const auto &Filter : Filters) {
55    if (!Filter->matches(Function))
56      return false;
57  }
58  return true;
59}
60