diff --git a/.m11b2d_a1c_patch.py b/.m11b2d_a1c_patch.py new file mode 100644 index 0000000..03fe387 --- /dev/null +++ b/.m11b2d_a1c_patch.py @@ -0,0 +1,70 @@ +# -*- 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)))