38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""render_algo 单元测试。"""
|
|
|
|
import json
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
from ts_anomaly_td.visualize import render_algo
|
|
|
|
|
|
def _make_ts_vals_labels(n=200):
|
|
"""生成测试用时间序列。"""
|
|
ts = [i * 3600_000 for i in range(n)] # 每小时
|
|
vals = [float(i % 20) for i in range(n)]
|
|
labels = [1 if 50 <= i <= 60 else 0 for i in range(n)]
|
|
return ts, vals, labels
|
|
|
|
|
|
def test_render_algo_basic():
|
|
"""render_algo 应生成有效 PNG。"""
|
|
ts, vals, labels = _make_ts_vals_labels()
|
|
windows = [[ts[50], ts[60]]]
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
out = Path(tmpdir) / "test_algo.png"
|
|
result = render_algo(ts, vals, labels, windows, "ksigma", str(out), title="test")
|
|
assert Path(result).exists()
|
|
assert Path(result).stat().st_size > 5000
|
|
|
|
|
|
def test_render_algo_empty_windows():
|
|
"""空检测窗口应正常渲染。"""
|
|
ts, vals, labels = _make_ts_vals_labels(50)
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
out = Path(tmpdir) / "empty.png"
|
|
result = render_algo(ts, vals, labels, [], "iqr", str(out))
|
|
assert Path(result).exists()
|