Author: Armin Rigo <[email protected]>
Branch: ffi-backend
Changeset: r56649:1788fc87dfd5
Date: 2012-08-08 09:40 +0200
http://bitbucket.org/pypy/pypy/changeset/1788fc87dfd5/
Log: Add a _cffi_backend test similar to the _ffi ones. It fails so far.
diff --git a/pypy/module/pypyjit/test_pypy_c/test__ffi.py
b/pypy/module/pypyjit/test_pypy_c/test__ffi.py
--- a/pypy/module/pypyjit/test_pypy_c/test__ffi.py
+++ b/pypy/module/pypyjit/test_pypy_c/test__ffi.py
@@ -170,3 +170,38 @@
setfield_raw(i44, i57, descr=<FieldS dynamic 0>)
""")
+
+ def test__cffi_call(self):
+ from pypy.rlib.test.test_clibffi import get_libm_name
+ def main(libm_name):
+ try:
+ import _cffi_backend
+ except ImportError:
+ sys.stderr.write('SKIP: cannot import _cffi_backend\n')
+ return 0
+
+ libm = _cffi_backend.load_library(libm_name)
+ BDouble = _cffi_backend.new_primitive_type("double")
+ BPow = _cffi_backend.new_function_type([BDouble, BDouble], BDouble)
+ pow = libm.load_function(BPow, 'pow')
+ i = 0
+ res = 0
+ while i < 300:
+ tmp = pow(2, 3) # ID: cfficall
+ res += tmp
+ i += 1
+ BLong = _cffi_backend.new_primitive_type("long")
+ pow_addr = int(_cffi_backend.cast(BLong, pow))
+ return pow_addr, res
+ #
+ libm_name = get_libm_name(sys.platform)
+ log = self.run(main, [libm_name])
+ pow_addr, res = log.result
+ assert res == 8.0 * 300
+ loop, = log.loops_by_filename(self.filepath)
+ if 'ConstClass(pow)' in repr(loop): # e.g. OS/X
+ pow_addr = 'ConstClass(pow)'
+ py.test.xfail() # XXX currently too much code, fixme
+ assert loop.match_by_id('cfficall', """
+ ...
+ """ % pow_addr)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit