Files
rerun-io--rerun/rerun_py/tests/unit/test_optimization_profile_parity.py
2026-07-13 13:05:14 +08:00

59 lines
1.9 KiB
Python

"""
Parity test for `OptimizationProfile`.
Python `OptimizationProfile.{LIVE,OBJECT_STORE}` must agree with the
Rust `OptimizationProfile::{LIVE,OBJECT_STORE}` constants byte-for-byte.
"""
from __future__ import annotations
import math
import pytest
from rerun.experimental import OptimizationProfile
from rerun_bindings import _optimization_profile_values # noqa: TID251
# Mapping: Python field -> Rust dict key. Names diverge intentionally
# (Rust mirrors `ChunkStoreConfig::chunk_max_*`; Python keeps the existing
# public `max_*` field set).
FIELD_MAP = {
"max_bytes": "chunk_max_bytes",
"max_rows": "chunk_max_rows",
"max_rows_if_unsorted": "chunk_max_rows_if_unsorted",
"extra_passes": "num_extra_passes",
"gop_batching": "gop_batching",
"split_size_ratio": "split_size_ratio",
}
def _python_dict(p: OptimizationProfile) -> dict[str, object]:
return {rust_key: getattr(p, py_key) for py_key, rust_key in FIELD_MAP.items()}
@pytest.mark.parametrize(
"name,profile",
[
("LIVE", OptimizationProfile.LIVE),
("OBJECT_STORE", OptimizationProfile.OBJECT_STORE),
],
)
def test_profile_parity(name: str, profile: OptimizationProfile) -> None:
rust = _optimization_profile_values(name)
py = _python_dict(profile)
# Bidirectional: a missing field on either side fails first with a clear diff.
assert set(rust.keys()) == set(py.keys()), f"key set diverged: rust={set(rust.keys())} py={set(py.keys())}"
for key in sorted(rust):
rv, pv = rust[key], py[key]
if isinstance(rv, float) or isinstance(pv, float):
assert math.isclose(rv, pv, rel_tol=1e-9), f"{name}.{key}: rust={rv!r} py={pv!r}" # type: ignore[arg-type]
else:
assert rv == pv, f"{name}.{key}: rust={rv!r} py={pv!r}"
def test_unknown_profile_name_raises() -> None:
with pytest.raises(ValueError):
_optimization_profile_values("BOGUS")