# # ---------------------------------------------- # 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