1#!/usr/bin/env python 2# 3# Merge mce serverity coverage file from several test cases. This can 4# be used to check the coverage of several test cases. 5# 6# Copyright (C) 2009, Intel Corp. 7# Author: Huang Ying <ying.huang@intel.com> 8# 9# This file is released under the GPLv2. 10 11import sys 12 13def die(str): 14 print str 15 sys.exit(-1) 16 17def die_on(cond, str): 18 if cond: 19 die(str) 20 21class SCovLine(object): 22 def __init__(self, l): 23 object.__init__(self) 24 self.parse(l) 25 def parse(self, l): 26 sep = l.find('\t') 27 die_on(sep <= 0, 'input error format error') 28 remain = l[sep:] 29 scnt = l[:sep] 30 count = int(scnt) 31 self.count = count 32 self.remain = remain 33 def merge(self, gcl): 34 self.count = self.count + gcl.count 35 def write(self, of): 36 if self.count == 0: 37 of.write("0") 38 else: 39 of.write("1") 40 of.write(self.remain) 41 42def parse(f): 43 return [SCovLine(l) for l in f] 44 45def merge(gcls1, gcls2): 46 for gcl1, gcl2 in zip(gcls1, gcls2): 47 gcl1.merge(gcl2) 48 49def scov_merge(fns, of): 50 f = file(fns[0]) 51 gcls_base = parse(f) 52 53 for fn in fns[1:]: 54 f = file(fn) 55 gcls = parse(f) 56 merge(gcls_base, gcls) 57 58 for gcl in gcls_base: 59 gcl.write(of) 60 61def usage(): 62 print 'Usage: %s <severities coverage files>' % (sys.argv[0]) 63 64if __name__ == '__main__': 65 if len(sys.argv) <= 1: 66 usage() 67 exit -1 68 scov_merge(sys.argv[1:], sys.stdout) 69