52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
|
# test 8/16/32/64 bit signed/unsigned integer arguments and return types for ffi functions
|
||
|
# requires ffi_lib.c to be compiled as: $(CC) -shared -o ffi_lib.so ffi_lib.c
|
||
|
|
||
|
import uos, usys
|
||
|
|
||
|
try:
|
||
|
import ffi
|
||
|
except ImportError:
|
||
|
print("SKIP")
|
||
|
raise SystemExit
|
||
|
|
||
|
ffi_lib_filename = "./" + usys.argv[0].rsplit("/", 1)[0] + "/ffi_lib.so"
|
||
|
try:
|
||
|
uos.stat(ffi_lib_filename)
|
||
|
except OSError:
|
||
|
print("SKIP")
|
||
|
raise SystemExit
|
||
|
|
||
|
ffi_lib = ffi.open(ffi_lib_filename)
|
||
|
|
||
|
f8i = ffi_lib.func("b", "f8i", "b")
|
||
|
f8u = ffi_lib.func("B", "f8u", "B")
|
||
|
f16i = ffi_lib.func("h", "f16i", "h")
|
||
|
f16u = ffi_lib.func("H", "f16u", "H")
|
||
|
f32i = ffi_lib.func("i", "f32i", "i")
|
||
|
f32u = ffi_lib.func("I", "f32u", "I")
|
||
|
f64i = ffi_lib.func("q", "f64i", "q")
|
||
|
f64u = ffi_lib.func("Q", "f64u", "Q")
|
||
|
|
||
|
for func_name in ("f8i", "f8u", "f16i", "f16u", "f32i", "f32u", "f64i", "f64u"):
|
||
|
func = globals()[func_name]
|
||
|
for val in (
|
||
|
0,
|
||
|
0x7F,
|
||
|
0x80,
|
||
|
0xFF,
|
||
|
0x100,
|
||
|
0x7FFF,
|
||
|
0x8000,
|
||
|
0xFFFF,
|
||
|
0x10000,
|
||
|
0x7FFFFFFF,
|
||
|
0x80000000,
|
||
|
0xFFFFFFFF,
|
||
|
0x100000000,
|
||
|
0x7FFF_FFFF_FFFF_FFFF,
|
||
|
0x8000_0000_0000_0000,
|
||
|
0xFFFF_FFFF_FFFF_FFFF,
|
||
|
0x1_0000_0000_0000_0000,
|
||
|
):
|
||
|
print("{}({:x}) = {:x}".format(func_name, val, func(val)))
|