Add my script to dump per-file or per-function coverage

This commit is contained in:
Nick Mathewson 2015-07-16 11:55:44 -04:00
parent edaf681735
commit 90701c1de4

72
scripts/test/cov-display Executable file
View File

@ -0,0 +1,72 @@
#!/usr/bin/python
import sys, re
none0, some0 = 0,0
branchTaken0, branchNot0 = 0,0
BRANCH = False
FUNC = False
if sys.argv[1] == '-b':
BRANCH = True
del sys.argv[1]
if sys.argv[1] == '-f':
FUNC = True
del sys.argv[1]
def show(name, none, some):
if some+none == 0:
none = 1
print name, none, some, "%.02f"%(100*(float(some)/(some+none)))
for fn in sys.argv[1:]:
none = some = branchTaken = branchNot = 0
inFunc = ""
for line in open(fn, 'r'):
m = re.match(r'^[^:]*:([^:]*):(.*)', line)
if m:
body = m.group(2).rstrip()
lineno = m.group(1).strip()
else:
body = ""
lineno = "?"
m = re.match(r'^([A-Za-z_][A-Za-z0-9_]*)(?:, *)?\(', body)
if m:
inFunc = "%s:%s %s" %(fn,lineno,m.group(1))
elif body == "}":
if FUNC and inFunc:
show(inFunc, none, some)
none = some = 0
inFunc = None
if re.match(r'^ *###', line):
none += 1
elif re.match(r'^ *\d', line):
some += 1
else:
m = re.match(r'^branch.*taken (\d+)%', line)
if m:
if int(m.group(1)) == 0:
branchNot += 1
else:
branchTaken += 1
none0 += none
some0 += some
branchTaken0 += branchTaken
branchNot0 += branchNot
if FUNC:
pass
elif BRANCH:
if branchTaken or branchNot:
show(fn, branchNot, branchTaken)
else:
if some or none:
show(fn, none, some)
if BRANCH:
if branchTaken0 or branchNot0:
show("TOTAL", branchNot0, branchTaken0)
else:
if some0 or none0:
show("TOTAL", none0, some0)