-
Notifications
You must be signed in to change notification settings - Fork 0
Testing
shinyashen edited this page Sep 17, 2026
·
10 revisions
English | 中文
268 项测试全绿(gradlew build 内置 JUnit5,测试源集以 JDK 17 工具链编译,不进发布 jar)。本页讲测试怎么组织、为什么这么组织。
移植的正确性不靠"看起来对",靠与上游语义逐条对拍:
-
参考套件驱动能力面:TB-ThirdParty 的 Thunderbolt 参考套件(12 族场景 × 3 库存模式 MISSING/MINIMUM/UNBOUNDED)是能力面基准。1.21 概念按真实 1.12 样板形状翻译:催化剂(
returned)→ 等量同键副产物;耐久(finiteUse)族已随耐久摊销移除(见差异与路线);宿主复用库存(returnedFrom)→ 槽位替换变体 + 宿主池并入库存。 - 上游可移植测试族全部落地:断言与源语义逐条对拍,不是形似而是神似。
- 暴露即钉死:对拍暴露的每个引擎语义缺口,修复后都转化为回归测试,防止退化。
- 判定批量门:参考套件里凡规划器判"可执行"的计划,必须在忠实 CPU 模拟器上完整交付;确实不可避免的引擎分歧逐项列在豁免表并附源码行号依据,豁免之外出现停摆即测试失败。每个场景用独立的规划器实例,且 runner 超时(1s 死线,结果不可判)时跳过判定——被放弃的工作线程的迟到结果不许污染判定读取。计划的任务序按样板依赖图拓扑构造(P0):折叠环保持探针验证过的执行顺序(环断在垫资边);对精确计划任何拓扑序都能完成——死锁需要相互等待的环,贪心抽取只会推迟消费方一轮、不会锁死——因此判定门降级为兜底断言,唯一因执行序停摆的豁免项(single-dag/fibonacci/unbounded)已随构造序移出豁免表,豁免表剩 5 项。fuzzy/variant-route 曾有的两例 FALSE_POSITIVE(宿主变体路由)也已按 1.12 真实形状解决:宿主复用工具的样板翻译为通配耐久合成配方(替代开关开启,CPU 的合成替代分支原生执行变体顶替)——2026-09-17 起套件 36/36 全 SUPPORTED、零超时零豁免分歧。超过 200 万次合成的大计划跳过兜底复跑(避免占用服务端线程),按构造序信任。
36/36 全 SUPPORTED(含上游自 v1.9.6 起唯一遗留 FALSE_POSITIVE 的零缺口关闭)+ 边界 38/38 feasible 断言,连续多次全新 JVM 运行零波动。
| 测试族 | 例数 | 覆盖 |
|---|---|---|
| VmSemanticsTest / VmSemantics2Test | 13 | 标志物种子、放大器净增修正(无种子恰报缺 1)、催化剂 working-capital、子项库存感知、换算环守恒、短缺报量、11 级斐波那契、JIT 跨请求复用、自增长剪枝、数量 1 边界、FUZZY_SLOT、处理配方默认模糊(耐久闭式测试已随摊销移除) |
| 能力总闸套件(Reference + Boundary) | 36 + 38 | 参考套件场景全 SUPPORTED(耐久族已移除);数量边界、模糊主产物 × 白/灰/无变体库存、深链中段库存、可合成流体部分库存 |
| CrossRequestCacheTest | 11 | 同 VM 跨请求确定性矩阵(相同请求/缺额分支/多步库存消耗/数量变化/深链/菱形/双 VM 隔离/冷热等价/空库存重捕/24 级 10^9 深链可合成项绝不报缺) |
| 递归与环族 | 15 | RecursionReference 6 + CatalystFeedbackLoop 6(lossy 恰报缺 2)+ 换算环、自增长 |
| 模糊族 | 13 | v1.10.5 精确槽 vs 替换槽需求分离、替换组注册语义、可合成子项部分库存仍排程、NBT 变体 usedItems |
| JIT / 复用 / 计划门控 | 10 | JitReuseTest 4 + PlanReuseGuardTest 3(库存复核纯函数 + 版本失效)+ ScaledUnwrapTest 2 + 生命周期 4 中重叠部分 |
| 任务序构造(TaskOrderingTest) | 8 | DAG 生产者先行、环单元保持探针执行序、桥接样板并入 SCC、自环惰性、计数保留、构造确定性 |
| 死环预剪 | 10 | 互环判定、自环恒剪、种子环保留、外部输入供环、兄弟候选不供环、副产物产入供环、深链非环、剪除保留健康候选、全剪回退、端到端健康路径 |
| 边界族 | 42+2+2 等 | 库存感知子样板 off-by-one 矩阵(42 参数化)、可合成流体最后一份送达(35 参数化)、流体桶边界、x1/x2 边界、多样板求解回归 5、部分库存链 3(GAP-2 备查) |
| 流体兼容面 | 8 | 以真实 AE2 Fluid Craft Rework 类为对象(纯 JVM 手工填充 ObjectHolder):drop NBT 身份与 mB 承载、long 数量解码、包键编码与超量拒绝、编译期规范化、真实物品键全链路 |
| VMTest / PerfReportTest | 6 + 5 | 字节码 Builder / CALL_BY_KEY / 请求包裹 / DIV_ROUNDUP 单元;性能 informational(见性能页) |
-
纯 JVM 无 bootstrap:
IAEItemStackfake、槽位级替换配方 fake、沙盒 fake(非破坏性网络视图 + 类型精确插入缓存,与生产NetworkCraftingSandbox同语义)——不需要启动 Minecraft; - vendor planner:TB-ThirdParty 的纯 Java 规划器(23 文件)vendor 进测试源集,作为参考对拍基线(Thunderbolt-Core 运行时在 1.12 无法运行,见差异说明);
- TraceSimulationState:逐场景决策链追踪工具,求解器行为的 X 光机。
- 自返回催化剂种子可被模式自身副产物"自满足" → 种子提取移至本 bundle 副产物插入之前;
- 精确槽位的处理默认模糊误吞跨物品替换组 → 拆分
nbtFamilyOf与fuzzyFamilyOf; - 无 IGrid 句柄时启动库存快照缺替换组/NBT 变体 →
snapshotExecuteStartStock扩展枚举; - 新样板注册被过期 bundle 挡住(上游 PatternRefreshReuse 的 1.12 等价物)→ bundle 复合键 + missingSubKeys;
- "算缺→补料→重算"回放过期缺口 → shortfallRetryable;
- 模糊槽可合成替换不排程 → resolve 层 T2.5 可制造变体解析。
相关链接