Guard g10 directory staging
This commit is contained in:
47
text6.txt
47
text6.txt
@@ -1385,3 +1385,50 @@ wasm-port/tests/host/verify_host_smokes.sh
|
|||||||
建议先处理 `g10`,因为 fixed manifest 已存在,当前只需把 initial/final aggregate
|
建议先处理 `g10`,因为 fixed manifest 已存在,当前只需把 initial/final aggregate
|
||||||
path guard 拆到每个 `writeG10RegressionFiles(...)` 调用附近。继续避免 blocked
|
path guard 拆到每个 `writeG10RegressionFiles(...)` 调用附近。继续避免 blocked
|
||||||
runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
|
runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
|
||||||
|
|
||||||
|
三十三、2026-06-13 继续执行记录:g10 directory staging guard
|
||||||
|
|
||||||
|
本批处理 `g10` initial/final aggregate staged path guard,将其拆到每个
|
||||||
|
`writeG10RegressionFiles(...)` 调用附近。
|
||||||
|
|
||||||
|
完成内容:
|
||||||
|
|
||||||
|
- Node 侧新增 `assertG10RegressionStaging(...)`;
|
||||||
|
- Node 侧对每个 g10 fixture 目录的 vendored `.ngc/.tbl` 文件清单与 fixed manifest
|
||||||
|
精确对账;
|
||||||
|
- Node 侧检查 staged path 与 `/work/interp/g10/<name>/...` fixed manifest 一致;
|
||||||
|
- Node 侧移除 `g10` initial/final aggregate staged path guard;
|
||||||
|
- browser 侧新增同名 helper,检查 fixed manifest duplicate-free;
|
||||||
|
- browser 侧检查 staged path 去掉 `/work/browser-interp/g10/<name>/` 前缀后与 fixed
|
||||||
|
manifest 一致;
|
||||||
|
- browser 侧移除 `g10` initial/final aggregate staged path guard,仍不枚举目录;
|
||||||
|
- 仅整理 host/filesystem staging guard,不改变 G10、G92 或 tool table 语义。
|
||||||
|
|
||||||
|
已运行验证:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
结果:全部通过。
|
||||||
|
|
||||||
|
下一步建议:
|
||||||
|
|
||||||
|
继续收敛 earlier direct-file guard。优先候选:
|
||||||
|
|
||||||
|
- `do-while-break`
|
||||||
|
- `oword-bug315`
|
||||||
|
- `oword-bug315-p2`
|
||||||
|
- `exists`
|
||||||
|
- `return-value`
|
||||||
|
|
||||||
|
这些已有 Node/browser coverage 和 fixed `.ngc` manifest,适合逐步复用
|
||||||
|
`assertInterpRegressionFileStaging(...)` 或小型 per-directory helper 替换内联 staged
|
||||||
|
path 对账。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC
|
||||||
|
语义实现。
|
||||||
|
|||||||
@@ -4755,6 +4755,16 @@
|
|||||||
return wasmDir;
|
return wasmDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function assertG10RegressionStaging(name, files, wasmDir) {
|
||||||
|
if (files.length === 0 || new Set(files).size !== files.length) {
|
||||||
|
throw new Error(`browser_interp_g10_${name}_fixture_coverage: list drift`);
|
||||||
|
}
|
||||||
|
const g10StagedRelativeFiles = files.map((file) => `${wasmDir}/${file}`.replace(`/work/browser-interp/g10/${name}/`, ""));
|
||||||
|
if (g10StagedRelativeFiles.join(",") !== files.join(",")) {
|
||||||
|
throw new Error(`browser_interp_g10_${name}_staging_manifest: list drift`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function runVendorNcFile(interp, filename) {
|
async function runVendorNcFile(interp, filename) {
|
||||||
const wasmPath = `/work/browser-nc-files/${filename}`;
|
const wasmPath = `/work/browser-nc-files/${filename}`;
|
||||||
await writeFetchedTextFile(
|
await writeFetchedTextFile(
|
||||||
@@ -8439,6 +8449,7 @@
|
|||||||
"test.ngc",
|
"test.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
]);
|
]);
|
||||||
|
assertG10RegressionStaging("g10-l1-l10", ["test.ngc", "test.tbl"], g10L1L10Dir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_g10_l1_l10",
|
"browser_interp_g10_l1_l10",
|
||||||
interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`),
|
interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`),
|
||||||
@@ -8461,6 +8472,7 @@
|
|||||||
"test.ngc",
|
"test.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
]);
|
]);
|
||||||
|
assertG10RegressionStaging("g10-l11", ["test.ngc", "test.tbl"], g10L11Dir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_g10_l11",
|
"browser_interp_g10_l11",
|
||||||
interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`),
|
interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`),
|
||||||
@@ -8482,14 +8494,7 @@
|
|||||||
"g10-l2-while-active",
|
"g10-l2-while-active",
|
||||||
["test.ngc"],
|
["test.ngc"],
|
||||||
);
|
);
|
||||||
const g10InitialStagedNgcFiles = [
|
assertG10RegressionStaging("g10-l2-while-active", ["test.ngc"], g10L2WhileActiveDir);
|
||||||
`${g10L1L10Dir}/test.ngc`,
|
|
||||||
`${g10L11Dir}/test.ngc`,
|
|
||||||
`${g10L2WhileActiveDir}/test.ngc`,
|
|
||||||
].map((path) => path.replace("/work/browser-interp/g10/", ""));
|
|
||||||
if (g10InitialStagedNgcFiles.join(",") !== g10RegressionFiles.slice(0, 3).join(",")) {
|
|
||||||
throw new Error("browser_interp_g10_initial_staging_manifest: list drift");
|
|
||||||
}
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_g10_l2_while_active",
|
"browser_interp_g10_l2_while_active",
|
||||||
interp.runFile(`${g10L2WhileActiveDir}/test.ngc`),
|
interp.runFile(`${g10L2WhileActiveDir}/test.ngc`),
|
||||||
@@ -8512,6 +8517,7 @@
|
|||||||
"g10-l20-while-active",
|
"g10-l20-while-active",
|
||||||
["test.ngc"],
|
["test.ngc"],
|
||||||
);
|
);
|
||||||
|
assertG10RegressionStaging("g10-l20-while-active", ["test.ngc"], g10L20WhileActiveDir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_g10_l20_while_active",
|
"browser_interp_g10_l20_while_active",
|
||||||
interp.runFile(`${g10L20WhileActiveDir}/test.ngc`),
|
interp.runFile(`${g10L20WhileActiveDir}/test.ngc`),
|
||||||
@@ -8532,13 +8538,7 @@
|
|||||||
"test.ngc",
|
"test.ngc",
|
||||||
"test.tbl",
|
"test.tbl",
|
||||||
]);
|
]);
|
||||||
const g10FinalStagedNgcFiles = [
|
assertG10RegressionStaging("g10-with-g92", ["test.ngc", "test.tbl"], g10WithG92Dir);
|
||||||
`${g10L20WhileActiveDir}/test.ngc`,
|
|
||||||
`${g10WithG92Dir}/test.ngc`,
|
|
||||||
].map((path) => path.replace("/work/browser-interp/g10/", ""));
|
|
||||||
if (g10FinalStagedNgcFiles.join(",") !== g10RegressionFiles.slice(3, 5).join(",")) {
|
|
||||||
throw new Error("browser_interp_g10_final_staging_manifest: list drift");
|
|
||||||
}
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"browser_interp_g10_with_g92",
|
"browser_interp_g10_with_g92",
|
||||||
interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`),
|
interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`),
|
||||||
|
|||||||
@@ -405,6 +405,22 @@ function writeG10RegressionFiles(name, files) {
|
|||||||
return wasmDir;
|
return wasmDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function assertG10RegressionStaging(name, files, wasmDir) {
|
||||||
|
const sourceDir = resolve(rootDir, "vendor/linuxcnc/tests/interp/g10", name);
|
||||||
|
assert.deepEqual(
|
||||||
|
readdirSync(sourceDir)
|
||||||
|
.filter((filename) => filename.endsWith(".ngc") || filename.endsWith(".tbl"))
|
||||||
|
.sort(),
|
||||||
|
[...files].sort(),
|
||||||
|
`interp g10 ${name} fixture coverage drift`,
|
||||||
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
files.map((file) => `${wasmDir}/${file}`),
|
||||||
|
files.map((file) => `/work/interp/g10/${name}/${file}`),
|
||||||
|
`interp g10 ${name} staging manifest drift`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function writeUserMCodeFixture(name, code) {
|
function writeUserMCodeFixture(name, code) {
|
||||||
const wasmDir = `/work/user-m/${name}`;
|
const wasmDir = `/work/user-m/${name}`;
|
||||||
const iniPath = `${wasmDir}/test.ini`;
|
const iniPath = `${wasmDir}/test.ini`;
|
||||||
@@ -3396,6 +3412,7 @@ assert.deepEqual(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const g10L1L10Dir = writeG10RegressionFiles("g10-l1-l10", ["test.ngc", "test.tbl"]);
|
const g10L1L10Dir = writeG10RegressionFiles("g10-l1-l10", ["test.ngc", "test.tbl"]);
|
||||||
|
assertG10RegressionStaging("g10-l1-l10", ["test.ngc", "test.tbl"], g10L1L10Dir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_g10_l1_l10_wasm",
|
"interp_g10_l1_l10_wasm",
|
||||||
interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`),
|
interp.runFileWithIni(`${g10L1L10Dir}/test.ngc`, `${g10L1L10Dir}/test.ini`),
|
||||||
@@ -3415,6 +3432,7 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const g10L11Dir = writeG10RegressionFiles("g10-l11", ["test.ngc", "test.tbl"]);
|
const g10L11Dir = writeG10RegressionFiles("g10-l11", ["test.ngc", "test.tbl"]);
|
||||||
|
assertG10RegressionStaging("g10-l11", ["test.ngc", "test.tbl"], g10L11Dir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_g10_l11_wasm",
|
"interp_g10_l11_wasm",
|
||||||
interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`),
|
interp.runFileWithIni(`${g10L11Dir}/test.ngc`, `${g10L11Dir}/test.ini`),
|
||||||
@@ -3432,17 +3450,7 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const g10L2WhileActiveDir = writeG10RegressionFiles("g10-l2-while-active", ["test.ngc"]);
|
const g10L2WhileActiveDir = writeG10RegressionFiles("g10-l2-while-active", ["test.ngc"]);
|
||||||
assert.deepEqual(
|
assertG10RegressionStaging("g10-l2-while-active", ["test.ngc"], g10L2WhileActiveDir);
|
||||||
[
|
|
||||||
`${g10L1L10Dir}/test.ngc`,
|
|
||||||
`${g10L11Dir}/test.ngc`,
|
|
||||||
`${g10L2WhileActiveDir}/test.ngc`,
|
|
||||||
],
|
|
||||||
g10RegressionFiles
|
|
||||||
.slice(0, 3)
|
|
||||||
.map((file) => `/work/interp/g10/${file}`),
|
|
||||||
"interp g10 initial staging manifest drift",
|
|
||||||
);
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_g10_l2_while_active_wasm",
|
"interp_g10_l2_while_active_wasm",
|
||||||
interp.runFile(`${g10L2WhileActiveDir}/test.ngc`),
|
interp.runFile(`${g10L2WhileActiveDir}/test.ngc`),
|
||||||
@@ -3461,6 +3469,7 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const g10L20WhileActiveDir = writeG10RegressionFiles("g10-l20-while-active", ["test.ngc"]);
|
const g10L20WhileActiveDir = writeG10RegressionFiles("g10-l20-while-active", ["test.ngc"]);
|
||||||
|
assertG10RegressionStaging("g10-l20-while-active", ["test.ngc"], g10L20WhileActiveDir);
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_g10_l20_while_active_wasm",
|
"interp_g10_l20_while_active_wasm",
|
||||||
interp.runFile(`${g10L20WhileActiveDir}/test.ngc`),
|
interp.runFile(`${g10L20WhileActiveDir}/test.ngc`),
|
||||||
@@ -3478,16 +3487,7 @@ verifyExpectedOutput(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const g10WithG92Dir = writeG10RegressionFiles("g10-with-g92", ["test.ngc", "test.tbl"]);
|
const g10WithG92Dir = writeG10RegressionFiles("g10-with-g92", ["test.ngc", "test.tbl"]);
|
||||||
assert.deepEqual(
|
assertG10RegressionStaging("g10-with-g92", ["test.ngc", "test.tbl"], g10WithG92Dir);
|
||||||
[
|
|
||||||
`${g10L20WhileActiveDir}/test.ngc`,
|
|
||||||
`${g10WithG92Dir}/test.ngc`,
|
|
||||||
],
|
|
||||||
g10RegressionFiles
|
|
||||||
.slice(3, 5)
|
|
||||||
.map((file) => `/work/interp/g10/${file}`),
|
|
||||||
"interp g10 final staging manifest drift",
|
|
||||||
);
|
|
||||||
verifyExpectedOutput(
|
verifyExpectedOutput(
|
||||||
"interp_g10_with_g92_wasm",
|
"interp_g10_with_g92_wasm",
|
||||||
interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`),
|
interp.runFileWithIni(`${g10WithG92Dir}/test.ngc`, `${g10WithG92Dir}/test.ini`),
|
||||||
|
|||||||
Reference in New Issue
Block a user