world_sync/.m11b2d_a1c_patch.py
2026-09-22 21:51:59 +08:00

71 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""M11b-2d-A1c 外观债清理补丁脚本(一次性工具,不入库)。
只对 tests/test_m11b2_single_tx.py 做三处定点替换,每处必须**恰好命中 1 次**,
否则整体不写盘并 FAIL 退出——保证「禁改其它任何行」。
"""
import io
import sys
PATH = "tests/test_m11b2_single_tx.py"
EDITS = [
# (名称, 原文, 新文)
("1) TestLatency::test_p99_under_200ms vacuous 断言 -> 对 samples 逐次断言",
' samples = []\n'
' for i in range(100):\n'
' res = self.apply("ev-l-%d" % i, states=[su(state={"hp": i})])\n'
' self.assertTrue(res["ok"])\n'
' samples.append(res["latency_ms"])\n',
' results = []\n'
' for i in range(100):\n'
' res = self.apply("ev-l-%d" % i, states=[su(state={"hp": i})])\n'
' self.assertTrue(res["ok"])\n'
' results.append(res)\n'
' samples = [r["latency_ms"] for r in results]\n'),
("1b) 删除永真空生成器断言,改为逐次断言全部 res 的 sla_breach",
' self.assertFalse(any(r["sla_breach"] for r in [])) # 见下条逐次断言\n',
' for r in results:\n'
' self.assertFalse(r["sla_breach"],\n'
' "latency_ms=%r 触发 sla_breach" % r["latency_ms"])\n'),
("2a) for_update 用例中的死表达式 -> 仅保留两条真实断言",
' self.assertEqual("", sqlmod.for_update_clause(SQLITE))\n'
' self.assertIn("pbl_entity_state",\n'
' " ".join(s for s, _p in self_dummy_log()) if False else "pbl_entity_state")\n',
' self.assertEqual("", sqlmod.for_update_clause(SQLITE))\n'),
("2b) 删除配套空函数 self_dummy_log()",
'\n\ndef self_dummy_log():\n return []\n',
'\n'),
("3) assert_atomic_rollback 尾逗号(无意义元组)",
' self.assertEqual(["BEGIN", "ROLLBACK"], k[-tail:]),\n',
' self.assertEqual(["BEGIN", "ROLLBACK"], k[-tail:])\n'),
]
with io.open(PATH, "r", encoding="utf-8") as f:
src = f.read()
orig_len = len(src)
for name, old, new in EDITS:
n = src.count(old)
if n != 1:
print("FAIL: 锚点命中 %d 次(应为 1): %s" % (n, name))
sys.exit(1)
src = src.replace(old, new, 1)
print("OK : %s" % name)
assert "self_dummy_log" not in src, "FAIL: self_dummy_log 残留"
assert "for r in []" not in src, "FAIL: 空生成器断言残留"
assert "if False else" not in src, "FAIL: 死表达式残留"
assert 'k[-tail:]),' not in src, "FAIL: 尾逗号残留"
with io.open(PATH, "w", encoding="utf-8") as f:
f.write(src)
print("DONE: %s %d -> %d 字符" % (PATH, orig_len, len(src)))