123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/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)
|