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