tests/ports/unix: Update and extend the modffi integer tests.
Added the "long" modffi tests. The tests could not be added to the existing ffi_types test because two .exp files were required for the 32-bit and 64-bit results. Code common to both the ffi_types and type "long" tests was factored into ffi_int_base. ffi_types was renamed to ffi_int_types to group the related tests under the "ffi_int" prefix. Signed-off-by: Michael Sawyer <mjfsawyer@gmail.com>
This commit is contained in:
committed by
Damien George
parent
b05983ff6d
commit
230e521515
49
tests/ports/unix/ffi_int_base.py
Normal file
49
tests/ports/unix/ffi_int_base.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# common tests for ffi_int_types/long32/long64
|
||||||
|
# requires ffi_lib.c to be compiled as: $(CC) -shared -o ffi_lib.so ffi_lib.c
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
import ffi
|
||||||
|
except ImportError:
|
||||||
|
print("SKIP")
|
||||||
|
raise SystemExit
|
||||||
|
|
||||||
|
ffi_lib_filename = sys.argv[0].rsplit("/", 1)[0] + "/ffi_lib.so"
|
||||||
|
try:
|
||||||
|
os.stat(ffi_lib_filename)
|
||||||
|
except OSError:
|
||||||
|
print("SKIP")
|
||||||
|
raise SystemExit
|
||||||
|
|
||||||
|
ffi_lib = ffi.open(ffi_lib_filename)
|
||||||
|
|
||||||
|
|
||||||
|
def test(funcs):
|
||||||
|
for type, name in funcs:
|
||||||
|
func = ffi_lib.func(type, name, type)
|
||||||
|
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(name, val, func(val)))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("SKIP")
|
||||||
|
raise SystemExit
|
||||||
16
tests/ports/unix/ffi_int_long32.py
Normal file
16
tests/ports/unix/ffi_int_long32.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# test 32-bit long arguments and return types for ffi functions
|
||||||
|
|
||||||
|
import struct
|
||||||
|
|
||||||
|
import ffi_int_base
|
||||||
|
|
||||||
|
if struct.calcsize("l") != 4:
|
||||||
|
print("SKIP")
|
||||||
|
raise SystemExit
|
||||||
|
|
||||||
|
ffi_int_base.test(
|
||||||
|
[
|
||||||
|
("l", "fli"),
|
||||||
|
("L", "flu"),
|
||||||
|
]
|
||||||
|
)
|
||||||
34
tests/ports/unix/ffi_int_long32.py.exp
Normal file
34
tests/ports/unix/ffi_int_long32.py.exp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
fli(0) = 1
|
||||||
|
fli(7f) = 7e
|
||||||
|
fli(80) = 81
|
||||||
|
fli(ff) = fe
|
||||||
|
fli(100) = 101
|
||||||
|
fli(7fff) = 7ffe
|
||||||
|
fli(8000) = 8001
|
||||||
|
fli(ffff) = fffe
|
||||||
|
fli(10000) = 10001
|
||||||
|
fli(7fffffff) = 7ffffffe
|
||||||
|
fli(80000000) = -7fffffff
|
||||||
|
fli(ffffffff) = -2
|
||||||
|
fli(100000000) = 1
|
||||||
|
fli(7fffffffffffffff) = -2
|
||||||
|
fli(8000000000000000) = 1
|
||||||
|
fli(ffffffffffffffff) = -2
|
||||||
|
fli(10000000000000000) = 1
|
||||||
|
flu(0) = 1
|
||||||
|
flu(7f) = 7e
|
||||||
|
flu(80) = 81
|
||||||
|
flu(ff) = fe
|
||||||
|
flu(100) = 101
|
||||||
|
flu(7fff) = 7ffe
|
||||||
|
flu(8000) = 8001
|
||||||
|
flu(ffff) = fffe
|
||||||
|
flu(10000) = 10001
|
||||||
|
flu(7fffffff) = 7ffffffe
|
||||||
|
flu(80000000) = 80000001
|
||||||
|
flu(ffffffff) = fffffffe
|
||||||
|
flu(100000000) = 1
|
||||||
|
flu(7fffffffffffffff) = fffffffe
|
||||||
|
flu(8000000000000000) = 1
|
||||||
|
flu(ffffffffffffffff) = fffffffe
|
||||||
|
flu(10000000000000000) = 1
|
||||||
16
tests/ports/unix/ffi_int_long64.py
Normal file
16
tests/ports/unix/ffi_int_long64.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# test 64-bit long arguments and return types for ffi functions
|
||||||
|
|
||||||
|
import struct
|
||||||
|
|
||||||
|
import ffi_int_base
|
||||||
|
|
||||||
|
if struct.calcsize("l") != 8:
|
||||||
|
print("SKIP")
|
||||||
|
raise SystemExit
|
||||||
|
|
||||||
|
ffi_int_base.test(
|
||||||
|
[
|
||||||
|
("l", "fli"),
|
||||||
|
("L", "flu"),
|
||||||
|
]
|
||||||
|
)
|
||||||
34
tests/ports/unix/ffi_int_long64.py.exp
Normal file
34
tests/ports/unix/ffi_int_long64.py.exp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
fli(0) = 1
|
||||||
|
fli(7f) = 7e
|
||||||
|
fli(80) = 81
|
||||||
|
fli(ff) = fe
|
||||||
|
fli(100) = 101
|
||||||
|
fli(7fff) = 7ffe
|
||||||
|
fli(8000) = 8001
|
||||||
|
fli(ffff) = fffe
|
||||||
|
fli(10000) = 10001
|
||||||
|
fli(7fffffff) = 7ffffffe
|
||||||
|
fli(80000000) = 80000001
|
||||||
|
fli(ffffffff) = fffffffe
|
||||||
|
fli(100000000) = 100000001
|
||||||
|
fli(7fffffffffffffff) = 7ffffffffffffffe
|
||||||
|
fli(8000000000000000) = -7fffffffffffffff
|
||||||
|
fli(ffffffffffffffff) = -2
|
||||||
|
fli(10000000000000000) = 1
|
||||||
|
flu(0) = 1
|
||||||
|
flu(7f) = 7e
|
||||||
|
flu(80) = 81
|
||||||
|
flu(ff) = fe
|
||||||
|
flu(100) = 101
|
||||||
|
flu(7fff) = 7ffe
|
||||||
|
flu(8000) = 8001
|
||||||
|
flu(ffff) = fffe
|
||||||
|
flu(10000) = 10001
|
||||||
|
flu(7fffffff) = 7ffffffe
|
||||||
|
flu(80000000) = 80000001
|
||||||
|
flu(ffffffff) = fffffffe
|
||||||
|
flu(100000000) = 100000001
|
||||||
|
flu(7fffffffffffffff) = 7ffffffffffffffe
|
||||||
|
flu(8000000000000000) = 8000000000000001
|
||||||
|
flu(ffffffffffffffff) = fffffffffffffffe
|
||||||
|
flu(10000000000000000) = 1
|
||||||
16
tests/ports/unix/ffi_int_types.py
Normal file
16
tests/ports/unix/ffi_int_types.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# test 8/16/32/64 bit signed/unsigned integer arguments and return types for ffi functions
|
||||||
|
|
||||||
|
import ffi_int_base
|
||||||
|
|
||||||
|
ffi_int_base.test(
|
||||||
|
[
|
||||||
|
("b", "f8i"),
|
||||||
|
("B", "f8u"),
|
||||||
|
("h", "f16i"),
|
||||||
|
("H", "f16u"),
|
||||||
|
("i", "f32i"),
|
||||||
|
("I", "f32u"),
|
||||||
|
("q", "f64i"),
|
||||||
|
("Q", "f64u"),
|
||||||
|
]
|
||||||
|
)
|
||||||
@@ -31,3 +31,11 @@ int64_t f64i(int64_t x) {
|
|||||||
uint64_t f64u(uint64_t x) {
|
uint64_t f64u(uint64_t x) {
|
||||||
return x ^ 1;
|
return x ^ 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long fli(long x) {
|
||||||
|
return x ^ 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long flu(unsigned long x) {
|
||||||
|
return x ^ 1;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
# 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 os, sys
|
|
||||||
|
|
||||||
try:
|
|
||||||
import ffi
|
|
||||||
except ImportError:
|
|
||||||
print("SKIP")
|
|
||||||
raise SystemExit
|
|
||||||
|
|
||||||
ffi_lib_filename = "./" + sys.argv[0].rsplit("/", 1)[0] + "/ffi_lib.so"
|
|
||||||
try:
|
|
||||||
os.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)))
|
|
||||||
Reference in New Issue
Block a user