summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--extmod/moductypes.c4
-rw-r--r--tests/extmod/uctypes_le_float.py16
-rw-r--r--tests/extmod/uctypes_le_float.py.exp2
-rw-r--r--tests/extmod/uctypes_sizeof_float.py2
-rw-r--r--tests/extmod/uctypes_sizeof_float.py.exp2
5 files changed, 24 insertions, 2 deletions
diff --git a/extmod/moductypes.c b/extmod/moductypes.c
index 97e8d7a787..58f0adfa4b 100644
--- a/extmod/moductypes.c
+++ b/extmod/moductypes.c
@@ -164,7 +164,7 @@ STATIC mp_uint_t uctypes_struct_agg_size(mp_obj_tuple_t *t, int layout_type, mp_
mp_uint_t item_s;
if (t->len == 2) {
// Elements of array are scalar
- item_s = GET_SCALAR_SIZE(val_type);
+ item_s = uctypes_struct_scalar_size(val_type);
if (item_s > *max_field_size) {
*max_field_size = item_s;
}
@@ -541,7 +541,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
return value; // just !MP_OBJ_NULL
}
} else {
- byte *p = self->addr + GET_SCALAR_SIZE(val_type) * index;
+ byte *p = self->addr + uctypes_struct_scalar_size(val_type) * index;
if (value == MP_OBJ_SENTINEL) {
return get_unaligned(val_type, p, self->flags);
} else {
diff --git a/tests/extmod/uctypes_le_float.py b/tests/extmod/uctypes_le_float.py
index 89e9a9e0ab..5255632c91 100644
--- a/tests/extmod/uctypes_le_float.py
+++ b/tests/extmod/uctypes_le_float.py
@@ -22,3 +22,19 @@ print("%.4f" % S.f64)
S.uf64 = 12.34
print("%.4f" % S.uf64)
+
+# array of float/double
+desc = {
+ "af32": (uctypes.ARRAY | 0, uctypes.FLOAT32 | 2),
+ "af64": (uctypes.ARRAY | 0, uctypes.FLOAT64 | 2),
+}
+data = bytearray(16)
+S = uctypes.struct(uctypes.addressof(data), desc, uctypes.LITTLE_ENDIAN)
+
+S.af32[0] = 1
+S.af32[1] = 2
+print("%.4f %.4f" % (S.af32[0], S.af32[1]), data)
+
+S.af64[0] = 1
+S.af64[1] = 2
+print("%.4f %.4f" % (S.af64[0], S.af64[1]), data)
diff --git a/tests/extmod/uctypes_le_float.py.exp b/tests/extmod/uctypes_le_float.py.exp
index a35a1da2dc..e93fcb0d97 100644
--- a/tests/extmod/uctypes_le_float.py.exp
+++ b/tests/extmod/uctypes_le_float.py.exp
@@ -1,3 +1,5 @@
12.3400
12.3400
12.3400
+1.0000 2.0000 bytearray(b'\x00\x00\x80?\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00')
+1.0000 2.0000 bytearray(b'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@')
diff --git a/tests/extmod/uctypes_sizeof_float.py b/tests/extmod/uctypes_sizeof_float.py
index 351632d76b..f1a4c88e2d 100644
--- a/tests/extmod/uctypes_sizeof_float.py
+++ b/tests/extmod/uctypes_sizeof_float.py
@@ -6,3 +6,5 @@ except ImportError:
print(uctypes.sizeof({"f": uctypes.FLOAT32}))
print(uctypes.sizeof({"f": uctypes.FLOAT64}))
+print(uctypes.sizeof({"f": (uctypes.ARRAY | 0, uctypes.FLOAT32 | 2)}))
+print(uctypes.sizeof({"f": (uctypes.ARRAY | 0, uctypes.FLOAT64 | 2)}))
diff --git a/tests/extmod/uctypes_sizeof_float.py.exp b/tests/extmod/uctypes_sizeof_float.py.exp
index de78180725..82776b54ab 100644
--- a/tests/extmod/uctypes_sizeof_float.py.exp
+++ b/tests/extmod/uctypes_sizeof_float.py.exp
@@ -1,2 +1,4 @@
4
8
+8
+16