summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/binary.c14
-rw-r--r--tests/float/float_array.py14
2 files changed, 26 insertions, 2 deletions
diff --git a/py/binary.c b/py/binary.c
index fed69f9d1b..46a4eb694f 100644
--- a/py/binary.c
+++ b/py/binary.c
@@ -61,6 +61,10 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
size = 8; break;
case 'P': case 'O': case 'S':
size = sizeof(void*); break;
+ case 'f':
+ size = sizeof(float); break;
+ case 'd':
+ size = sizeof(double); break;
}
break;
case '@': {
@@ -90,6 +94,12 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
case 'P': case 'O': case 'S':
align = alignof(void*);
size = sizeof(void*); break;
+ case 'f':
+ align = alignof(float);
+ size = sizeof(float); break;
+ case 'd':
+ align = alignof(double);
+ size = sizeof(double); break;
}
}
}
@@ -252,10 +262,10 @@ void mp_binary_set_val_array(char typecode, void *p, mp_uint_t index, mp_obj_t v
switch (typecode) {
#if MICROPY_PY_BUILTINS_FLOAT
case 'f':
- ((float*)p)[index] = mp_obj_float_get(val_in);
+ ((float*)p)[index] = mp_obj_get_float(val_in);
break;
case 'd':
- ((double*)p)[index] = mp_obj_float_get(val_in);
+ ((double*)p)[index] = mp_obj_get_float(val_in);
break;
#endif
default:
diff --git a/tests/float/float_array.py b/tests/float/float_array.py
new file mode 100644
index 0000000000..c0f2c587cf
--- /dev/null
+++ b/tests/float/float_array.py
@@ -0,0 +1,14 @@
+from array import array
+
+def test(a):
+ print(a)
+ a.append(1.2)
+ print(len(a), '%.3f' % a[0])
+ a.append(1)
+ a.append(False)
+ print(len(a), '%.3f %.3f' % (a[1], a[2]))
+ a[-1] = 3.45
+ print('%.3f' % a[-1])
+
+test(array('f'))
+test(array('d'))