diff options
author | Damien George <damien.p.george@gmail.com> | 2014-11-21 18:16:25 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-11-21 18:16:25 +0000 |
commit | c9f8f653adbff865d5cebdf0e46dc22680cebce4 (patch) | |
tree | 92c9c05007acedc724a7b0213e0630998a7654c1 | |
parent | 9d1ca65b59614c38674d0c8c4dc2e8da9618df69 (diff) | |
download | micropython-c9f8f653adbff865d5cebdf0e46dc22680cebce4.tar.gz micropython-c9f8f653adbff865d5cebdf0e46dc22680cebce4.zip |
py: Add support for float/double arrays in array module.
Addresses issue #981.
-rw-r--r-- | py/binary.c | 14 | ||||
-rw-r--r-- | tests/float/float_array.py | 14 |
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')) |