def test_nan_floats(nonan_type: FormatField, construct_type: FormatField) -> None: """Check that error is raised if you try to build or parse nan floats.""" nan = float("nan") # noqa: WPS456 with pytest.raises(FormatFieldError): nonan_type.build(nan) nan_serialized = construct_type.build(nan) with pytest.raises(FormatFieldError): nonan_type.parse(nan_serialized)
class TestFormatField(unittest.TestCase): def setUp(self): self.ff = FormatField("formatfield", "<", "L") def test_trivial(self): pass def test_parse(self): self.assertEqual(self.ff.parse("\x12\x34\x56\x78"), 0x78563412) def test_build(self): self.assertEqual(self.ff.build(0x78563412), "\x12\x34\x56\x78") def test_parse_too_short(self): self.assertRaises(FieldError, self.ff.parse, "\x12\x34\x56") def test_build_too_long(self): self.assertRaises(FieldError, self.ff.build, 9e9999) def test_sizeof(self): self.assertEqual(self.ff.sizeof(), 4)
class TestFormatField(unittest.TestCase): def setUp(self): self.ff = FormatField("formatfield", "<", "L") def test_trivial(self): pass def test_parse(self): self.assertEqual(self.ff.parse(b"\x12\x34\x56\x78"), 0x78563412) def test_build(self): self.assertEqual(self.ff.build(0x78563412), b"\x12\x34\x56\x78") def test_parse_too_short(self): self.assertRaises(FieldError, self.ff.parse, b"\x12\x34\x56") def test_build_too_long(self): self.assertRaises(FieldError, self.ff.build, 9e9999) def test_sizeof(self): self.assertEqual(self.ff.sizeof(), 4)
def setUp(self): self.ff = FormatField("formatfield", "<", "L")
def setUp(self): self.ff = FormatField("formatfield", "<", "L")
MICRO_SEC, MILLI_SEC, SECOND, MINUTE, HOUR, AUX_1, AUX_2, TERMINATOR, ) from .ami_bitstructs import EntryChunk, DateShort import struct DIVIDEND_PAY_DATE = "Dividend Pay Date" DELISTING_DATE = "Delisting Date" SwappedField = FormatField("<", "f") # Const(b"\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3F") from construct import CString ascii_str = CString("ascii") Master = Struct( "Header" / Bytes(8), "NumSymbols" / Int32ul, "Symbols" / GreedyRange( Struct( "Symbol" / Padded(492, CString("ascii")), "CONST" / Const( b"\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3F" ), "Rest" / Bytes(1172 - 5 - 16 - 490 + 3),
HIGH, LOW, FUT, RESERVED, MICRO_SEC, MILLI_SEC, SECOND, MINUTE, HOUR, AUX_1, AUX_2, TERMINATOR, ) SwappedField = BitsSwapped(FormatField("<", "f")) DateShort=BitsSwapped(BitStruct( MINUTE / BitsInteger(length=6), # 38 HOUR / BitsInteger(length=5), # 43 DAY / RevBitsInteger(length=5), # Bit 48 Byte 6 MONTH / RevBitsInteger(length=4), # 52 YEAR / RevBitsInteger(length=12), )) Date=BitStruct( FUT / BitsInteger(length=1), # 1 RESERVED / BitsInteger(length=5), # 6 MICRO_SEC / BitsInteger(length=10), # Bit 16 byte 2 MILLI_SEC / BitsInteger(length=10), # 26 SECOND / BitsInteger(length=6), # Bit 32 Byte 4