summaryrefslogtreecommitdiffstatshomepage
path: root/tests/unix/ffi_float.py
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-04-14 15:37:33 +1000
committerDamien George <damien@micropython.org>2021-05-06 12:17:10 +1000
commit9e29217c73f36802de616c05bee9bf7f9090f722 (patch)
tree93d886a253be4f66e3c6932099934134e52529c6 /tests/unix/ffi_float.py
parent8172c2e9c5d5eec9a6b0a3f6cc4a2383b3d96d26 (diff)
downloadmicropython-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.py13
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))