summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Tools/compiler/regrtest.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/Tools/compiler/regrtest.py b/Tools/compiler/regrtest.py
new file mode 100644
index 0000000..fd990a9
--- /dev/null
+++ b/Tools/compiler/regrtest.py
@@ -0,0 +1,55 @@
+"""Run the Python regression test using the compiler
+
+This test runs the standard Python test suite using bytecode generated
+by this compiler instead of by the builtin compiler.
+
+The regression test is run with the interpreter in verbose mode so
+that import problems can be observed easily.
+"""
+
+from compiler import compile
+
+import os
+import sys
+import test
+import tempfile
+
+def copy_test_suite():
+ dest = tempfile.mktemp()
+ os.mkdir(dest)
+ os.system("cp -r %s/* %s" % (test.__path__[0], dest))
+ print "Creating copy of test suite in", dest
+ return dest
+
+def compile_files(dir):
+ print "Compiling",
+ line_len = 10
+ for file in os.listdir(dir):
+ base, ext = os.path.splitext(file)
+ if ext == '.py' and base[:4] == 'test':
+ source = os.path.join(dir, file)
+ line_len = line_len + len(file) + 1
+ if line_len > 75:
+ print "\n\t",
+ line_len = len(source) + 9
+ print file,
+ compile(source)
+ # make sure the .pyc file is not over-written
+ os.chmod(source + "c", 444)
+ print
+
+def run_regrtest(test_dir):
+ os.chdir(test_dir)
+ os.system("%s -v regrtest.py" % sys.executable)
+
+def cleanup(dir):
+ os.system("rm -rf %s" % dir)
+
+def main():
+ test_dir = copy_test_suite()
+ compile_files(test_dir)
+ run_regrtest(test_dir)
+ cleanup(test_dir)
+
+if __name__ == "__main__":
+ main()