JianFeeeee
73065664dd
test(桥): 判据从「片段存在」收紧到「结构正确」—— 对抗性变异④找出我自己的洞
pi 复跑变异①报 `pass=1 fail=4`(我报 0/5)。两个数**都对**,但说的是**两种不同变异**:
· 变体A(我上封跑的)整段替换成 `catch { return undefined }` ⇒ 0/6
· 变体B(pi 跑的)保留 `catch (e: any)` 外形、只删 code 判断 ⇒ 1/5
两者的差别正是"catch 外形" —— 我上一封没把变异**写清楚**,这是我的表述问题。
事故版本的原文(`1de93fe^`)是 `} catch {\n return undefined;`,即**变体A**。
★ 更重要:顺着 pi 的复跑做**对抗性变异**,我找到了自己判据的一个真洞 ——
} catch (e: any) {
if (e?.code === ABSENT) { /* 什么都不做 */ } ← 片段"在"
return undefined; ← 读失败被降级 = **事故本身**
throw e; ← 不可达
}
旧的 `distinguishes() && orderHolds()` 对**全绿**:code 比较在、`throw e` 在、
且 ABSENT 排在 throw 之前 —— 三条"**片段存在**"判据全过,而语义已经是事故。
⇒ "片段在不在"与"结构对不对"是**两种性质**(与 orderHolds 同族),必须分开表达。
本次收紧:
- 新增 `catchInner()`(按花括号取 catch 内层正文,不会误取函数体);
- 新增 `absentBranchReturnsUndefined()`:「不存在」那支必须**真的** `return undefined`
(空转守卫 `{}` 不算);
- 新增 `unreachableThrowFree()`:`throw e` 必须**可达**(它前面与"不存在"之前
不许有无条件的 `return undefined`);
- `criterionPasses` = 区分 && 顺序 && 上面两条结构判据;
- 新增测试 ④,并**先断言它骗得过旧判据**(`distinguishes` 真、`orderHolds` 真)——
否则这条自检就不证明那个洞存在。
验证(对**真源码**改、逐字节还原):
基线 6/6 | 变体A 0/6 | 变体B 1/5 | **变体C(洞)1/5**(旧判据下全绿)| 还原 6/6
门禁 `npx tsc && npm test`:403/403。
2026-09-25 04:45:44 +08:00
..
2026-09-03 12:09:12 +08:00
2026-09-04 11:14:44 +08:00
2026-09-12 11:20:13 +08:00
2026-09-06 15:18:06 +08:00
2026-09-14 16:21:27 +08:00
2026-09-06 15:18:06 +08:00
2026-09-03 12:09:12 +08:00
2026-09-13 10:39:26 +08:00
2026-09-14 12:07:45 +08:00
2026-09-11 12:03:51 +08:00
2026-09-19 12:03:34 +08:00
2026-09-03 12:09:12 +08:00
2026-09-14 16:21:27 +08:00
2026-09-12 23:13:48 +08:00
2026-09-03 21:10:48 +08:00
2026-09-14 16:21:27 +08:00
2026-09-14 08:17:23 +08:00
2026-09-25 04:45:44 +08:00
2026-09-14 23:18:12 +08:00
2026-09-11 22:28:47 +08:00
2026-09-12 23:13:48 +08:00
2026-09-04 23:52:52 +08:00
2026-09-08 19:16:35 +08:00
2026-09-03 12:09:12 +08:00
2026-09-11 12:03:51 +08:00
2026-09-11 22:12:01 +08:00
2026-09-04 21:39:50 +08:00
2026-09-11 10:44:18 +08:00
2026-09-02 20:28:19 +08:00