main
comparetests.py
1#!/usr/bin/env python
2from glob import glob
3import subprocess
4from sys import exit,argv
5
6prefixes = []
7skip = set()
8for i in range(1, len(argv)):
9 if '.' in argv[i]:
10 f = open(argv[i])
11 for line in f:
12 parts = line.split()
13 for part in parts:
14 if part.endswith('.bin'):
15 skip.add(part)
16 f.close()
17 print 'Skipping',len(skip),'entries from previous report.'
18 else:
19 prefixes.append(argv[i])
20
21def print_mismatch(path, b, m):
22 blines = b.split('\n')
23 mlines = m.split('\n')
24 if len(blines) != len(mlines):
25 print '-----------------------------'
26 print 'Unknown mismatch in', path
27 print 'blastem output:'
28 print b
29 print 'musashi output:'
30 print m
31 print '-----------------------------'
32 return
33 prevline = ''
34 differences = []
35 flagmismatch = False
36 regmismatch = False
37 for i in xrange(0, len(blines)):
38 if blines[i] != mlines[i]:
39 if prevline == 'XNZVC':
40 differences.append((prevline, prevline))
41 flagmismatch = True
42 else:
43 regmismatch = True
44 differences.append((blines[i], mlines[i]))
45 prevline = blines[i]
46 if flagmismatch and regmismatch:
47 mtype = 'General'
48 elif flagmismatch:
49 mtype = 'Flag'
50 elif regmismatch:
51 mtype = 'Register'
52 else:
53 mtype = 'Unknown'
54 print '-----------------------------'
55 print mtype, 'mismatch in', path
56 for i in xrange(0, 2):
57 print 'musashi' if i else 'blastem', 'output:'
58 for diff in differences:
59 print diff[i]
60 print '-----------------------------'
61
62
63
64for path in glob('generated_tests/*/*.bin'):
65 if path in skip:
66 continue
67 if prefixes:
68 good = False
69 fname = path.split('/')[-1]
70 for prefix in prefixes:
71 if fname.startswith(prefix):
72 good = True
73 break
74 if not good:
75 continue
76 try:
77 b = subprocess.check_output(['./trans', path])
78 try:
79 m = subprocess.check_output(['musashi/mustrans', path])
80 #_,_,b = b.partition('\n')
81 if b != m:
82 print_mismatch(path, b, m)
83
84 else:
85 print path, 'passed'
86 except subprocess.CalledProcessError as e:
87 print '-----------------------------'
88 print 'musashi exited with code', e.returncode, 'for test', path
89 print 'blastem output:'
90 print b
91 print '-----------------------------'
92 except subprocess.CalledProcessError as e:
93 print '-----------------------------'
94 print 'blastem exited with code', e.returncode, 'for test', path
95 print '-----------------------------'
96