1# test 8/16/32/64 bit signed/unsigned integer arguments and return types for ffi functions 2# requires ffi_lib.c to be compiled as: $(CC) -shared -o ffi_lib.so ffi_lib.c 3 4import uos, usys 5 6try: 7 import ffi 8except ImportError: 9 print("SKIP") 10 raise SystemExit 11 12ffi_lib_filename = "./" + usys.argv[0].rsplit("/", 1)[0] + "/ffi_lib.so" 13try: 14 uos.stat(ffi_lib_filename) 15except OSError: 16 print("SKIP") 17 raise SystemExit 18 19ffi_lib = ffi.open(ffi_lib_filename) 20 21f8i = ffi_lib.func("b", "f8i", "b") 22f8u = ffi_lib.func("B", "f8u", "B") 23f16i = ffi_lib.func("h", "f16i", "h") 24f16u = ffi_lib.func("H", "f16u", "H") 25f32i = ffi_lib.func("i", "f32i", "i") 26f32u = ffi_lib.func("I", "f32u", "I") 27f64i = ffi_lib.func("q", "f64i", "q") 28f64u = ffi_lib.func("Q", "f64u", "Q") 29 30for func_name in ("f8i", "f8u", "f16i", "f16u", "f32i", "f32u", "f64i", "f64u"): 31 func = globals()[func_name] 32 for val in ( 33 0, 34 0x7F, 35 0x80, 36 0xFF, 37 0x100, 38 0x7FFF, 39 0x8000, 40 0xFFFF, 41 0x10000, 42 0x7FFFFFFF, 43 0x80000000, 44 0xFFFFFFFF, 45 0x100000000, 46 0x7FFF_FFFF_FFFF_FFFF, 47 0x8000_0000_0000_0000, 48 0xFFFF_FFFF_FFFF_FFFF, 49 0x1_0000_0000_0000_0000, 50 ): 51 print("{}({:x}) = {:x}".format(func_name, val, func(val))) 52