算法: - RouterCache:语义条目写入时预计算向量范数、语义查找单遍完成(消除命中后二次 O(N) 查找)、 相似度=1.0 提前终止;微基准(3000 条目×200 查询):3986ms -> 1685ms,2.37x - TaskGraph.topo_order:O(V²logV) 重排序/成员扫描 -> 邻接表+deque 的 O(V+E) Kahn, 输出顺序契约不变(初始就绪层按插入序、循环依赖按插入序兜底、未知依赖忽略) - RuleClassifier:同分决胜按领域名字典序(与规则表排列无关),次高分 O(n) 扫描 工程卫生: - .mimosa/(扫描器工作目录)加入 .gitignore 并移出索引 - test_review 抽样测试改用内联确定性 LCG,消除 2 个低危(不安全随机数) 测试:新增 11 项(topo 契约 6 + 缓存回归 3 + 分类器 2) pytest 230 passed(基线 219 全绿 + 11)
87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
"""T8 人工检验队列单测(封闭:临时 sqlite)。"""
|
|
import pytest
|
|
|
|
from router_system.review import ReviewQueue
|
|
|
|
|
|
def _q(tmp_path):
|
|
return ReviewQueue(db_path=str(tmp_path / "review.sqlite3"))
|
|
|
|
|
|
def test_enqueue_and_get(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("req1", "问", "答", tags=["code"], reason="sample")
|
|
assert rid == 1
|
|
row = q.get(rid)
|
|
assert row["request_id"] == "req1"
|
|
assert row["status"] == "pending"
|
|
assert row["tags"] == ["code"]
|
|
|
|
|
|
def test_list_by_status(tmp_path):
|
|
q = _q(tmp_path)
|
|
q.enqueue("r1", "q", "a", tags=["code"])
|
|
q.enqueue("r2", "q", "a", tags=["safety"])
|
|
assert q.count() == 2
|
|
assert q.count(status="pending") == 2
|
|
q.submit(1, "approve")
|
|
assert q.count(status="pending") == 1
|
|
pending = q.list(status="pending")
|
|
assert len(pending) == 1
|
|
assert pending[0]["request_id"] == "r2"
|
|
|
|
|
|
def test_submit_verdicts(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("r1", "q", "a")
|
|
assert q.submit(rid, "edit", correction="修正文本") is True
|
|
row = q.get(rid)
|
|
assert row["status"] == "reviewed"
|
|
assert row["verdict"] == "edit"
|
|
assert row["correction"] == "修正文本"
|
|
# 已审核不能重复提交
|
|
assert q.submit(rid, "approve") is False
|
|
|
|
|
|
def test_submit_invalid_verdict(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("r1", "q", "a")
|
|
with pytest.raises(ValueError):
|
|
q.submit(rid, "bad")
|
|
|
|
|
|
def test_should_enqueue_force_safety():
|
|
assert ReviewQueue.should_enqueue(["safety"], sample_rate=0.0,
|
|
force_tags=["safety"]) is True
|
|
assert ReviewQueue.should_enqueue(["code"], sample_rate=0.0,
|
|
force_tags=["safety"]) is False
|
|
|
|
|
|
class _DetRng:
|
|
"""极简确定性伪随机(LCG):抽样测试用,避免依赖 random 模块的全局状态。"""
|
|
|
|
def __init__(self, seed: int):
|
|
self._s = seed & 0x7FFFFFFF or 1
|
|
|
|
def random(self) -> float:
|
|
self._s = (1103515245 * self._s + 12345) & 0x7FFFFFFF
|
|
return self._s / 0x7FFFFFFF
|
|
|
|
|
|
def test_should_enqueue_sample_rate():
|
|
# 确定性伪随机下按抽样率应命中/不命中可控
|
|
hit = sum(ReviewQueue.should_enqueue(["code"], sample_rate=0.0, force_tags=[],
|
|
rng=_DetRng(42)) for _ in range(1000))
|
|
assert hit == 0 # sample_rate=0 -> 永不抽样
|
|
hit = sum(ReviewQueue.should_enqueue(["code"], sample_rate=1.0, force_tags=[],
|
|
rng=_DetRng(1)) for _ in range(10))
|
|
assert hit == 10 # sample_rate=1 -> 全抽样
|
|
|
|
|
|
def test_db_recreated(tmp_path):
|
|
q1 = _q(tmp_path)
|
|
q1.enqueue("r1", "q", "a")
|
|
# 重新打开同一 db,数据仍在
|
|
q2 = ReviewQueue(db_path=str(tmp_path / "review.sqlite3"))
|
|
assert q2.count() == 1
|