Files
PeakRDL-BusDecoder/tests/unit/conftest.py
Copilot 2ca1ce4e27 Fix --unroll CLI argument to properly unroll arrays instead of repeating them (#5)
* Initial plan

* Fix --unroll CLI argument to properly unroll arrays

Updated check_is_array() method and all CPUIF implementations to correctly detect and handle unrolled array elements. When unroll=True, each array element is now treated as an individual instance instead of being repeated as an array.

Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>

* Add comprehensive tests for --unroll functionality

Created tests to verify that array elements are correctly unrolled into individual instances when --unroll flag is used. Also fixed conftest.py fixture to keep temp files for later reference.

Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
2025-10-23 22:23:49 -07:00

53 lines
1.4 KiB
Python

"""Pytest fixtures for unit tests."""
from __future__ import annotations
from pathlib import Path
from tempfile import NamedTemporaryFile
from typing import Iterable, Mapping, Optional
import pytest
from systemrdl import RDLCompileError, RDLCompiler
@pytest.fixture
def compile_rdl(tmp_path: Path):
"""Compile inline SystemRDL source and return the elaborated root node.
Parameters
----------
tmp_path:
Temporary directory provided by pytest.
"""
def _compile(
source: str,
*,
top: Optional[str] = None,
defines: Optional[Mapping[str, object]] = None,
include_paths: Optional[Iterable[Path | str]] = None,
):
compiler = RDLCompiler()
for key, value in (defines or {}).items():
compiler.define(key, value)
for include_path in include_paths or ():
compiler.add_include_path(str(include_path))
# Use delete=False to keep the file around after closing
with NamedTemporaryFile("w", suffix=".rdl", dir=tmp_path, delete=False) as tmp_file:
tmp_file.write(source)
tmp_file.flush()
try:
compiler.compile_file(tmp_file.name)
if top is not None:
return compiler.elaborate(top)
return compiler.elaborate()
except RDLCompileError:
compiler.print_messages()
raise
return _compile