tor/scripts/test/cov-display

82 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python
import sys, re, os
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)))
file_args = sys.argv[1:]
files = []
for fn in file_args:
if os.path.isdir(fn):
files.extend(os.path.join(fn, f) for f in os.listdir(fn))
else:
files.append(fn)
for fn in files:
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)