mirror of
https://github.com/elder-plinius/OBLITERATUS.git
synced 2026-08-18 00:47:23 +02:00
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""Deterministic property contracts for configuration serialization."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from hypothesis import given, seed, settings, strategies as st
|
|
|
|
from obliteratus.config import StudyConfig
|
|
|
|
|
|
PROPERTY_SETTINGS = settings(max_examples=60, deadline=None, database=None)
|
|
|
|
|
|
@seed(7007)
|
|
@PROPERTY_SETTINGS
|
|
@given(
|
|
batch_size=st.integers(1, 32),
|
|
max_length=st.integers(2, 4096),
|
|
strategy_names=st.lists(
|
|
st.text(alphabet="abcdefghijklmnopqrstuvwxyz_", min_size=1, max_size=16),
|
|
min_size=1,
|
|
max_size=8,
|
|
),
|
|
)
|
|
def test_study_config_public_roundtrip_preserves_explicit_values(
|
|
batch_size, max_length, strategy_names,
|
|
):
|
|
raw = {
|
|
"model": {"name": "fixture", "device": "cpu"},
|
|
"dataset": {"name": "fixture", "max_samples": 12},
|
|
"strategies": [{"name": name, "params": {"strength": 0.5}} for name in strategy_names],
|
|
"metrics": ["perplexity", "accuracy"],
|
|
"batch_size": batch_size,
|
|
"max_length": max_length,
|
|
"output_dir": "results/property",
|
|
}
|
|
config = StudyConfig.from_dict(raw)
|
|
restored = StudyConfig.from_dict(config.to_dict())
|
|
assert restored == config
|