Author: Matti Picus <[email protected]>
Branch: precompiled-headers
Changeset: r69042:0b9dc910cbd5
Date: 2014-01-29 23:39 +0200
http://bitbucket.org/pypy/pypy/changeset/0b9dc910cbd5/
Log: move Makefile tests
diff --git a/rpython/translator/platform/test/test_makefile.py
b/rpython/translator/platform/test/test_makefile.py
--- a/rpython/translator/platform/test/test_makefile.py
+++ b/rpython/translator/platform/test/test_makefile.py
@@ -1,7 +1,10 @@
from rpython.translator.platform.posix import GnuMakefile as Makefile
+from rpython.translator.platform import host
+from rpython.tool.udir import udir
+from rpython.translator.tool.cbuild import ExternalCompilationInfo
from StringIO import StringIO
-import re
+import re, sys
def test_simple_makefile():
m = Makefile()
@@ -29,3 +32,106 @@
val = s.getvalue()
assert not re.search('CC += +xxx', val, re.M)
assert re.search('CC += +yyy', val, re.M)
+
+class TestMakefile(object):
+ platform = host
+ strict_on_stderr = True
+
+ def check_res(self, res, expected='42\n'):
+ assert res.out == expected
+ if self.strict_on_stderr:
+ assert res.err == ''
+ assert res.returncode == 0
+
+ def test_900_files(self):
+ txt = '#include <stdio.h>\n'
+ for i in range(900):
+ txt += 'int func%03d();\n' % i
+ txt += 'int main() {\n int j=0;'
+ for i in range(900):
+ txt += ' j += func%03d();\n' % i
+ txt += ' printf("%d\\n", j);\n'
+ txt += ' return 0;};\n'
+ cfile = udir.join('test_900_files.c')
+ cfile.write(txt)
+ cfiles = [cfile]
+ for i in range(900):
+ cfile2 = udir.join('implement%03d.c' %i)
+ cfile2.write('''
+ int func%03d()
+ {
+ return %d;
+ }
+ ''' % (i, i))
+ cfiles.append(cfile2)
+ mk = self.platform.gen_makefile(cfiles, ExternalCompilationInfo(),
path=udir)
+ mk.write()
+ self.platform.execute_makefile(mk)
+ res = self.platform.execute(udir.join('test_900_files'))
+ self.check_res(res, '%d\n' %sum(range(900)))
+
+ def test_precompiled_headers(self):
+ import time
+ tmpdir = udir.join('precompiled_headers').ensure(dir=1)
+ # Create an eci that should not use precompiled headers
+ eci = ExternalCompilationInfo(include_dirs=[tmpdir])
+ main_c = tmpdir.join('main_no_pch.c')
+ eci.separate_module_files = [main_c]
+ ncfiles = 10
+ nprecompiled_headers = 20
+ txt = ''
+ for i in range(ncfiles):
+ txt += "int func%03d();\n" % i
+ txt += "\nint main(int argc, char * argv[])\n"
+ txt += "{\n int i=0;\n"
+ for i in range(ncfiles):
+ txt += " i += func%03d();\n" % i
+ txt += ' printf("%d\\n", i);\n'
+ txt += " return 0;\n};\n"
+ main_c.write(txt)
+ # Create some large headers with dummy functions to be precompiled
+ cfiles_precompiled_headers = []
+ for i in range(nprecompiled_headers):
+ pch_name =tmpdir.join('pcheader%03d.h' % i)
+ txt = ''
+ for j in range(3000):
+ txt += "int pcfunc%03d_%03d();\n" %(i, j)
+ pch_name.write(txt)
+ cfiles_precompiled_headers.append(pch_name)
+ # Create some cfiles with headers we want precompiled
+ cfiles = []
+ for i in range(ncfiles):
+ c_name =tmpdir.join('implement%03d.c' % i)
+ txt = ''
+ for pch_name in cfiles_precompiled_headers:
+ txt += '#include "%s"\n' % pch_name
+ txt += "int func%03d(){ return %d;};\n" % (i, i)
+ c_name.write(txt)
+ cfiles.append(c_name)
+ mk = self.platform.gen_makefile(cfiles, eci, path=udir,
+ cfile_precompilation=cfiles_precompiled_headers)
+ if sys.platform == 'win32':
+ clean = ('clean', '', 'for %f in ( $(OBJECTS) $(TARGET) ) do @if
exist %f del /f %f')
+ else:
+ clean = ('clean', '', 'rm -f $(OBJECTS) $(TARGET) ')
+ mk.rule(*clean)
+ mk.write()
+ t0 = time.clock()
+ self.platform.execute_makefile(mk)
+ t1 = time.clock()
+ t_precompiled = t1 - t0
+ res = self.platform.execute(mk.exe_name)
+ self.check_res(res, '%d\n' %sum(range(ncfiles)))
+ self.platform.execute_makefile(mk, extra_opts=['clean'])
+ #Rewrite a non-precompiled header makefile
+ mk = self.platform.gen_makefile(cfiles, eci, path=udir)
+ mk.rule(*clean)
+ mk.write()
+ t0 = time.clock()
+ self.platform.execute_makefile(mk)
+ t1 = time.clock()
+ t_normal = t1 - t0
+ print "precompiled haeder 'make' time %.2f, non-precompiled header
time %.2f" %(t_precompiled, t_normal)
+ assert t_precompiled < t_normal * 0.5
+
+
diff --git a/rpython/translator/platform/test/test_platform.py
b/rpython/translator/platform/test/test_platform.py
--- a/rpython/translator/platform/test/test_platform.py
+++ b/rpython/translator/platform/test/test_platform.py
@@ -59,97 +59,6 @@
res = self.platform.execute(executable)
self.check_res(res)
- def test_900_files(self):
- txt = '#include <stdio.h>\n'
- for i in range(900):
- txt += 'int func%03d();\n' % i
- txt += 'int main() {\n int j=0;'
- for i in range(900):
- txt += ' j += func%03d();\n' % i
- txt += ' printf("%d\\n", j);\n'
- txt += ' return 0;};\n'
- cfile = udir.join('test_900_files.c')
- cfile.write(txt)
- cfiles = [cfile]
- for i in range(900):
- cfile2 = udir.join('implement%03d.c' %i)
- cfile2.write('''
- int func%03d()
- {
- return %d;
- }
- ''' % (i, i))
- cfiles.append(cfile2)
- mk = self.platform.gen_makefile(cfiles, ExternalCompilationInfo(),
path=udir)
- mk.write()
- self.platform.execute_makefile(mk)
- res = self.platform.execute(udir.join('test_900_files'))
- self.check_res(res, '%d\n' %sum(range(900)))
-
- def test_precompiled_headers(self):
- import time
- tmpdir = udir.join('precompiled_headers').ensure(dir=1)
- # Create an eci that should not use precompiled headers
- eci = ExternalCompilationInfo(include_dirs=[tmpdir])
- main_c = tmpdir.join('main_no_pch.c')
- eci.separate_module_files = [main_c]
- ncfiles = 10
- nprecompiled_headers = 20
- txt = ''
- for i in range(ncfiles):
- txt += "int func%03d();\n" % i
- txt += "\nint main(int argc, char * argv[])\n"
- txt += "{\n int i=0;\n"
- for i in range(ncfiles):
- txt += " i += func%03d();\n" % i
- txt += ' printf("%d\\n", i);\n'
- txt += " return 0;\n};\n"
- main_c.write(txt)
- # Create some large headers with dummy functions to be precompiled
- cfiles_precompiled_headers = []
- for i in range(nprecompiled_headers):
- pch_name =tmpdir.join('pcheader%03d.h' % i)
- txt = ''
- for j in range(3000):
- txt += "int pcfunc%03d_%03d();\n" %(i, j)
- pch_name.write(txt)
- cfiles_precompiled_headers.append(pch_name)
- # Create some cfiles with headers we want precompiled
- cfiles = []
- for i in range(ncfiles):
- c_name =tmpdir.join('implement%03d.c' % i)
- txt = ''
- for pch_name in cfiles_precompiled_headers:
- txt += '#include "%s"\n' % pch_name
- txt += "int func%03d(){ return %d;};\n" % (i, i)
- c_name.write(txt)
- cfiles.append(c_name)
- mk = self.platform.gen_makefile(cfiles, eci, path=udir,
- cfile_precompilation=cfiles_precompiled_headers)
- if sys.platform == 'win32':
- clean = ('clean', '', 'for %f in ( $(OBJECTS) $(TARGET) ) do @if
exist %f del /f %f')
- else:
- clean = ('clean', '', 'rm -f $(OBJECTS) $(TARGET) ')
- mk.rule(*clean)
- mk.write()
- t0 = time.clock()
- self.platform.execute_makefile(mk)
- t1 = time.clock()
- t_precompiled = t1 - t0
- res = self.platform.execute(mk.exe_name)
- self.check_res(res, '%d\n' %sum(range(ncfiles)))
- self.platform.execute_makefile(mk, extra_opts=['clean'])
- #Rewrite a non-precompiled header makefile
- mk = self.platform.gen_makefile(cfiles, eci, path=udir)
- mk.rule(*clean)
- mk.write()
- t0 = time.clock()
- self.platform.execute_makefile(mk)
- t1 = time.clock()
- t_normal = t1 - t0
- print "precompiled haeder 'make' time %.2f, non-precompiled header
time %.2f" %(t_precompiled, t_normal)
- assert t_precompiled < t_normal * 0.5
-
def test_nice_errors(self):
cfile = udir.join('test_nice_errors.c')
cfile.write('')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit