Files
next-tjwater-server/tests/unit/test_benchmark_normal_scada.py
T

52 lines
1.6 KiB
Python

from datetime import datetime, timezone
import pytest
from scripts.benchmark.generation import (
deterministic_standard_normal,
noisy_scada_observation,
)
AT = datetime(2026, 5, 1, tzinfo=timezone.utc)
def test_noise_is_stable_and_bound_to_observation_identity():
value = deterministic_standard_normal(
seed="normal-day-v1", at=AT, device_id="P1", metric="pressure",
)
assert value == deterministic_standard_normal(
seed="normal-day-v1", at=AT, device_id="P1", metric="pressure",
)
assert value != deterministic_standard_normal(
seed="normal-day-v1", at=AT, device_id="P2", metric="pressure",
)
def test_pressure_keeps_metres_and_flow_converts_lps_to_m3h_before_noise():
pressure = noisy_scada_observation(
raw_value=20.0, device_type="pressure", at=AT, device_id="P1",
seed="normal-day-v1", pressure_sigma_percent=0, pressure_sigma_floor_m=0,
)
flow = noisy_scada_observation(
raw_value=10.0, device_type="pipe_flow", at=AT, device_id="F1",
seed="normal-day-v1", flow_sigma_percent=0,
)
assert pressure == 20.0
assert flow == 36.0
def test_noise_is_clipped_and_pressure_never_becomes_negative():
value = noisy_scada_observation(
raw_value=0.01, device_type="pressure", at=AT, device_id="P1",
seed="normal-day-v1", pressure_sigma_percent=0,
pressure_sigma_floor_m=100, clip_sigma=3,
)
assert value >= 0
with pytest.raises(ValueError, match="unsupported"):
noisy_scada_observation(
raw_value=1, device_type="quality", at=AT, device_id="Q1",
seed="normal-day-v1",
)