89 lines
2.6 KiB
Python
Executable File
89 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import fileinput
|
|
import re
|
|
import os.path
|
|
|
|
USAGE = "USAGE: rosgcov_summarize <package_dir> <rosgcov_file>"
|
|
|
|
if len(sys.argv) != 3:
|
|
print USAGE
|
|
sys.exit(-1)
|
|
|
|
pkg = sys.argv[1]
|
|
fname = sys.argv[2]
|
|
|
|
if not os.path.exists(fname):
|
|
print '[rosgcov] %s : %.2f%% (no coverage results)' % (os.path.split(pkg)[1],0.0)
|
|
sys.exit(0)
|
|
|
|
re_hit = re.compile('^ *[0-9]*:.*')
|
|
re_miss = re.compile('^ *#####:.*')
|
|
|
|
re_branch_hit = re.compile('^branch *[0-9] *taken [0-9]*.*')
|
|
re_branch_miss = re.compile('^branch *[0-9] *never executed.*')
|
|
|
|
|
|
files = []
|
|
finput = fileinput.input(fname)
|
|
for l in finput:
|
|
ls = l.strip().split(' ')
|
|
f = os.path.join(ls[0],os.path.split(ls[1])[1])
|
|
files.append(f.strip())
|
|
|
|
total = 0
|
|
hits = 0
|
|
misses = 0
|
|
branch_total = 0
|
|
branch_hits = 0
|
|
branch_misses = 0
|
|
print '-------------------------------------------------------'
|
|
print 'Coverage summary: '
|
|
print '-------------------------------------------------------'
|
|
for f in files:
|
|
prefix = os.path.commonprefix([pkg, f])
|
|
display_name = f[len(prefix):]
|
|
if display_name[0] == '/':
|
|
display_name = display_name[1:]
|
|
print ' ' + display_name + ': '
|
|
gcov_fname = f + '.gcov'
|
|
if not os.path.exists(gcov_fname):
|
|
print 'WARNING: no coverage results for %s' % (display_name)
|
|
continue
|
|
gcovf = fileinput.input(gcov_fname)
|
|
local_total = 0
|
|
local_hits = 0
|
|
local_misses = 0
|
|
local_branch_total = 0
|
|
local_branch_hits = 0
|
|
local_branch_misses = 0
|
|
for s in gcovf:
|
|
if re_hit.match(s):
|
|
local_hits += 1
|
|
local_total += 1
|
|
elif re_miss.match(s):
|
|
local_misses += 1
|
|
local_total += 1
|
|
if re_branch_hit.match(s):
|
|
local_branch_hits += 1
|
|
local_branch_total += 1
|
|
elif re_branch_miss.match(s):
|
|
local_branch_misses += 1
|
|
local_branch_total += 1
|
|
|
|
print ' line: %.2f%% (%d / %d)' % ((100.0 * local_hits / max(local_total,1)), local_hits, local_total)
|
|
hits += local_hits
|
|
misses += local_misses
|
|
total += local_total
|
|
|
|
print ' branch: %.2f%% (%d / %d)' % ((100.0 * local_branch_hits / max(local_branch_total,1)), local_branch_hits, local_branch_total)
|
|
branch_hits += local_branch_hits
|
|
branch_misses += local_branch_misses
|
|
branch_total += local_branch_total
|
|
|
|
print '-------------------------------------------------------'
|
|
print '[rosgcov] %s : %.2f%% (%d / %d)' % (os.path.split(pkg)[1],(100.0 * hits / max(total,1)), hits, total)
|
|
print '[rosgcov] %s : branch %.2f%% (%d / %d)' % (os.path.split(pkg)[1],(100.0 * branch_hits / max(branch_total,1)), branch_hits, branch_total)
|
|
print '-------------------------------------------------------'
|