# -*- 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)))