pavone@214: #!/usr/bin/env python pavone@214: from glob import glob pavone@214: import subprocess pavone@220: from sys import exit,argv pavone@220: pavone@220: prefixes = [] pavone@224: skip = set() pavone@220: for i in range(1, len(argv)): pavone@224: if '.' in argv[i]: pavone@224: f = open(argv[i]) pavone@224: for line in f: pavone@224: parts = line.split() pavone@224: for part in parts: pavone@224: if part.endswith('.bin'): pavone@224: skip.add(part) pavone@224: f.close() pavone@224: print 'Skipping',len(skip),'entries from previous report.' pavone@224: else: pavone@224: prefixes.append(argv[i]) pavone@214: pavone@572: def print_mismatch(path, b, m): pavone@572: blines = b.split('\n') pavone@572: mlines = m.split('\n') pavone@572: if len(blines) != len(mlines): pavone@572: print '-----------------------------' pavone@572: print 'Unknown mismatch in', path pavone@572: print 'blastem output:' pavone@572: print b pavone@572: print 'musashi output:' pavone@572: print m pavone@572: print '-----------------------------' pavone@572: return pavone@572: prevline = '' pavone@572: differences = [] pavone@572: flagmismatch = False pavone@572: regmismatch = False pavone@572: for i in xrange(0, len(blines)): pavone@572: if blines[i] != mlines[i]: pavone@572: if prevline == 'XNZVC': pavone@572: differences.append((prevline, prevline)) pavone@572: flagmismatch = True pavone@572: else: pavone@572: regmismatch = True pavone@572: differences.append((blines[i], mlines[i])) pavone@572: prevline = blines[i] pavone@572: if flagmismatch and regmismatch: pavone@572: mtype = 'General' pavone@572: elif flagmismatch: pavone@572: mtype = 'Flag' pavone@572: elif regmismatch: pavone@572: mtype = 'Register' pavone@572: else: pavone@572: mtype = 'Unknown' pavone@572: print '-----------------------------' pavone@572: print mtype, 'mismatch in', path pavone@572: for i in xrange(0, 2): pavone@572: print 'musashi' if i else 'blastem', 'output:' pavone@572: for diff in differences: pavone@572: print diff[i] pavone@572: print '-----------------------------' pavone@572: pavone@572: pavone@572: pavone@224: for path in glob('generated_tests/*/*.bin'): pavone@224: if path in skip: pavone@224: continue pavone@220: if prefixes: pavone@220: good = False pavone@224: fname = path.split('/')[-1] pavone@220: for prefix in prefixes: pavone@224: if fname.startswith(prefix): pavone@220: good = True pavone@220: break pavone@220: if not good: pavone@220: continue pavone@214: try: pavone@440: b = subprocess.check_output(['./trans', path]) pavone@214: try: pavone@214: m = subprocess.check_output(['musashi/mustrans', path]) pavone@217: #_,_,b = b.partition('\n') pavone@214: if b != m: pavone@572: print_mismatch(path, b, m) pavone@572: pavone@214: else: pavone@214: print path, 'passed' pavone@214: except subprocess.CalledProcessError as e: pavone@214: print '-----------------------------' pavone@214: print 'musashi exited with code', e.returncode, 'for test', path pavone@214: print 'blastem output:' pavone@214: print b pavone@214: print '-----------------------------' pavone@214: except subprocess.CalledProcessError as e: pavone@214: print '-----------------------------' pavone@214: print 'blastem exited with code', e.returncode, 'for test', path pavone@214: print '-----------------------------' pavone@214: