Files
bproto/test/compiler/test_bitfields.py
2025-04-14 14:43:03 +02:00

81 lines
2.3 KiB
Python

import sys
sys.path.append('src/')
from nameHandling.base import ComponentName
from protocol_components.bitfields import FactoryBitfield, Bitfield
from errors import BprotoDuplicateNameError, BprotoDuplicateBitfieldPositionError, BprotoCompilerError
from nameHandling.base import NameStyleBproto
def test_bitfield_factory():
fatory = FactoryBitfield()
fatory.add_bit("BIT #1", 0)
fatory.add_bit("BIT #4", None)
fatory.add_bit("BIT #2", 1)
fatory.add_bit("BIT #5", 4)
fatory.add_bit("BIT #6", None)
fatory.add_bit("BIT #3", 2)
fatory.add_bit("BIT #7", 6)
bitfield: Bitfield = fatory.assemble("TestBitfield")
assert bitfield.name == "TestBitfield"
assert isinstance(bitfield.name, ComponentName)
assert isinstance(bitfield.get_name(), ComponentName)
assert isinstance(bitfield.get_identifier(), ComponentName)
assert bitfield.bits == {
NameStyleBproto.fromStr("BIT #1"): 0,
NameStyleBproto.fromStr("BIT #2"): 1,
NameStyleBproto.fromStr("BIT #3"): 2,
NameStyleBproto.fromStr("BIT #4"): 3,
NameStyleBproto.fromStr("BIT #5"): 4,
NameStyleBproto.fromStr("BIT #6"): 5,
NameStyleBproto.fromStr("BIT #7"): 6,
}
assert isinstance(list(bitfield.bits.keys())[0], ComponentName)
def test_bitfield_factory_failure_cases_duplicate_name():
factory = FactoryBitfield()
factory.add_bit("BIT #1", 0)
factory.add_bit("BIT #1", 1)
factory.add_bit("BIT #2", 2)
try:
factory.assemble("TestBitfield")
assert False
except BprotoCompilerError as e:
assert isinstance(e, BprotoDuplicateNameError)
def test_bitfield_factory_failure_cases_duplicate_position():
factory = FactoryBitfield()
factory.add_bit("BIT #1", 0)
factory.add_bit("BIT #2", 1)
factory.add_bit("BIT #3", 1)
try:
factory.assemble("TestBitfield")
assert False
except BprotoCompilerError as e:
assert isinstance(e, BprotoDuplicateBitfieldPositionError)
def test_bitfield_size_calculation():
bitfield = Bitfield("TestBitfield")
bitfield.length = 7
assert bitfield.get_size_bytes() == 1
bitfield.length = 0
assert bitfield.get_size_bytes() == 1
bitfield.length = 8
assert bitfield.get_size_bytes() == 1
bitfield.length = 9
assert bitfield.get_size_bytes() == 2