format unit properly in the case of nested arrays

The unit is shown at the end of nested arrays.

Change-Id: I235bc40e61161e09a7b00cd1e186d8d8c1769d89
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30734
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
zolliker 2023-03-21 12:41:20 +01:00
parent dd6ee398f2
commit 39f0180f40
2 changed files with 12 additions and 2 deletions

View File

@ -844,9 +844,16 @@ class ArrayOf(DataType):
return self(value) return self(value)
def format_value(self, value, unit=None): def format_value(self, value, unit=None):
innerunit = ''
if unit is None: if unit is None:
unit = self.unit or self.members.unit members = self.members
res = '[%s]' % (', '.join([self.members.format_value(elem, '') for elem in value])) while isinstance(members, ArrayOf):
members = members.members
if members.unit:
unit = members.unit
else:
innerunit = None
res = '[%s]' % (', '.join([self.members.format_value(elem, innerunit) for elem in value]))
if unit: if unit:
return ' '.join([res, unit]) return ' '.join([res, unit])
return res return res

View File

@ -420,6 +420,9 @@ def test_ArrayOf():
dt = ArrayOf(EnumType('myenum', single=0), 5) dt = ArrayOf(EnumType('myenum', single=0), 5)
copytest(dt) copytest(dt)
dt = ArrayOf(ArrayOf(FloatRange(unit='m')))
assert dt.format_value([[0, 1], [2, 3]]) == '[[0, 1], [2, 3]] m'
def test_TupleOf(): def test_TupleOf():
# test constructor catching illegal arguments # test constructor catching illegal arguments