From 5f3e9757fe074f2a3fceadfed9bc442ce23c8b04 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 13 Jun 2026 07:30:30 +0800 Subject: [PATCH] Guard more interp staging paths --- text6.txt | 41 +++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 36 +++++++++++++++ .../tests/wasm/node/verify_interp_wasm.mjs | 45 +++++++++++++++++++ 3 files changed, 122 insertions(+) diff --git a/text6.txt b/text6.txt index 21048cf..b02bf11 100644 --- a/text6.txt +++ b/text6.txt @@ -286,3 +286,44 @@ wasm-port/tests/host/verify_host_smokes.sh coverage、且不依赖 HAL/task/tool DB/Python remap/user-M process 的 interp fixture 中, 再选择 2 到 3 个只需要 host/filesystem staging 对账的 case。不要推进 blocked runtime promotion,也不要扩展 browser full 159 sim-config inventory。 + +八、2026-06-13 继续执行记录:flowsnake/inside-corners staging path guard + +本批继续按“小批量 direct-file fixture staged path guard”推进,完成 3 个已有 +Node/browser coverage 的 interp fixture: + +- `flowsnake/flowsnake.ngc` +- `inside-corners/test.ngc` +- `inverse-time-with-comp/inverse.ngc` + +完成内容: + +- Node 侧为上述 3 个 fixture 增加 fixed `.ngc` manifest; +- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture + 精确对账; +- Node 侧检查 staged path 与 fixed manifest 一致; +- browser 侧增加 fixed-count 与 duplicate-free guard; +- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed + manifest 一致; +- browser 仍不依赖目录枚举。 + +已运行验证: + +```bash +git diff --check +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +wasm-port/tools/verify_vendor_sync.sh +wasm-port/tools/verify_no_standalone_cnc_semantics.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +结果:全部通过。 + +下一步建议: + +继续沿 interp direct-file coverage 向后补 guard,但优先选择短小、单文件、 +无 INI/工具表依赖的 case。下一批可考虑 `g33.1/g33.1.ngc`、`g6164/test.ngc`, +再搭配一个已明确 expected-error 或 direct-file loop case;如果 case 属于目录集合 +或带参数化循环,先检查是否已有固定 manifest 风格,避免扩大执行面。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 3122364..f2fd337 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -6638,6 +6638,18 @@ "flowsnake", "flowsnake.ngc", ); + const flowsnakeNgcFiles = [ + "flowsnake.ngc", + ]; + if (flowsnakeNgcFiles.length !== 1 || new Set(flowsnakeNgcFiles).size !== flowsnakeNgcFiles.length) { + throw new Error("browser_interp_flowsnake_fixture_coverage: list drift"); + } + const flowsnakeStagedNgcFiles = [ + flowsnakePath, + ].map((path) => path.replace("/work/browser-interp/flowsnake/", "")); + if (flowsnakeStagedNgcFiles.join(",") !== flowsnakeNgcFiles.join(",")) { + throw new Error("browser_interp_flowsnake_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_flowsnake", interp.runFile(flowsnakePath), @@ -6664,6 +6676,18 @@ "inside-corners", "test.ngc", ); + const insideCornersNgcFiles = [ + "test.ngc", + ]; + if (insideCornersNgcFiles.length !== 1 || new Set(insideCornersNgcFiles).size !== insideCornersNgcFiles.length) { + throw new Error("browser_interp_inside_corners_fixture_coverage: list drift"); + } + const insideCornersStagedNgcFiles = [ + insideCornersPath, + ].map((path) => path.replace("/work/browser-interp/inside-corners/", "")); + if (insideCornersStagedNgcFiles.join(",") !== insideCornersNgcFiles.join(",")) { + throw new Error("browser_interp_inside_corners_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_inside_corners", interp.runFile(insideCornersPath), @@ -6691,6 +6715,18 @@ "inverse-time-with-comp", "inverse.ngc", ); + const inverseTimeWithCompNgcFiles = [ + "inverse.ngc", + ]; + if (inverseTimeWithCompNgcFiles.length !== 1 || new Set(inverseTimeWithCompNgcFiles).size !== inverseTimeWithCompNgcFiles.length) { + throw new Error("browser_interp_inverse_time_with_comp_fixture_coverage: list drift"); + } + const inverseTimeWithCompStagedNgcFiles = [ + inverseTimeWithCompPath, + ].map((path) => path.replace("/work/browser-interp/inverse-time-with-comp/", "")); + if (inverseTimeWithCompStagedNgcFiles.join(",") !== inverseTimeWithCompNgcFiles.join(",")) { + throw new Error("browser_interp_inverse_time_with_comp_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_inverse_time_with_comp", interp.runFile(inverseTimeWithCompPath), diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 377f054..af12d58 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -1579,6 +1579,21 @@ verifyExpectedOutput( ); const flowsnakePath = writeInterpRegressionFile("flowsnake", "flowsnake.ngc"); +const flowsnakeNgcFiles = [ + "flowsnake.ngc", +]; +assert.deepEqual( + flowsnakeNgcFiles, + interpRegressionNgcFilesRecursive("flowsnake"), + "interp flowsnake fixture coverage drift", +); +assert.deepEqual( + [ + flowsnakePath, + ], + flowsnakeNgcFiles.map((file) => `/work/interp/flowsnake/${file}`), + "interp flowsnake staging manifest drift", +); verifyExpectedOutput( "interp_flowsnake_wasm", interp.runFile(flowsnakePath), @@ -1601,6 +1616,21 @@ verifyExpectedOutput( ); const insideCornersPath = writeInterpRegressionFile("inside-corners", "test.ngc"); +const insideCornersNgcFiles = [ + "test.ngc", +]; +assert.deepEqual( + insideCornersNgcFiles, + interpRegressionNgcFilesRecursive("inside-corners"), + "interp inside-corners fixture coverage drift", +); +assert.deepEqual( + [ + insideCornersPath, + ], + insideCornersNgcFiles.map((file) => `/work/interp/inside-corners/${file}`), + "interp inside-corners staging manifest drift", +); verifyExpectedOutput( "interp_inside_corners_wasm", interp.runFile(insideCornersPath), @@ -1627,6 +1657,21 @@ const inverseTimeWithCompPath = writeInterpRegressionFile( "inverse-time-with-comp", "inverse.ngc", ); +const inverseTimeWithCompNgcFiles = [ + "inverse.ngc", +]; +assert.deepEqual( + inverseTimeWithCompNgcFiles, + interpRegressionNgcFilesRecursive("inverse-time-with-comp"), + "interp inverse-time-with-comp fixture coverage drift", +); +assert.deepEqual( + [ + inverseTimeWithCompPath, + ], + inverseTimeWithCompNgcFiles.map((file) => `/work/interp/inverse-time-with-comp/${file}`), + "interp inverse-time-with-comp staging manifest drift", +); verifyExpectedOutput( "interp_inverse_time_with_comp_wasm", interp.runFile(inverseTimeWithCompPath),