111 lines
3 KiB
Python
111 lines
3 KiB
Python
#!/usr/bin/python
|
|
import subprocess, os, sys, re
|
|
|
|
def exitWithError(error):
|
|
print error
|
|
sys.exit(1)
|
|
|
|
def runAndReadOutput(args):
|
|
if args is str:
|
|
args = [args]
|
|
try:
|
|
return subprocess.check_output(args)
|
|
except subprocess.CalledProcessError as e:
|
|
exitWithError("ERROR: runtime error with %s" % str(args))
|
|
|
|
def run(path): runAndReadOutput(path)
|
|
|
|
def runAndCheckSizes():
|
|
output = runAndReadOutput("./sizes")
|
|
expected_output_format = "size of %s : %d bytes"
|
|
|
|
lines = set([x.replace(" ", "") for x in output.strip().lower().split('\n')])
|
|
types = [
|
|
( "int", 4 ),
|
|
( "short", 2 ),
|
|
( "long", 8 ),
|
|
( "char", 1 ),
|
|
( "float", 4 ),
|
|
( "double", 8 ),
|
|
( "unsigned int", 4 ),
|
|
( "long long", 8 ),
|
|
( "uint8_t", 1 ),
|
|
( "uint16_t", 2 ),
|
|
( "uint32_t", 4 ),
|
|
( "uint64_t", 8 ),
|
|
( "uint_fast8_t", 1 ),
|
|
( "uint_fast16_t", 8 ),
|
|
( "uintmax_t", 8 ),
|
|
( "intmax_t", 8 ),
|
|
( "__int128", 16 ),
|
|
( "uint32_t", 4 ),
|
|
( "uint64_t", 8 ),
|
|
( "student", 8 ),
|
|
( "x", 20),
|
|
( "int*", 8 ),
|
|
( "short*", 8 ),
|
|
( "long*", 8 ),
|
|
( "char*", 8 ),
|
|
( "float*", 8 ),
|
|
( "double*", 8 ),
|
|
( "unsigned int*", 8 ),
|
|
( "long long*", 8 ),
|
|
( "uint8_t*", 8 ),
|
|
( "uint16_t*", 8 ),
|
|
( "uint32_t*", 8 ),
|
|
( "uint64_t*", 8 ),
|
|
( "uint_fast8_t*", 8 ),
|
|
( "uint_fast16_t*", 8 ),
|
|
( "uintmax_t*", 8 ),
|
|
( "intmax_t*", 8 ),
|
|
( "__int128*", 8 ),
|
|
( "uint32_t*", 8 ),
|
|
( "uint64_t*", 8 ),
|
|
( "student*", 8 ),
|
|
( "&x", 8)
|
|
]
|
|
|
|
for typ in types:
|
|
print (expected_output_format % typ)
|
|
if (expected_output_format % typ).replace(" ", "") not in lines:
|
|
exitWithError("ERROR: couldn't find type %s (or it has the incorrect value) in sizes output" % typ[0])
|
|
|
|
def runAndCheckSwap():
|
|
expected_output = "k = 2, m = 1\n"
|
|
output = runAndReadOutput("./swap")
|
|
|
|
if output != expected_output:
|
|
exitWithError('ERROR: actual output: "%s", expected "%s"' % (output, expected_output))
|
|
|
|
def build(make_arg, filename):
|
|
print "\nRunning make %s ... " % make_arg
|
|
run(["make", filename])
|
|
print "Ok!"
|
|
|
|
print "\nChecking that %s was built ... " % filename
|
|
if not os.path.isfile(filename):
|
|
exitWithError("ERROR: %s binary missing, did you rename it?" % filename)
|
|
print "Ok!"
|
|
|
|
|
|
print "Running verifying script ... "
|
|
|
|
print "\nChecking that the Makefile exists ... "
|
|
if not os.path.isfile('Makefile'):
|
|
exitWithError('ERROR: Makefile does not exist.')
|
|
print "Good!"
|
|
|
|
build("sizes", "sizes")
|
|
print "Checking output of sizes ... "
|
|
runAndCheckSizes()
|
|
print "Ok!"
|
|
|
|
build("pointer", "pointer")
|
|
run("./pointer") # Run pointer as a sanity check, but there's no output to check
|
|
|
|
build("swap", "swap")
|
|
print "Checking output of swap ... "
|
|
runAndCheckSwap()
|
|
print "Ok!"
|
|
|
|
print "LGTM"
|