muse-agent-example/tests/单元/test_审校覆盖.py
zizi cf0f4fb985 W20–W24:保存知识方法、迁移框架、审校修订与案例行为的集成成果
接续 88dd570,保存 W20–W24 已实现的共享接口、业务入口、迁移、工作台、测试与文档。
W20/W22/W23 保持 in_progress,W21/W24 保持 verified;此提交不宣称方法或规则正式启用、多轮返修、真实角色评测完成。

W25 新增实验、标定、逐调用交付与角色执行及其迁移/测试/索引留在实施工作树,原有私人和旧实现保留项不纳入。

验证:离线 571、前端 33 通过;PG 469 项通过、2 项浏览器未启用,2 项误带入的 W25 用例已移出本提交;最终任务与交付边界 37 项通过。make 检查、最终类型、84 项资源及 diff 检查通过。未重跑浏览器或 Pi 宿主,不以合成调用认证外部模型效果。
独立整体审查四维通过;证据保存在 R2-20260909/提交W20-W24。
2026-09-13 16:24:42 +08:00

91 lines
3.8 KiB
Python

"""完整审校的范围合同;结构覆盖不冒充模型调用或文学判定。"""
import hashlib
from dataclasses import replace
import pytest
from muse.共享.错误 import Muse错误
依据 = hashlib.sha256(b"synthetic-review-basis").hexdigest()
@pytest.mark.parametrize(
"原文", ["甲🙂乙𠀀丙。\n第二段不会被忽略。", "前文\r\n后文\r\n末句。", "\n\n 保留空白\n\n尾部"]
)
def test_核心覆盖全部码点且上下文不重复计数__22a001(原文):
from muse.审校修订.接口 import 核对审校覆盖, 生成审校分片
计划 = 生成审校分片(原文, 依据, 核心上限=5, 上下文字数=3)
assert "".join(原文[p.核心起点 : p.核心终点] for p in 计划) == 原文
assert all(p.文本 == 原文[p.上下文起点 : p.上下文终点] for p in 计划)
for p in 计划:
for pos in (p.核心起点, p.核心终点, p.上下文起点, p.上下文终点):
assert not (0 < pos < len(原文) and 原文[pos - 1 : pos + 1] == "\r\n")
完整 = 核对审校覆盖(原文, 依据, 计划, [p.片ID for p in 计划])
assert 完整["范围完整"] is True and 完整["已审字数"] == len(原文)
assert 完整["未审区"] == [] and "passed" not in 完整
部分 = 核对审校覆盖(原文, 依据, 计划, [计划[0].片ID])
assert 部分["范围完整"] is False
assert 部分["未审区"][-1][1] == len(原文)
assert 部分["已审字数"] == 计划[0].核心终点
@pytest.mark.parametrize(
"变更", ["文本", "依据", "片段字节", "核心范围", "遗漏计划", "重复计划", "陌生完成", "重复完成"]
)
def test_旧依据与坏片段不能构造完整覆盖__22a002(变更):
from muse.审校修订.接口 import 核对审校覆盖, 生成审校分片
原文 = "同一个前缀,另一段尾部不能漏审。"
计划 = 生成审校分片(原文, 依据, 核心上限=6, 上下文字数=2)
完成 = [p.片ID for p in 计划]
新依据 = 依据
if 变更 == "文本":
原文 += "新"
elif 变更 == "依据":
新依据 = "0" * 64
elif 变更 == "片段字节":
计划 = (replace(计划[0], 文本="伪片段"), *计划[1:])
elif 变更 == "核心范围":
计划 = (replace(计划[0], 核心终点=计划[0].核心终点 + 1), *计划[1:])
elif 变更 == "遗漏计划":
计划 = 计划[:-1]
elif 变更 == "重复计划":
计划 = (计划[0], *计划)
elif 变更 == "陌生完成":
完成 += ["not-a-shard"]
else:
完成 += [完成[0]]
with pytest.raises(Muse错误):
核对审校覆盖(原文, 新依据, 计划, 完成)
@pytest.mark.parametrize(
"原文,上限,上下文",
[
("", 5, 2),
(" \n", 5, 2),
("正文", True, 0),
("正文", 1, 0),
("正文", 5, -1),
("正文", 5, 6),
("正文", 5, False),
],
)
def test_分片参数显式有界且不吞原文__22a003(原文, 上限, 上下文):
from muse.审校修订.接口 import 生成审校分片
with pytest.raises(Muse错误):
生成审校分片(原文, 依据, 核心上限=上限, 上下文字数=上下文)
def test_相同输入分片稳定且全文或依据变化使旧身份失效__22a004():
from muse.审校修订.接口 import 生成审校分片
一 = 生成审校分片("前缀相同的长文末尾。", 依据, 核心上限=4, 上下文字数=1)
assert 一 == 生成审校分片("前缀相同的长文末尾。", 依据, 核心上限=4, 上下文字数=1)
二 = 生成审校分片("前缀相同的长文末尾!", 依据, 核心上限=4, 上下文字数=1)
三 = 生成审校分片("前缀相同的长文末尾。", "0" * 64, 核心上限=4, 上下文字数=1)
assert 一[0].片ID != 二[0].片ID and 一[0].片ID != 三[0].片ID