|
@@ -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)
|