You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
4 months ago
|
#
|
||
|
# ----------------------------------------------
|
||
|
# WARNING, ALL LITERALS IN THIS FILE ARE UNICODE
|
||
|
# ----------------------------------------------
|
||
|
#
|
||
|
from __future__ import unicode_literals
|
||
|
#
|
||
|
#
|
||
|
#
|
||
|
import sys, math
|
||
|
from cffi import FFI
|
||
|
|
||
|
lib_m = "m"
|
||
|
if sys.platform == 'win32':
|
||
|
#there is a small chance this fails on Mingw via environ $CC
|
||
|
import distutils.ccompiler
|
||
|
if distutils.ccompiler.get_default_compiler() == 'msvc':
|
||
|
lib_m = 'msvcrt'
|
||
|
|
||
|
|
||
|
def test_cast():
|
||
|
ffi = FFI()
|
||
|
assert int(ffi.cast("int", 3.14)) == 3 # unicode literal
|
||
|
|
||
|
def test_new():
|
||
|
ffi = FFI()
|
||
|
assert ffi.new("int[]", [3, 4, 5])[2] == 5 # unicode literal
|
||
|
|
||
|
def test_typeof():
|
||
|
ffi = FFI()
|
||
|
tp = ffi.typeof("int[51]") # unicode literal
|
||
|
assert tp.length == 51
|
||
|
|
||
|
def test_sizeof():
|
||
|
ffi = FFI()
|
||
|
assert ffi.sizeof("int[51]") == 51 * 4 # unicode literal
|
||
|
|
||
|
def test_alignof():
|
||
|
ffi = FFI()
|
||
|
assert ffi.alignof("int[51]") == 4 # unicode literal
|
||
|
|
||
|
def test_getctype():
|
||
|
ffi = FFI()
|
||
|
assert ffi.getctype("int**") == "int * *" # unicode literal
|
||
|
assert type(ffi.getctype("int**")) is str
|
||
|
|
||
|
def test_cdef():
|
||
|
ffi = FFI()
|
||
|
ffi.cdef("typedef int foo_t[50];") # unicode literal
|
||
|
|
||
|
def test_offsetof():
|
||
|
ffi = FFI()
|
||
|
ffi.cdef("typedef struct { int x, y; } foo_t;")
|
||
|
assert ffi.offsetof("foo_t", "y") == 4 # unicode literal
|
||
|
|
||
|
def test_enum():
|
||
|
ffi = FFI()
|
||
|
ffi.cdef("enum foo_e { AA, BB, CC };") # unicode literal
|
||
|
x = ffi.cast("enum foo_e", 1)
|
||
|
assert int(ffi.cast("int", x)) == 1
|
||
|
|
||
|
def test_dlopen():
|
||
|
ffi = FFI()
|
||
|
ffi.cdef("double sin(double x);")
|
||
|
m = ffi.dlopen(lib_m) # unicode literal
|
||
|
x = m.sin(1.23)
|
||
|
assert x == math.sin(1.23)
|
||
|
|
||
|
def test_verify():
|
||
|
ffi = FFI()
|
||
|
ffi.cdef("double test_verify_1(double x);") # unicode literal
|
||
|
lib = ffi.verify("double test_verify_1(double x) { return x * 42.0; }")
|
||
|
assert lib.test_verify_1(-1.5) == -63.0
|
||
|
|
||
|
def test_callback():
|
||
|
ffi = FFI()
|
||
|
cb = ffi.callback("int(int)", # unicode literal
|
||
|
lambda x: x + 42)
|
||
|
assert cb(5) == 47
|