centralized performance resources
This commit is contained in:
commit
50b15a1522
63 changed files with 328466 additions and 0 deletions
111
ocw/1/c-primer/verifier.py
Normal file
111
ocw/1/c-primer/verifier.py
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
#!/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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue