@aster-cloud/aster-lang-ts 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/diagnostics/error_codes.d.ts +6 -1
- package/dist/src/diagnostics/error_codes.d.ts.map +1 -1
- package/dist/src/diagnostics/error_codes.js +39 -0
- package/dist/src/diagnostics/error_codes.js.map +1 -1
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mapping/pipeline.d.ts +87 -0
- package/dist/src/mapping/pipeline.d.ts.map +1 -0
- package/dist/src/mapping/pipeline.js +145 -0
- package/dist/src/mapping/pipeline.js.map +1 -0
- package/dist/src/mapping/quantity-ir.js +68 -5
- package/dist/src/mapping/quantity-ir.js.map +1 -1
- package/dist/src/mapping/review-queue.d.ts +92 -0
- package/dist/src/mapping/review-queue.d.ts.map +1 -0
- package/dist/src/mapping/review-queue.js +105 -0
- package/dist/src/mapping/review-queue.js.map +1 -0
- package/dist/test/unit/mapping/bridge-parity.test.d.ts +2 -0
- package/dist/test/unit/mapping/bridge-parity.test.d.ts.map +1 -0
- package/dist/test/unit/mapping/bridge-parity.test.js +74 -0
- package/dist/test/unit/mapping/bridge-parity.test.js.map +1 -0
- package/dist/test/unit/mapping/pipeline.test.d.ts +2 -0
- package/dist/test/unit/mapping/pipeline.test.d.ts.map +1 -0
- package/dist/test/unit/mapping/pipeline.test.js +108 -0
- package/dist/test/unit/mapping/pipeline.test.js.map +1 -0
- package/dist/test/unit/mapping/review-queue.test.d.ts +2 -0
- package/dist/test/unit/mapping/review-queue.test.d.ts.map +1 -0
- package/dist/test/unit/mapping/review-queue.test.js +112 -0
- package/dist/test/unit/mapping/review-queue.test.js.map +1 -0
- package/dist/test/unit/mapping/verdict-parity.test.d.ts +2 -0
- package/dist/test/unit/mapping/verdict-parity.test.d.ts.map +1 -0
- package/dist/test/unit/mapping/verdict-parity.test.js +85 -0
- package/dist/test/unit/mapping/verdict-parity.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { dirname, resolve } from 'node:path';
|
|
6
|
+
import { verifyMapping } from '../../../src/mapping/mapping-ir.js';
|
|
7
|
+
/**
|
|
8
|
+
* 双引擎 verifier 判定一致性(ADR 0037 §7)—— **TS 侧**。
|
|
9
|
+
*
|
|
10
|
+
* <h2>★§7 的要求是有区分的</h2>
|
|
11
|
+
*
|
|
12
|
+
* <pre>
|
|
13
|
+
* LLM 生成的 candidate → **不要求**一致
|
|
14
|
+
* Verifier 的结果 → **必须**一致
|
|
15
|
+
* </pre>
|
|
16
|
+
*
|
|
17
|
+
* 故本文件只钉 `verdict`,**不钉 `reason`**(后者含自然语言,两侧措辞允许不同)。
|
|
18
|
+
*
|
|
19
|
+
* <h2>语料是**共享**的</h2>
|
|
20
|
+
*
|
|
21
|
+
* 用例来自 `aster-lang-test/corpus/mapping-verdict/cases.json`,
|
|
22
|
+
* Java 侧 `MappingIrVerdictParityTest` 读**同一个文件**。
|
|
23
|
+
* ★这是"单源"——若两侧各抄一份,语料会各自漂移,而"一致性门禁"
|
|
24
|
+
* 本身就变成了两个互不相干的测试(本仓记过这个坑)。
|
|
25
|
+
*/
|
|
26
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
27
|
+
/**
|
|
28
|
+
* 共享语料路径。★**两种布局都要支持**:
|
|
29
|
+
*
|
|
30
|
+
* - **本地开发**:兄弟仓并列 → `<repo>/../aster-lang-test/...`
|
|
31
|
+
* - **CI**:`checkout-sibling` 用 `path: aster-lang-test` 把它检出到
|
|
32
|
+
* **工作区内** → `<repo>/aster-lang-test/...`
|
|
33
|
+
*
|
|
34
|
+
* ★路径从**编译产物** `dist/test/unit/mapping` 起算(不是源码目录)。
|
|
35
|
+
* 我第一版按源码目录数了 4 级、且只考虑了本地布局——前者当场红,
|
|
36
|
+
* 后者**本地通过但 CI 上必然失败**。路径类的东西必须实测,不能数目录。
|
|
37
|
+
*/
|
|
38
|
+
const CORPUS = (() => {
|
|
39
|
+
const rel = 'corpus/mapping-verdict/cases.json';
|
|
40
|
+
for (const base of [
|
|
41
|
+
resolve(HERE, '../../../../aster-lang-test'), // CI:检出到工作区内
|
|
42
|
+
resolve(HERE, '../../../../../aster-lang-test'), // 本地:兄弟仓并列
|
|
43
|
+
]) {
|
|
44
|
+
const p = resolve(base, rel);
|
|
45
|
+
if (existsSync(p))
|
|
46
|
+
return p;
|
|
47
|
+
}
|
|
48
|
+
// 都找不到时返回本地布局路径,让"语料必须存在"那条报出明确的缺失信息。
|
|
49
|
+
return resolve(HERE, '../../../../../aster-lang-test', rel);
|
|
50
|
+
})();
|
|
51
|
+
describe('双引擎 verifier 判定一致性 — TS 侧', () => {
|
|
52
|
+
it('★语料文件必须存在(缺失即门禁失效,不得静默跳过)', () => {
|
|
53
|
+
// ★若语料路径漂了而测试"跳过",这条门禁就会在无人察觉的情况下消失。
|
|
54
|
+
// 本仓记过「跳过看起来像通过」——此处显式断言存在性。
|
|
55
|
+
assert.ok(existsSync(CORPUS), `共享语料不存在:${CORPUS}\n`
|
|
56
|
+
+ '★这条门禁依赖 aster-lang-test 作为兄弟仓 checkout。'
|
|
57
|
+
+ '若路径变了必须同步修改两侧(Java 侧同名测试读同一文件)。');
|
|
58
|
+
});
|
|
59
|
+
it('★每条用例的判定必须与语料声明一致', () => {
|
|
60
|
+
const raw = JSON.parse(readFileSync(CORPUS, 'utf8'));
|
|
61
|
+
assert.ok(raw.cases.length >= 10, `语料用例过少(${raw.cases.length})——覆盖不了三种 verdict 的各种成因。`);
|
|
62
|
+
const seen = new Set();
|
|
63
|
+
for (const c of raw.cases) {
|
|
64
|
+
const node = c.node === null
|
|
65
|
+
? undefined
|
|
66
|
+
: {
|
|
67
|
+
kind: c.node.kind,
|
|
68
|
+
...(c.node.value === undefined ? {} : { value: c.node.value }),
|
|
69
|
+
...(c.node.name === undefined ? {} : { name: c.node.name }),
|
|
70
|
+
};
|
|
71
|
+
const r = verifyMapping(c.mapping, () => node);
|
|
72
|
+
assert.strictEqual(r.verdict, c.expect, `用例「${c.name}」判定不符。\n`
|
|
73
|
+
+ ` 期望 ${c.expect},实际 ${r.verdict}\n`
|
|
74
|
+
+ ` 理由:${r.reason}\n`
|
|
75
|
+
+ '★若 Java 侧同用例判定不同,即违反 ADR §7「Verifier 结果必须一致」。');
|
|
76
|
+
seen.add(r.verdict);
|
|
77
|
+
}
|
|
78
|
+
// ★反向守卫:三种 verdict 都必须被覆盖到,否则语料不足以证明一致性。
|
|
79
|
+
// 只覆盖 VERIFIED 的语料,挡不住"把所有输入都判 VERIFIED"这种实现。
|
|
80
|
+
for (const v of ['VERIFIED', 'REVIEW_REQUIRED', 'REJECTED']) {
|
|
81
|
+
assert.ok(seen.has(v), `语料未覆盖 ${v} —— 一致性门禁存在盲区。已覆盖:${[...seen].join(', ')}`);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=verdict-parity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict-parity.test.js","sourceRoot":"","sources":["../../../../test/unit/mapping/verdict-parity.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED