Renamed coverage.py -> cov.py

This commit is contained in:
Christopher Haster
2022-10-08 21:54:10 -05:00
parent df283aeb48
commit 29cbafeb67
2 changed files with 49 additions and 49 deletions

View File

@@ -79,7 +79,7 @@ override CFLAGS += -I.
override CFLAGS += -std=c99 -Wall -pedantic override CFLAGS += -std=c99 -Wall -pedantic
override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef
override CFLAGS += -ftrack-macro-expansion=0 override CFLAGS += -ftrack-macro-expansion=0
ifdef YES_COVERAGE ifdef YES_COV
override CFLAGS += --coverage override CFLAGS += --coverage
endif endif
ifdef YES_PERF ifdef YES_PERF
@@ -87,12 +87,12 @@ override CFLAGS += -fno-omit-frame-pointer
endif endif
ifdef VERBOSE ifdef VERBOSE
override CODEFLAGS += -v override CODEFLAGS += -v
override DATAFLAGS += -v override DATAFLAGS += -v
override STACKFLAGS += -v override STACKFLAGS += -v
override STRUCTFLAGS += -v override STRUCTFLAGS += -v
override COVERAGEFLAGS += -v override COVFLAGS += -v
override PERFFLAGS += -v override PERFFLAGS += -v
endif endif
ifneq ($(NM),nm) ifneq ($(NM),nm)
override CODEFLAGS += --nm-tool="$(NM)" override CODEFLAGS += --nm-tool="$(NM)"
@@ -159,14 +159,14 @@ tags:
$(CTAGS) --totals --c-types=+p $(shell find -H -name '*.h') $(SRC) $(CTAGS) --totals --c-types=+p $(shell find -H -name '*.h') $(SRC)
.PHONY: test-runner build-test .PHONY: test-runner build-test
ifndef NO_COVERAGE ifndef NO_COV
test-runner build-test: override CFLAGS+=--coverage test-runner build-test: override CFLAGS+=--coverage
endif endif
ifdef YES_PERF ifdef YES_PERF
bench-runner build-bench: override CFLAGS+=-fno-omit-frame-pointer bench-runner build-bench: override CFLAGS+=-fno-omit-frame-pointer
endif endif
test-runner build-test: $(TEST_RUNNER) test-runner build-test: $(TEST_RUNNER)
ifndef NO_COVERAGE ifndef NO_COV
rm -f $(TEST_GCDA) rm -f $(TEST_GCDA)
endif endif
ifdef YES_PERF ifdef YES_PERF
@@ -182,14 +182,14 @@ test-list: test-runner
./scripts/test.py $(TEST_RUNNER) $(TESTFLAGS) -l ./scripts/test.py $(TEST_RUNNER) $(TESTFLAGS) -l
.PHONY: bench-runner build-bench .PHONY: bench-runner build-bench
ifdef YES_COVERAGE ifdef YES_COV
bench-runner build-bench: override CFLAGS+=--coverage bench-runner build-bench: override CFLAGS+=--coverage
endif endif
ifndef NO_PERF ifndef NO_PERF
bench-runner build-bench: override CFLAGS+=-fno-omit-frame-pointer bench-runner build-bench: override CFLAGS+=-fno-omit-frame-pointer
endif endif
bench-runner build-bench: $(BENCH_RUNNER) bench-runner build-bench: $(BENCH_RUNNER)
ifdef YES_COVERAGE ifdef YES_COV
rm -f $(BENCH_GCDA) rm -f $(BENCH_GCDA)
endif endif
ifndef NO_PERF ifndef NO_PERF
@@ -220,12 +220,12 @@ stack: $(CI)
struct: $(OBJ) struct: $(OBJ)
./scripts/struct_.py $^ -Ssize $(STRUCTFLAGS) ./scripts/struct_.py $^ -Ssize $(STRUCTFLAGS)
.PHONY: coverage .PHONY: cov
coverage: $(GCDA) cov: $(GCDA)
$(strip ./scripts/coverage.py \ $(strip ./scripts/cov.py \
$^ $(patsubst %,-F%,$(SRC)) \ $^ $(patsubst %,-F%,$(SRC)) \
-slines -sbranches \ -slines -sbranches \
$(COVERAGEFLAGS)) $(COVFLAGS))
.PHONY: perf .PHONY: perf
perf: $(BENCH_PERF) perf: $(BENCH_PERF)
@@ -269,8 +269,8 @@ $(BUILDDIR)lfs.stack.csv: $(CI)
$(BUILDDIR)lfs.struct.csv: $(OBJ) $(BUILDDIR)lfs.struct.csv: $(OBJ)
./scripts/struct_.py $^ -q $(CODEFLAGS) -o $@ ./scripts/struct_.py $^ -q $(CODEFLAGS) -o $@
$(BUILDDIR)lfs.coverage.csv: $(GCDA) $(BUILDDIR)lfs.cov.csv: $(GCDA)
./scripts/coverage.py $^ $(patsubst %,-F%,$(SRC)) -q $(COVERAGEFLAGS) -o $@ ./scripts/cov.py $^ $(patsubst %,-F%,$(SRC)) -q $(COVFLAGS) -o $@
$(BUILDDIR)lfs.perf.csv: $(BENCH_PERF) $(BUILDDIR)lfs.perf.csv: $(BENCH_PERF)
./scripts/perf.py $^ $(patsubst %,-F%,$(SRC)) -q $(PERFFLAGS) -o $@ ./scripts/perf.py $^ $(patsubst %,-F%,$(SRC)) -q $(PERFFLAGS) -o $@
@@ -325,7 +325,7 @@ clean:
$(BUILDDIR)lfs.data.csv \ $(BUILDDIR)lfs.data.csv \
$(BUILDDIR)lfs.stack.csv \ $(BUILDDIR)lfs.stack.csv \
$(BUILDDIR)lfs.struct.csv \ $(BUILDDIR)lfs.struct.csv \
$(BUILDDIR)lfs.coverage.csv \ $(BUILDDIR)lfs.cov.csv \
$(BUILDDIR)lfs.perf.csv) $(BUILDDIR)lfs.perf.csv)
rm -f $(OBJ) rm -f $(OBJ)
rm -f $(DEP) rm -f $(DEP)

View File

@@ -3,7 +3,7 @@
# Script to find coverage info after running tests. # Script to find coverage info after running tests.
# #
# Example: # Example:
# ./scripts/coverage.py \ # ./scripts/cov.py \
# lfs.t.a.gcda lfs_util.t.a.gcda \ # lfs.t.a.gcda lfs_util.t.a.gcda \
# -Flfs.c -Flfs_util.c -slines # -Flfs.c -Flfs_util.c -slines
# #
@@ -178,7 +178,7 @@ class Frac(co.namedtuple('Frac', 'a,b')):
return not self.__lt__(other) return not self.__lt__(other)
# coverage results # coverage results
class CoverageResult(co.namedtuple('CoverageResult', [ class CovResult(co.namedtuple('CovResult', [
'file', 'function', 'line', 'file', 'function', 'line',
'calls', 'hits', 'funcs', 'lines', 'branches'])): 'calls', 'hits', 'funcs', 'lines', 'branches'])):
_by = ['file', 'function', 'line'] _by = ['file', 'function', 'line']
@@ -194,7 +194,7 @@ class CoverageResult(co.namedtuple('CoverageResult', [
Int(calls), Int(hits), Frac(funcs), Frac(lines), Frac(branches)) Int(calls), Int(hits), Frac(funcs), Frac(lines), Frac(branches))
def __add__(self, other): def __add__(self, other):
return CoverageResult(self.file, self.function, self.line, return CovResult(self.file, self.function, self.line,
max(self.calls, other.calls), max(self.calls, other.calls),
max(self.hits, other.hits), max(self.hits, other.hits),
self.funcs + other.funcs, self.funcs + other.funcs,
@@ -269,7 +269,7 @@ def collect(gcda_paths, *,
# go ahead and add functions, later folding will merge this if # go ahead and add functions, later folding will merge this if
# there are other hits on this line # there are other hits on this line
results.append(CoverageResult( results.append(CovResult(
file_name, func_name, func['start_line'], file_name, func_name, func['start_line'],
func['execution_count'], 0, func['execution_count'], 0,
Frac(1 if func['execution_count'] > 0 else 0, 1), Frac(1 if func['execution_count'] > 0 else 0, 1),
@@ -285,7 +285,7 @@ def collect(gcda_paths, *,
# go ahead and add lines, later folding will merge this if # go ahead and add lines, later folding will merge this if
# there are other hits on this line # there are other hits on this line
results.append(CoverageResult( results.append(CovResult(
file_name, func_name, line['line_number'], file_name, func_name, line['line_number'],
0, line['count'], 0, line['count'],
0, 0,
@@ -612,18 +612,18 @@ def main(gcda_paths, *,
reader = csv.DictReader(f, restval='') reader = csv.DictReader(f, restval='')
for r in reader: for r in reader:
try: try:
results.append(CoverageResult( results.append(CovResult(
**{k: r[k] for k in CoverageResult._by **{k: r[k] for k in CovResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['coverage_'+k] **{k: r['cov_'+k]
for k in CoverageResult._fields for k in CovResult._fields
if 'coverage_'+k in r if 'cov_'+k in r
and r['coverage_'+k].strip()})) and r['cov_'+k].strip()}))
except TypeError: except TypeError:
pass pass
# fold # fold
results = fold(CoverageResult, results, by=by, defines=defines) results = fold(CovResult, results, by=by, defines=defines)
# sort, note that python's sort is stable # sort, note that python's sort is stable
results.sort() results.sort()
@@ -631,21 +631,21 @@ def main(gcda_paths, *,
for k, reverse in reversed(sort): for k, reverse in reversed(sort):
results.sort(key=lambda r: (getattr(r, k),) results.sort(key=lambda r: (getattr(r, k),)
if getattr(r, k) is not None else (), if getattr(r, k) is not None else (),
reverse=reverse ^ (not k or k in CoverageResult._fields)) reverse=reverse ^ (not k or k in CovResult._fields))
# write results to CSV # write results to CSV
if args.get('output'): if args.get('output'):
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else CoverageResult._by) (by if by is not None else CovResult._by)
+ ['coverage_'+k for k in CoverageResult._fields]) + ['cov_'+k for k in CovResult._fields])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) {k: getattr(r, k)
for k in (by if by is not None else CoverageResult._by)} for k in (by if by is not None else CovResult._by)}
| {'coverage_'+k: getattr(r, k) | {'cov_'+k: getattr(r, k)
for k in CoverageResult._fields}) for k in CovResult._fields})
# find previous results? # find previous results?
if args.get('diff'): if args.get('diff'):
@@ -655,20 +655,20 @@ def main(gcda_paths, *,
reader = csv.DictReader(f, restval='') reader = csv.DictReader(f, restval='')
for r in reader: for r in reader:
try: try:
diff_results.append(CoverageResult( diff_results.append(CovResult(
**{k: r[k] for k in CoverageResult._by **{k: r[k] for k in CovResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['coverage_'+k] **{k: r['cov_'+k]
for k in CoverageResult._fields for k in CovResult._fields
if 'coverage_'+k in r if 'cov_'+k in r
and r['coverage_'+k].strip()})) and r['cov_'+k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
pass pass
# fold # fold
diff_results = fold(CoverageResult, diff_results, diff_results = fold(CovResult, diff_results,
by=by, defines=defines) by=by, defines=defines)
# print table # print table
@@ -677,10 +677,10 @@ def main(gcda_paths, *,
or args.get('lines') or args.get('lines')
or args.get('branches')): or args.get('branches')):
# annotate sources # annotate sources
annotate(CoverageResult, results, **args) annotate(CovResult, results, **args)
else: else:
# print table # print table
table(CoverageResult, results, table(CovResult, results,
diff_results if args.get('diff') else None, diff_results if args.get('diff') else None,
by=by if by is not None else ['function'], by=by if by is not None else ['function'],
fields=fields if fields is not None fields=fields if fields is not None
@@ -691,10 +691,10 @@ def main(gcda_paths, *,
# catch lack of coverage # catch lack of coverage
if args.get('error_on_lines') and any( if args.get('error_on_lines') and any(
r.coverage_lines.a < r.coverage_lines.b for r in results): r.lines.a < r.lines.b for r in results):
sys.exit(2) sys.exit(2)
elif args.get('error_on_branches') and any( elif args.get('error_on_branches') and any(
r.coverage_branches.a < r.coverage_branches.b for r in results): r.branches.a < r.branches.b for r in results):
sys.exit(3) sys.exit(3)
@@ -738,13 +738,13 @@ if __name__ == "__main__":
parser.add_argument( parser.add_argument(
'-b', '--by', '-b', '--by',
action='append', action='append',
choices=CoverageResult._by, choices=CovResult._by,
help="Group by this field.") help="Group by this field.")
parser.add_argument( parser.add_argument(
'-f', '--field', '-f', '--field',
dest='fields', dest='fields',
action='append', action='append',
choices=CoverageResult._fields, choices=CovResult._fields,
help="Show this field.") help="Show this field.")
parser.add_argument( parser.add_argument(
'-D', '--define', '-D', '--define',