#! /usr/local/bin/python import sys import os import subprocess import difflib from os.path import splitext prog = sys.argv[1] tests = os.listdir(sys.argv[2]) tests = filter(lambda t: splitext(t)[1] == '.py', tests) tests = map(lambda t: sys.argv[2] + '/' + t, tests) success = 0 fail = 0 successes = [] failures = [] for t in tests: print 'testing ' + t base = splitext(t)[0] cfilename = base+'.c' cfile = open(cfilename, 'w') retcode = subprocess.call([prog,t], stdout=cfile) retcode = subprocess.call(["gcc", "-g", cfilename]) if retcode == 0: outfilename = base+'.out' outfile = open(outfilename, 'w') retcode = subprocess.call(["./a.out"], stdout=outfile) expfilename = base+'.expected' expected = open(expfilename, 'w') retcode = subprocess.call(["/usr/local/bin/python",t], stdout=expected) retcode = subprocess.call(["diff","-w",expfilename, outfilename],stdout=subprocess.PIPE) else: print 'compile failed' if retcode == 0: success = success + 1 successes.append(base) else: fail = fail + 1 failures.append(base) print '==================' print 'tests passed: %d' % success print 'tests failed: %d' % fail print '==================' print 'successes:' if 0 < success: for f in successes: print '\t' + f print '==================' print 'failures:' if 0 < fail: for f in failures: print '\t' + f print '\t\ttest: ' + open(f + '.py', 'r').read() print '\t\toutput: ' + open(f + '.out','r').read() print '\t\texpected: ' + open(f + '.expected','r').read() print '=================='