diff options
author | Damien George <damien@micropython.org> | 2021-04-14 15:37:33 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-05-06 12:17:10 +1000 |
commit | 9e29217c73f36802de616c05bee9bf7f9090f722 (patch) | |
tree | 93d886a253be4f66e3c6932099934134e52529c6 /tests/unix/ffi_float.py | |
parent | 8172c2e9c5d5eec9a6b0a3f6cc4a2383b3d96d26 (diff) | |
download | micropython-9e29217c73f36802de616c05bee9bf7f9090f722.tar.gz micropython-9e29217c73f36802de616c05bee9bf7f9090f722.zip |
unix/modffi: Use a union for passing/returning FFI values.
This fixes a bug where double arguments on a 32-bit architecture would not
be passed correctly because they only had 4 bytes of storage (not 8). It
also fixes a compiler warning/error in return_ffi_value on certian
architectures: array subscript 'double[0]' is partly outside array bounds
of 'ffi_arg[1]' {aka 'long unsigned int[1]'}.
Fixes issue #7064.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests/unix/ffi_float.py')
-rw-r--r-- | tests/unix/ffi_float.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/tests/unix/ffi_float.py b/tests/unix/ffi_float.py index d039398965..03bd9f7f17 100644 --- a/tests/unix/ffi_float.py +++ b/tests/unix/ffi_float.py @@ -35,6 +35,15 @@ print("%.6f" % strtod("1.23", None)) # test passing double and float args libm = ffi_open(("libm.so", "libm.so.6", "libc.so.0", "libc.so.6", "libc.dylib")) tgamma = libm.func("d", "tgamma", "d") -for fun in (tgamma,): +for fun_name in ("tgamma",): + fun = globals()[fun_name] for val in (0.5, 1, 1.0, 1.5, 4, 4.0): - print("%.6f" % fun(val)) + print(fun_name, "%.5f" % fun(val)) + +# test passing 2x float/double args +powf = libm.func("f", "powf", "ff") +pow = libm.func("d", "pow", "dd") +for fun_name in ("powf", "pow"): + fun = globals()[fun_name] + for args in ((0, 1), (1, 0), (2, 0.5), (3, 4)): + print(fun_name, "%.5f" % fun(*args)) |