* 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>
53 lines
1.4 KiB
Python
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
|