From b01c5ebdc7f638fb7c9c6403f6c9e0c6d95d7a9a Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Thu, 17 Sep 2026 16:26:00 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B8=85=E7=90=86=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=99=A8=E6=B3=A8=E9=87=8A=E7=9A=84=E6=A1=A3?= =?UTF-8?q?=E4=BD=8D=E4=B8=8E=E5=8F=A3=E5=BE=84=E6=8E=AA=E8=BE=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_test262/src/config.rs | 4 ++-- crates/oxide_test262/src/discovery.rs | 20 ++++++++++---------- crates/oxide_test262/src/judge.rs | 4 ++-- crates/oxide_test262/src/report.rs | 4 ++-- crates/oxide_test262/src/stats.rs | 5 ++--- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/crates/oxide_test262/src/config.rs b/crates/oxide_test262/src/config.rs index a72939d0..ff086333 100644 --- a/crates/oxide_test262/src/config.rs +++ b/crates/oxide_test262/src/config.rs @@ -12,9 +12,9 @@ pub(crate) struct RunConfig { pub(crate) supervise: bool, pub(crate) leak_check: bool, pub(crate) leak_check_interval: usize, - /// 关闭 liveness/精确 DCE/RegAlloc 链(on/off 对比基础设施)。 + /// 关闭 liveness/精确 DCE/RegAlloc 链(开关对比:关优化链 vs 开优化链各跑一遍)。 pub(crate) no_regalloc: bool, - /// 逐测试打印 PASS/FAIL/SKIP(on/off 结果集合对比用)。 + /// 逐测试打印 PASS/FAIL/SKIP(开关对比时对比两轮结果集合用)。 pub(crate) verbose: bool, /// 汇总尾部不打印 FAIL 清单。 pub(crate) no_fail_list: bool, diff --git a/crates/oxide_test262/src/discovery.rs b/crates/oxide_test262/src/discovery.rs index 15010ec5..58610432 100644 --- a/crates/oxide_test262/src/discovery.rs +++ b/crates/oxide_test262/src/discovery.rs @@ -49,7 +49,7 @@ pub(crate) fn is_skipped(meta: &TestMeta) -> Option { None } -/// eval 相关子族精确排除(档 1+2 后): +/// eval 相关子族精确排除: /// built-ins/eval 与 eval-code 的完成值/解析失败/非字符串/this-value-global/间接环境族放行; /// 仅排除确定失败的 arguments/super/strict/块声明 等子族。 pub(crate) fn eval_family_excluded(path: &str) -> Option<&'static str> { @@ -58,28 +58,28 @@ pub(crate) fn eval_family_excluded(path: &str) -> Option<&'static str> { } let is_direct = path.contains("eval-code/direct/"); let common = [ - "declare-arguments", // 直接 eval 的 arguments 语义族(档 3) - "this-value-func", // 调用者 this 传递(档 3) - "new.target", // new.target 语义(档 3) - "strict-caller", // 严格调用者传播(档 3) + "declare-arguments", // 直接 eval 的 arguments 语义族 + "this-value-func", // 调用者 this 传递 + "new.target", // new.target 语义 + "strict-caller", // 严格调用者传播 "strict-source", "strictness-override", // 直接 eval 严格性覆盖 "onlystrict", // onlyStrict 块声明族 - "always-non-strict", // 依赖隐式全局写同步(既有债务) + "always-non-strict", // 依赖隐式全局写同步,引擎尚未实现 "block-decl", // 块级函数声明(Annex B 严格变体) "switch-case-decl", "switch-dflt-decl", ]; if common.iter().any(|s| path.contains(s)) { - return Some("eval 子族未实现(档 1-2 边界)"); + return Some("eval 子族未实现"); } if is_direct { - // 直接 eval:调用者作用域交互族(函数上下文 var/let + super 方法上下文),档 3 前失败 + // 直接 eval:调用者作用域交互族(函数上下文 var/let + super 方法上下文) if ["var-env-", "lex-env-", "super-prop", "super-call-arrow", "super-call-method"] .iter() .any(|s| path.contains(s)) { - return Some("直接 eval 作用域族未实现(档 3)"); + return Some("直接 eval 作用域族未实现"); } } else if [ "super-", @@ -96,7 +96,7 @@ pub(crate) fn eval_family_excluded(path: &str) -> Option<&'static str> { None } -/// 确定性 pre-existing 失败白名单:引擎既有语义债务(非近期改动引入), +/// 确定性失败白名单:引擎尚未实现该语义的测试集, /// 修复前归入 skip 以免噪音掩盖真实回归;对应缺口修好后移出本列表。 pub(crate) fn pre_existing_excluded(path: &str) -> Option<&'static str> { const LIST: &[(&str, &str)] = &[ diff --git a/crates/oxide_test262/src/judge.rs b/crates/oxide_test262/src/judge.rs index dd170579..d2958971 100644 --- a/crates/oxide_test262/src/judge.rs +++ b/crates/oxide_test262/src/judge.rs @@ -233,7 +233,7 @@ fn classify_vm_error(e: &str, neg: Option<&Negative>, no_skip: bool) -> TestOutc /// 把失败消息归类为可聚合的失败类别与 subkey,返回 `(category, subkey)`。 /// /// # 边界与前提 -/// - 类别大类名口径不变(心跳序列化 / 既有基线对比兼容);碎片桶 +/// - 类别大类名是心跳序列化格式与基线报告的契约键(改动会使旧心跳行对不上);碎片桶 /// (`compile: other` / `vm: other` / `other`)不再携带消息尾巴 /// (全文已在 FailRecord.message)。 /// - subkey 仅 `not callable`(调用点,提取失败归 `(none)`)与 @@ -447,7 +447,7 @@ mod tests { } } - /// categorize_fail 双返回:类别大类名口径不变(碎片桶去消息尾巴), + /// categorize_fail 双返回:类别大类名按心跳契约键命名(碎片桶去消息尾巴), /// subkey 仅 not callable / not defined 三类非空,IC_GET_PROP 独立成桶。 /// not defined 覆盖 `vm error: ` 生产形态(subkey 非空)与无前缀裸形态 /// (形态门:parse 出标识符才入桶);negative mismatch 形态归 other。 diff --git a/crates/oxide_test262/src/report.rs b/crates/oxide_test262/src/report.rs index 6b65b5ba..00d42d2b 100644 --- a/crates/oxide_test262/src/report.rs +++ b/crates/oxide_test262/src/report.rs @@ -34,8 +34,8 @@ pub fn escape_log_field(s: &str) -> String { s.replace(['\t', '\n', '\r'], " ") } -/// 原 print_fail_categories 的 String 版:类别计数降序;`vm: other`/`compile: other` -/// /`other` 碎片桶附带 ≤5 条样本(`路径 消息首行`)。空类别返回空串。 +/// 类别计数降序的打印版(返回 String,可单测);`vm: other`/`compile: other`/`other` +/// 碎片桶附带 ≤5 条样本(`路径 消息首行`)。空类别返回空串。 pub fn format_fail_categories(stats: &RunStats, paths: &[PathBuf]) -> String { if stats.fail_categories.is_empty() { return String::new(); diff --git a/crates/oxide_test262/src/stats.rs b/crates/oxide_test262/src/stats.rs index 9e0ec6b5..4869856c 100644 --- a/crates/oxide_test262/src/stats.rs +++ b/crates/oxide_test262/src/stats.rs @@ -17,9 +17,8 @@ pub(crate) struct RunStats { pub(crate) fail: usize, pub(crate) skip: usize, pub(crate) total_ms: u64, - pub(crate) fail_categories: HashMap, // 计数口径不变(兼容心跳序列化与既有基线对比) - // ↓ 新增 ↓ - pub(crate) categories: Vec, // 类别 id 表(FailRecord.category_id 索引) + pub(crate) fail_categories: HashMap, // 类别名是心跳序列化格式与基线报告的契约键,改动会使旧心跳行对不上 + pub(crate) categories: Vec, // 类别 id 表(FailRecord.category_id 索引) pub(crate) fail_records: Vec, pub(crate) fail_record_bytes: usize, // 累计 message 字节(OOM cap) // supervise 模式异常计数:spawn 失败 / try_wait 错误 / 心跳写失败(子进程侧