60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
from peakrdl_busdecoder.body import StructBody
|
|
|
|
|
|
class TestStructBody:
|
|
"""Test the StructBody class."""
|
|
|
|
def test_simple_struct(self) -> None:
|
|
"""Test simple struct definition."""
|
|
body = StructBody("my_struct_t", packed=True, typedef=True)
|
|
body += "logic [7:0] field1;"
|
|
body += "logic field2;"
|
|
|
|
result = str(body)
|
|
assert "typedef struct packed" in result
|
|
assert "my_struct_t" in result
|
|
assert "logic [7:0] field1;" in result
|
|
assert "logic field2;" in result
|
|
|
|
def test_unpacked_struct(self) -> None:
|
|
"""Test unpacked struct definition."""
|
|
body = StructBody("unpacked_t", packed=False, typedef=True)
|
|
body += "int field1;"
|
|
|
|
result = str(body)
|
|
assert "typedef struct" in result
|
|
assert "packed" not in result or "typedef struct {" in result
|
|
assert "unpacked_t" in result
|
|
|
|
def test_struct_without_typedef(self) -> None:
|
|
"""Test struct without typedef."""
|
|
body = StructBody("my_struct", packed=True, typedef=False)
|
|
body += "logic field;"
|
|
|
|
result = str(body)
|
|
# When typedef=False, packed is not used
|
|
assert "struct {" in result
|
|
assert "typedef" not in result
|
|
assert "my_struct" in result
|
|
|
|
def test_empty_struct(self) -> None:
|
|
"""Test empty struct."""
|
|
body = StructBody("empty_t", packed=True, typedef=True)
|
|
result = str(body)
|
|
assert "typedef struct packed" in result
|
|
assert "empty_t" in result
|
|
|
|
def test_nested_struct(self) -> None:
|
|
"""Test struct with nested struct."""
|
|
outer = StructBody("outer_t", packed=True, typedef=True)
|
|
inner = StructBody("inner_t", packed=True, typedef=True)
|
|
inner += "logic field1;"
|
|
outer += "logic field2;"
|
|
outer += str(inner) # Include inner struct as a string
|
|
|
|
result = str(outer)
|
|
assert "outer_t" in result
|
|
assert "field2;" in result
|
|
# Inner struct should appear in the string
|
|
assert "inner_t" in result
|