libostd/run_tests.py

75 lines
1.9 KiB
Python

from sys import stdout, exit
from os import listdir, remove, name as osname, getenv
from os.path import splitext, join as joinp
import subprocess as sp
# configuration - you can modify this
COMPILER = getenv("CXX", "c++")
CXXFLAGS = [
"-std=c++14",
"-Wall", "-Wextra", "-Wshadow",
"-Wno-missing-braces", # clang false positive
"-I."
] + getenv("CXXFLAGS", "").split()
COLORS = (osname != "nt")
TESTDIR = getenv("TESTDIR", "tests")
SRCEXT = ".cc"
# don't modify past these lines
nsuccess = 0
nfailed = 0
if COLORS:
colors = {
"red": "\033[91m",
"green": "\033[92m",
"blue": "\033[94m",
"bold": "\033[1m",
"end": "\033[0m"
}
else:
colors = { "red": "", "green": "", "blue": "", "bold": "", "end": "" }
def print_result(modname, fmsg = None):
global nsuccess, nfailed
if fmsg:
print modname + ("...\t%(red)s%(bold)s(" + fmsg + ")%(end)s") % colors
nfailed += 1
else:
print modname + "...\t%(green)s%(bold)s(success)%(end)s" % colors
nsuccess += 1
for fname in listdir(TESTDIR):
(modname, modext) = splitext(fname)
if modext != SRCEXT:
continue
srcpath = joinp(TESTDIR, fname)
exepath = joinp(TESTDIR, modname)
pc = sp.Popen([ COMPILER, srcpath, "-o", exepath ] + CXXFLAGS,
stdout = sp.PIPE, stderr = sp.STDOUT)
stdout.write(pc.communicate()[0])
if pc.returncode != 0:
print_result(modname, "compile error")
continue
pc = sp.Popen(exepath, stdout = sp.PIPE, stderr = sp.STDOUT)
stdout.write(pc.communicate()[0])
if pc.returncode != 0:
remove(exepath)
print_result(modname, "runtime error")
continue
remove(exepath)
print_result(modname)
print "\n%(blue)s%(bold)stesting done:%(end)s" % colors
print "%(green)sSUCCESS: " % colors + str(nsuccess) + colors["end"]
print "%(red)sFAILURE: " % colors + str(nfailed) + colors["end"]