]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add my script to dump per-file or per-function coverage
authorNick Mathewson <nickm@torproject.org>
Thu, 16 Jul 2015 15:55:44 +0000 (11:55 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 16 Jul 2015 15:55:44 +0000 (11:55 -0400)
scripts/test/cov-display [new file with mode: 0755]

diff --git a/scripts/test/cov-display b/scripts/test/cov-display
new file mode 100755 (executable)
index 0000000..6c3bbd5
--- /dev/null
@@ -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)