[pypy-commit] pypy default: Add a test file for this module.
arigo
noreply at buildbot.pypy.org
Sat Jan 5 17:08:40 CET 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r59730:bccfcc04e275
Date: 2013-01-05 17:08 +0100
http://bitbucket.org/pypy/pypy/changeset/bccfcc04e275/
Log: Add a test file for this module.
diff --git a/pypy/rlib/test/test_jit_libffi.py b/pypy/rlib/test/test_jit_libffi.py
new file mode 100644
--- /dev/null
+++ b/pypy/rlib/test/test_jit_libffi.py
@@ -0,0 +1,39 @@
+import math
+import ctypes
+from pypy.rpython.lltypesystem import lltype, rffi
+from pypy.rlib import clibffi
+from pypy.rlib.rarithmetic import intmask
+from pypy.rlib.jit_libffi import CIF_DESCRIPTION
+from pypy.rlib.jit_libffi import jit_ffi_prep_cif, jit_ffi_call
+
+
+math_sin = intmask(ctypes.cast(ctypes.CDLL(None).sin, ctypes.c_void_p).value)
+math_sin = rffi.cast(rffi.VOIDP, math_sin)
+
+
+def test_jit_ffi_call():
+ cd = lltype.malloc(CIF_DESCRIPTION, 1, flavor='raw')
+ cd.abi = clibffi.FFI_DEFAULT_ABI
+ cd.nargs = 1
+ cd.rtype = clibffi.cast_type_to_ffitype(rffi.DOUBLE)
+ atypes = lltype.malloc(clibffi.FFI_TYPE_PP.TO, 1, flavor='raw')
+ atypes[0] = clibffi.cast_type_to_ffitype(rffi.DOUBLE)
+ cd.atypes = atypes
+ cd.exchange_size = 64 # 64 bytes of exchange data
+ cd.exchange_result = 24
+ cd.exchange_result_libffi = 24
+ cd.exchange_args[0] = 16
+ #
+ jit_ffi_prep_cif(cd)
+ #
+ assert rffi.sizeof(rffi.DOUBLE) == 8
+ exb = lltype.malloc(rffi.DOUBLEP.TO, 8, flavor='raw')
+ exb[2] = 1.23
+ jit_ffi_call(cd, math_sin, rffi.cast(rffi.CCHARP, exb))
+ res = exb[3]
+ lltype.free(exb, flavor='raw')
+ #
+ lltype.free(atypes, flavor='raw')
+ lltype.free(cd, flavor='raw')
+ #
+ assert res == math.sin(1.23)
More information about the pypy-commit
mailing list