mirror of
https://github.com/littlefs-project/littlefs.git
synced 2025-12-05 15:15:30 +00:00
Renamed coverage.py -> cov.py
This commit is contained in:
36
Makefile
36
Makefile
@@ -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)
|
||||||
|
|||||||
@@ -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',
|
||||||
Reference in New Issue
Block a user