def test_valid_pack(self): """Test packing valid fixed point values.""" precision = 8 field = ('a', 'F', 'i', precision) self.assertTrue(ElementFixedPoint.valid(field)) elem = ElementFixedPoint(field, Mode.Big) test_values = [ ({'a': '4'}, 4), ({'a': 13.5}, 13.5), ({'a': '13.5'}, '13.5'), ({'a': '13.500'}, '13.500'), ({'a': Decimal('13.500')}, '13.500'), ({'a': 1.1 + 2.2}, '3.3'), ] multiplier = 2 ** precision for (in_val, out_val) in test_values: ret = elem.pack(in_val) if not isinstance(out_val, Decimal): out_val = Decimal(out_val) self.assertEqual(ret, int((out_val * multiplier)).to_bytes(4, 'big'))
def test_valid(self): """Test field formats that are valid fixedpoint elements.""" test_fields = [ ('a', 'F', 'i', 8), ('b', 'F', 'h', 4), ('c', 'F', 'h', 7), ] for field in test_fields: with self.subTest(field): # pylint: disable=no-member out = ElementFixedPoint.valid(field) self.assertTrue(out)
def test_not_valid(self): """Test field formats that are not valid fixedpoint elements.""" test_fields = [ ('a', 'PF', 16, 8), # Must have numbers preceding the F ('b', '3D', 8, 8), # D is not a valid prefix. Must be F for fixedpoint ('c', 'D', 8.0, 8), # Must be int, not float ('d', 'D', 8, 16), # bytes must be larger than precision. ('e', 'D', 8), # Must be of length four ] for field in test_fields: with self.subTest(field): # pylint: disable=no-member out = ElementFixedPoint.valid(field) self.assertFalse(out)