@aster-cloud/aster-lang-ts 1.0.26 → 1.0.27
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/browser.d.ts +1 -1
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +1 -1
- package/dist/src/browser.js.map +1 -1
- package/dist/src/core/index.d.ts +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -1
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/interpreter.d.ts +13 -0
- package/dist/src/core/interpreter.d.ts.map +1 -1
- package/dist/src/core/interpreter.js +277 -18
- package/dist/src/core/interpreter.js.map +1 -1
- package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
- package/dist/src/frontend/canonicalizer.js +6 -1
- package/dist/src/frontend/canonicalizer.js.map +1 -1
- package/dist/src/lower_to_core.js +30 -1
- package/dist/src/lower_to_core.js.map +1 -1
- package/dist/test/unit/builtin-arity.test.d.ts +2 -0
- package/dist/test/unit/builtin-arity.test.d.ts.map +1 -0
- package/dist/test/unit/builtin-arity.test.js +90 -0
- package/dist/test/unit/builtin-arity.test.js.map +1 -0
- package/dist/test/unit/canonicalizer/canonicalizer.test.js +23 -0
- package/dist/test/unit/canonicalizer/canonicalizer.test.js.map +1 -1
- package/dist/test/unit/ctor-call-form-lowering.test.d.ts +2 -0
- package/dist/test/unit/ctor-call-form-lowering.test.d.ts.map +1 -0
- package/dist/test/unit/ctor-call-form-lowering.test.js +78 -0
- package/dist/test/unit/ctor-call-form-lowering.test.js.map +1 -0
- package/dist/test/unit/guest-map-serialization.test.d.ts +2 -0
- package/dist/test/unit/guest-map-serialization.test.d.ts.map +1 -0
- package/dist/test/unit/guest-map-serialization.test.js +60 -0
- package/dist/test/unit/guest-map-serialization.test.js.map +1 -0
- package/dist/test/unit/map-type-guard.test.d.ts +2 -0
- package/dist/test/unit/map-type-guard.test.d.ts.map +1 -0
- package/dist/test/unit/map-type-guard.test.js +147 -0
- package/dist/test/unit/map-type-guard.test.js.map +1 -0
- package/dist/test/unit/maybe-isnone-semantics.test.d.ts +2 -0
- package/dist/test/unit/maybe-isnone-semantics.test.d.ts.map +1 -0
- package/dist/test/unit/maybe-isnone-semantics.test.js +74 -0
- package/dist/test/unit/maybe-isnone-semantics.test.js.map +1 -0
- package/dist/test/unit/maybe-map-type-guard.test.d.ts +2 -0
- package/dist/test/unit/maybe-map-type-guard.test.d.ts.map +1 -0
- package/dist/test/unit/maybe-map-type-guard.test.js +88 -0
- package/dist/test/unit/maybe-map-type-guard.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-arity.test.js","sourceRoot":"","sources":["../../../test/unit/builtin-arity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,29 @@ describe('canonicalizer', () => {
|
|
|
39
39
|
it('冠词后紧跟句末(无修饰名词)不应被吞', () => {
|
|
40
40
|
assert.strictEqual(canonicalize('Return a.'), 'Return a.');
|
|
41
41
|
});
|
|
42
|
+
// aster-lang-core#120:裸 `not equal to`(不带 `is`)是合法比较运算符,
|
|
43
|
+
// 但 follow-set 漏了 `not`,导致左操作数被当冠词删掉:
|
|
44
|
+
// `Return a not equal to b.` → `Return not equal to b.`
|
|
45
|
+
// 本引擎表现为编译失败;Java 侧更糟——编译通过且**恒返回 true**(`5 != 5` 得 true)。
|
|
46
|
+
//
|
|
47
|
+
// ★三个冠词逐一断言:正则用 `(a|an|the)` 交替,只测 `a` 会漏掉
|
|
48
|
+
// `an`/`the` 各自的词边界情况。
|
|
49
|
+
it('冠词作操作数后跟裸 not equal to 不应被吞(#120)', () => {
|
|
50
|
+
for (const art of ['a', 'an', 'the']) {
|
|
51
|
+
assert.strictEqual(canonicalize(`Return ${art} not equal to b.`), `Return ${art} not equal to b.`, `${art} 被当冠词吞掉了`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// 对照:`is not equal to` 本就正常(被已在列的 `is` 保护)。
|
|
55
|
+
// 锁住它,防止有人"简化"时把 `is` 从 follow-set 里去掉。
|
|
56
|
+
it('冠词作操作数后跟 is not equal to 保持正常', () => {
|
|
57
|
+
assert.strictEqual(canonicalize('Return a is not equal to b.'), 'Return a is not equal to b.');
|
|
58
|
+
});
|
|
59
|
+
// ★反向护栏:加 `not` 不能让**真冠词**逃过移除。
|
|
60
|
+
// `the not-yet-valid` 这类名词短语在 CNL 里不存在,但若将来出现,
|
|
61
|
+
// 这条会提醒改动者重新评估 follow-set 的边界。
|
|
62
|
+
it('真冠词后跟名词仍被移除(加 not 未放宽范围)', () => {
|
|
63
|
+
assert.strictEqual(canonicalize('define the function to return a value'), 'define function to return value');
|
|
64
|
+
});
|
|
42
65
|
it('行末孤立标识符(无句末点)不应被吞——\\n 锚点与 EOF', () => {
|
|
43
66
|
// 多行:a/the/an 在行末后跟 \n
|
|
44
67
|
assert.strictEqual(canonicalize('Let a be 1\nReturn a'), 'Let a be 1\nReturn a');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonicalizer.test.js","sourceRoot":"","sources":["../../../../test/unit/canonicalizer/canonicalizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAE9D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAElD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,MAAM,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;YAEpD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,2CAA2C;QAC3C,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,WAAW,CAChB,YAAY,CAAC,0BAA0B,CAAC,EACxC,0BAA0B,CAC3B,CAAC;YACF,MAAM,CAAC,WAAW,CAChB,YAAY,CAAC,8BAA8B,CAAC,EAC5C,8BAA8B,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACzE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAC/E,MAAM,CAAC,WAAW,CAChB,YAAY,CAAC,0DAA0D,CAAC,EACxE,0DAA0D,CAC3D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,uBAAuB;YACvB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACnF,+BAA+B;YAC/B,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,CAAC,WAAW,CAChB,YAAY,CAAC,uCAAuC,CAAC,EACrD,iCAAiC,CAClC,CAAC;YACF,4CAA4C;YAC5C,MAAM,CAAC,WAAW,CAChB,YAAY,CAAC,kDAAkD,CAAC,EAChE,0CAA0C,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,4CAA4C,CAAC;YAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,oEAAoE;YACpE,kDAAkD;YAClD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,KAAK,GAAG,iDAAiD,CAAC;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,8CAA8C;YAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iDAAiD,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClG,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,CAAC,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,KAAK,GAAG,6CAA6C,CAAC;YAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,KAAK,GAAG,yDAAyD,CAAC;YACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,2DAA2D,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,yDAAyD,CAAC;YACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzF,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,8BAA8B,CAAC;YAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1F,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,mCAAmC;YACnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/F,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,2CAA2C;YAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,sCAAsC,CAAC;YACrD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,+CAA+C,CAAC;YAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,KAAK,GAAG,0BAA0B,CAAC;YACzC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpB,MAAM,KAAK,GAAG,yDAAyD,CAAC;YACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,yDAAyD,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,0CAA0C,CAAC;YACzD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,oBAAoB,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC;YAChC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,sCAAsC,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC,IAAI,CAChH,MAAM,CACP,CAAC;YACF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnC,iCAAiC;YACjC,MAAM,CAAC,WAAW,CAChB,MAAM,EACN,CAAC,eAAe,EAAE,qCAAqC,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjG,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,qCAAqC;QACrC,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;YACnF,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,UAAU,CAAC,GAAG,EAAE;YACd,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,uBAAuB,EAAE,CAAC;YAC1B,kBAAkB,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE;gBAC3C,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE;gBAC3C,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,4CAA4C;YAC5C,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE;gBAC3C,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,oEAAoE;YACpE,mDAAmD;YACnD,sBAAsB;YACtB,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,kBAAkB;gBACtB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;gBACpF,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAChG,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,EAAE;aACf,CAAC;YACF,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,uBAAuB,EAAE,CAAC;YAC1B,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAErD,MAAM,SAAS,GAAG;gBAChB,0BAA0B;gBAC1B,iCAAiC;gBACjC,oDAAoD;gBACpD,wBAAwB;aACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,iBAAiB,GAAG;gBACxB,0BAA0B;gBAC1B,+BAA+B;gBAC/B,oDAAoD;gBACpD,sBAAsB;aACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE;gBACrC,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAE9C,4CAA4C;YAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,sBAAsB,EAAE;gBACjD,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,8CAA8C;YAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,eAAe,GAAG,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YACtE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YACtE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,6DAA6D;YAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,2DAA2D;YAC3D,6CAA6C;YAC7C,MAAM,CAAC,EAAE,CACP,YAAY,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAClE,gBAAgB,CACjB,CAAC;YACF,MAAM,CAAC,EAAE,CACP,YAAY,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC5D,aAAa,CACd,CAAC;YACF,iCAAiC;YACjC,MAAM,CAAC,EAAE,CACP,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnD,wBAAwB,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"canonicalizer.test.js","sourceRoot":"","sources":["../../../../test/unit/canonicalizer/canonicalizer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctor-call-form-lowering.test.d.ts","sourceRoot":"","sources":["../../../test/unit/ctor-call-form-lowering.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { compile, evaluate, EN_US, initializeAllBundledLexicons } from '../../src/browser.js';
|
|
4
|
+
// 内置变体调用形式的降级归一(aster-lang-ts#124)。
|
|
5
|
+
//
|
|
6
|
+
// `Some(x)` / `Ok(x)` / `Err(x)` / `None()` 与关键字形式 `some of x` 必须降到
|
|
7
|
+
// **完全相同**的 Core IR 节点。此前只有关键字形式产出 Expr.Some,调用形式一路
|
|
8
|
+
// 保留成 Call{Name 'Some'},靠解释器在求值期特判兜底——单跑 TS 没问题,但把
|
|
9
|
+
// 这样的 IR 交给 JVM 引擎就炸(truffle 期望独立 Some 节点,只认 Call 会报
|
|
10
|
+
// `Unknown call target: Some`)。即两引擎各自都"能跑",唯独跨引擎喂 IR 不通。
|
|
11
|
+
//
|
|
12
|
+
// Java 侧在 parse 期就归一(AstBuilder 对 Ok/Err/Some/None 调用形式特判),
|
|
13
|
+
// 故其 IR 里始终是独立节点。本次在 lower 期补上同一步。
|
|
14
|
+
//
|
|
15
|
+
// 跨引擎那一半由 aster-lang-truffle 的 StdlibHofProbeTest#ctorCallFormCrossEngine
|
|
16
|
+
// 锁住(fixture 由本引擎产出,JVM 执行得 42)。
|
|
17
|
+
initializeAllBundledLexicons();
|
|
18
|
+
/** 编译并返回 Core IR(去掉 origin,便于比较两种写法是否等价)。 */
|
|
19
|
+
function ir(body) {
|
|
20
|
+
const c = compile(`Module p.\n\n${body}\n`, { lexicon: EN_US });
|
|
21
|
+
assert.ok(c.success && c.core, `compile 失败: ${JSON.stringify(c.parseErrors ?? [])}`);
|
|
22
|
+
return JSON.stringify(c.core, (k, v) => (k === 'origin' ? undefined : v));
|
|
23
|
+
}
|
|
24
|
+
/** 编译并求值。 */
|
|
25
|
+
function run(body, fn = 'f') {
|
|
26
|
+
const c = compile(`Module p.\n\n${body}\n`, { lexicon: EN_US });
|
|
27
|
+
assert.ok(c.success && c.core, `compile 失败: ${JSON.stringify(c.parseErrors ?? [])}`);
|
|
28
|
+
const out = evaluate(c.core, fn, {});
|
|
29
|
+
assert.ok(out.success, `求值失败: ${out.error}`);
|
|
30
|
+
return out.value;
|
|
31
|
+
}
|
|
32
|
+
describe('内置变体调用形式降级归一', () => {
|
|
33
|
+
// 核心不变式:调用形式与关键字形式产出**逐字节相同**的 IR。
|
|
34
|
+
// 这正是 ADR 0027「等价 fn(arg)」不变式对内置变体的要求。
|
|
35
|
+
it('Some(x) 与 some of x 产出相同 IR', () => {
|
|
36
|
+
assert.equal(ir('Rule f produce Int:\n Return Maybe.withDefault(Some(21), 0).'), ir('Rule f produce Int:\n Return Maybe.withDefault(Some of 21, 0).'));
|
|
37
|
+
});
|
|
38
|
+
it('Ok(x) 与 ok of x 产出相同 IR', () => {
|
|
39
|
+
assert.equal(ir('Rule f produce Int:\n Return Result.unwrap(Ok(5)).'), ir('Rule f produce Int:\n Return Result.unwrap(Ok of 5).'));
|
|
40
|
+
});
|
|
41
|
+
it('Err(x) 与 err of x 产出相同 IR', () => {
|
|
42
|
+
assert.equal(ir('Rule f produce Int:\n Return Result.unwrapErr(Err(7)).'), ir('Rule f produce Int:\n Return Result.unwrapErr(Err of 7).'));
|
|
43
|
+
});
|
|
44
|
+
// ★这几条是跨引擎可移植性的直接判据:IR 里必须是独立节点而非 Call。
|
|
45
|
+
// 只断言"求值结果对"锁不住——修复前求值同样是对的(解释器特判兜底),
|
|
46
|
+
// 炸的是把 IR 交给 JVM 的时候。
|
|
47
|
+
it('调用形式在 IR 里产出独立节点而非 Call', () => {
|
|
48
|
+
for (const [expr, kind] of [
|
|
49
|
+
['Maybe.withDefault(Some(1), 0)', 'Some'],
|
|
50
|
+
['Result.unwrap(Ok(1))', 'Ok'],
|
|
51
|
+
['Result.unwrapErr(Err(1))', 'Err'],
|
|
52
|
+
]) {
|
|
53
|
+
const json = ir(`Rule f produce Int:\n Return ${expr}.`);
|
|
54
|
+
assert.match(json, new RegExp(`"kind":"${kind}"`), `${expr} 应产出独立 ${kind} 节点`);
|
|
55
|
+
assert.doesNotMatch(json, new RegExp(`"kind":"Call","target":\\{"kind":"Name","name":"${kind}"`), `${expr} 不应残留 Call{Name '${kind}'}——那种 IR 在 JVM 引擎上会报 Unknown call target`);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
it('语义不变:两种写法求值结果一致', () => {
|
|
59
|
+
assert.equal(run('Rule f produce Int:\n Return Maybe.withDefault(Some(21), 0).'), 21);
|
|
60
|
+
assert.equal(run('Rule f produce Int:\n Return Maybe.withDefault(Some of 21, 0).'), 21);
|
|
61
|
+
assert.equal(run('Rule f produce Int:\n Return Result.unwrap(Ok(5)).'), 5);
|
|
62
|
+
assert.equal(run('Rule f produce Int:\n Return Maybe.withDefault(None, 0).'), 0);
|
|
63
|
+
});
|
|
64
|
+
// 归一只在 arity 匹配时生效(Some/Ok/Err 恰 1 参、None 恰 0 参),
|
|
65
|
+
// 与 Java AstBuilder 的特判条件一致;不匹配的仍降级为普通 Call,
|
|
66
|
+
// 交由后续「未定义函数」逻辑处理,而不是被硬塞成内置变体。
|
|
67
|
+
//
|
|
68
|
+
// 注:这里不能用「用户自定义同名规则」来测——`Some` 是关键字,
|
|
69
|
+
// `Rule Some ...` 在 parser 阶段就报 Expected identifier,走不到降级。
|
|
70
|
+
it('不误伤:arity 不匹配时仍降级为普通 Call', () => {
|
|
71
|
+
for (const expr of ['Some(1, 2)', 'Some()']) {
|
|
72
|
+
const json = ir(`Rule f produce Int:\n Return ${expr}.`);
|
|
73
|
+
assert.match(json, /"kind":"Call","target":\{"kind":"Name","name":"Some"/, `${expr} 的 arity 与内置变体不符,应保留成普通 Call`);
|
|
74
|
+
assert.doesNotMatch(json, /"kind":"Some"/, `${expr} 不应被归一成 Some 节点`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=ctor-call-form-lowering.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctor-call-form-lowering.test.js","sourceRoot":"","sources":["../../../test/unit/ctor-call-form-lowering.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-map-serialization.test.d.ts","sourceRoot":"","sources":["../../../test/unit/guest-map-serialization.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { compile } from '../../src/browser.js';
|
|
4
|
+
import { evaluate, serializeGuestValue } from '../../src/core/interpreter.js';
|
|
5
|
+
// 审计 #126 回归测试:GuestMap 宿主边界。
|
|
6
|
+
// JSON.stringify 会把普通对象的整数样式键升序重排(JS 自有属性规范),guest map 的
|
|
7
|
+
// 插入序在 toJSON 的对象形态里必然丢失 —— 与 JVM 引擎(Jackson 序列化 LinkedHashMap,
|
|
8
|
+
// 插入序)字节不一致。serializeGuestValue 手写 JSON 对象语法按插入序发射(合法 JSON),
|
|
9
|
+
// dual-engine runner 的 value 字段用它。toObject() 给按普通对象读取的宿主一个非空快照。
|
|
10
|
+
function evalMap(body) {
|
|
11
|
+
const c = compile(`Module probe.\n\n${body}\n`);
|
|
12
|
+
assert.ok(c.core, `compile failed: ${JSON.stringify(c.parseErrors?.map((e) => e.message) ?? [])}`);
|
|
13
|
+
const ev = evaluate(c.core, 'f', {});
|
|
14
|
+
assert.equal(ev.success, true, `eval: ${ev.error ?? ''}`);
|
|
15
|
+
return ev.value;
|
|
16
|
+
}
|
|
17
|
+
const NUMERIC_KEYED = 'Rule f:\n Return Map.put(Map.put(Map.empty(), "2", 20), "1", 10).';
|
|
18
|
+
describe('audit #126: GuestMap host-boundary serialization', () => {
|
|
19
|
+
it('serializeGuestValue preserves numeric-like key insertion order (JVM byte parity)', () => {
|
|
20
|
+
const v = evalMap(NUMERIC_KEYED);
|
|
21
|
+
// 插入序 2 → 1;JVM LinkedHashMap+Jackson 输出 {"2":20,"1":10}
|
|
22
|
+
assert.equal(serializeGuestValue(v), '{"2":20,"1":10}');
|
|
23
|
+
// 对照:JSON.stringify(toJSON 对象形态)不可避免地重排 —— 记录这一已知限制,
|
|
24
|
+
// 若未来 JS 规范或实现变化使其保持插入序,此断言提醒我们可以简化。
|
|
25
|
+
assert.equal(JSON.stringify(v), '{"1":10,"2":20}');
|
|
26
|
+
});
|
|
27
|
+
it('serializeGuestValue recurses through lists and struct objects', () => {
|
|
28
|
+
const v = evalMap('Rule f:\n Let inner be Map.put(Map.put(Map.empty(), "10", 1), "2", 2).\n Return List.append(List.append(List.empty(), inner), 7).');
|
|
29
|
+
assert.equal(serializeGuestValue(v), '[{"10":1,"2":2},7]');
|
|
30
|
+
});
|
|
31
|
+
it('serializeGuestValue output is valid JSON that round-trips', () => {
|
|
32
|
+
const v = evalMap(NUMERIC_KEYED);
|
|
33
|
+
const parsed = JSON.parse(serializeGuestValue(v));
|
|
34
|
+
assert.deepEqual(parsed, { '1': 10, '2': 20 });
|
|
35
|
+
});
|
|
36
|
+
it('serializeGuestValue escapes keys and string values', () => {
|
|
37
|
+
const v = evalMap('Rule f:\n Return Map.put(Map.empty(), "a\\"b", "x\\"y").');
|
|
38
|
+
const s = serializeGuestValue(v);
|
|
39
|
+
assert.equal(s, '{"a\\"b":"x\\"y"}');
|
|
40
|
+
assert.deepEqual(JSON.parse(s), { 'a"b': 'x"y' });
|
|
41
|
+
});
|
|
42
|
+
it('serializeGuestValue handles primitives, null and top-level undefined', () => {
|
|
43
|
+
assert.equal(serializeGuestValue(42), '42');
|
|
44
|
+
assert.equal(serializeGuestValue('hi'), '"hi"');
|
|
45
|
+
assert.equal(serializeGuestValue(null), 'null');
|
|
46
|
+
assert.equal(serializeGuestValue(undefined), 'null');
|
|
47
|
+
});
|
|
48
|
+
it('toObject() gives hosts a usable, non-empty plain-object snapshot', () => {
|
|
49
|
+
const v = evalMap(NUMERIC_KEYED);
|
|
50
|
+
// Object.keys(guestMap) === [](真正的 Map),宿主改用 toObject()
|
|
51
|
+
assert.deepEqual(Object.keys(v), []);
|
|
52
|
+
const o = v.toObject();
|
|
53
|
+
assert.equal(o['1'], 10);
|
|
54
|
+
assert.equal(o['2'], 20);
|
|
55
|
+
assert.equal(Object.keys(o).length, 2);
|
|
56
|
+
// null 原型:无原型链可泄漏
|
|
57
|
+
assert.equal(Object.getPrototypeOf(o), null);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=guest-map-serialization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guest-map-serialization.test.js","sourceRoot":"","sources":["../../../test/unit/guest-map-serialization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-type-guard.test.d.ts","sourceRoot":"","sources":["../../../test/unit/map-type-guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { compile, evaluate, EN_US, initializeAllBundledLexicons } from '../../src/browser.js';
|
|
4
|
+
// Map.* 的首参类型守卫(aster-lang-ts#132)。
|
|
5
|
+
//
|
|
6
|
+
// `asGuestMap` 此前对**任意**值静默兜底成空 Map:`Map.size(42)`→0、
|
|
7
|
+
// `Map.get(42,"k")`→None、`Map.keys(42)`→[],全是**看起来完全合理**的值。
|
|
8
|
+
// 而 truffle 侧七个 Map.* 一律抛 `操作 Map.X 期望类型 Map`。
|
|
9
|
+
//
|
|
10
|
+
// ★危害高于 #128:`Map.get` 是策略规则读字段的主路径,
|
|
11
|
+
// `Maybe.withDefault(Map.get(applicant,"creditScore"), 0)` 在本引擎静默走兜底值
|
|
12
|
+
// 照常输出决策、在 JVM 上拒绝执行——同一条规则跨引擎决策翻转。
|
|
13
|
+
//
|
|
14
|
+
// ★核查方法(吸取 #128 的教训):不读源码下结论,而是把同一份 IR 分别喂给
|
|
15
|
+
// 两个引擎逐个实测。对标量 / 列表 / 普通对象误用,七个 Map.* 在 truffle 上全部抛错。
|
|
16
|
+
//
|
|
17
|
+
// ★但**不要说"无一例外"**——交叉审查实测出一类残留分叉(#134):
|
|
18
|
+
// `None` 首参在 truffle 上**不抛**(`Map.size(None)` 返回 1),因为 JVM 的 None 是
|
|
19
|
+
// `LinkedHashMap{_type:"None"}`,本身就是 java.util.Map,`_type` 被当成一个键数进去。
|
|
20
|
+
// 本引擎的 None 是裸 null,被守卫拒掉。方向仍是「TS 更严、JVM 更松」。
|
|
21
|
+
// 下面 `残留分叉` 那条用例锁住现状,防止它无声消失。
|
|
22
|
+
initializeAllBundledLexicons();
|
|
23
|
+
/** 编译 + 求值一个表达式(无参规则)。 */
|
|
24
|
+
function run(expr) {
|
|
25
|
+
const c = compile(`Module p.\n\nRule f produce Int:\n Return ${expr}.\n`, { lexicon: EN_US });
|
|
26
|
+
if (!c.success || !c.core)
|
|
27
|
+
return { ok: false, error: 'compile failed' };
|
|
28
|
+
const out = evaluate(c.core, 'f', {});
|
|
29
|
+
return out.success
|
|
30
|
+
? { ok: true, value: out.value }
|
|
31
|
+
: { ok: false, error: out.error ?? '(无错误信息)' };
|
|
32
|
+
}
|
|
33
|
+
/** 用宿主入参调用 `Rule f given m`,验证真实 context 形态。 */
|
|
34
|
+
function runWithMap(m) {
|
|
35
|
+
const c = compile(`Module p.\n\nRule f given m, produce Int:\n Return Map.size(m).\n`, {
|
|
36
|
+
lexicon: EN_US,
|
|
37
|
+
});
|
|
38
|
+
assert.ok(c.success && c.core, 'compile 失败');
|
|
39
|
+
const out = evaluate(c.core, 'f', { m });
|
|
40
|
+
return out.success
|
|
41
|
+
? { ok: true, value: out.value }
|
|
42
|
+
: { ok: false, error: out.error ?? '(无错误信息)' };
|
|
43
|
+
}
|
|
44
|
+
const MAP_OPS = [
|
|
45
|
+
['Map.get', 'Maybe.withDefault(Map.get(42, "k"), 0)'],
|
|
46
|
+
['Map.size', 'Map.size(42)'],
|
|
47
|
+
['Map.put', 'Map.size(Map.put(42, "k", 1))'],
|
|
48
|
+
['Map.remove', 'Map.size(Map.remove(42, "k"))'],
|
|
49
|
+
['Map.keys', 'List.length(Map.keys(42))'],
|
|
50
|
+
['Map.values', 'List.length(Map.values(42))'],
|
|
51
|
+
];
|
|
52
|
+
describe('Map.* 首参类型守卫', () => {
|
|
53
|
+
for (const [op, expr] of MAP_OPS) {
|
|
54
|
+
it(`${op} 对非 Map 首参报错,而非静默兜底成空 Map`, () => {
|
|
55
|
+
const r = run(expr);
|
|
56
|
+
assert.equal(r.ok, false, `应当失败,实际静默返回 ${JSON.stringify(r.value)}`);
|
|
57
|
+
assert.equal(r.error, `${op}: expected Map, got number`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Map.contains 返回 Bool,单独用 If 取值。
|
|
61
|
+
it('Map.contains 对非 Map 首参报错', () => {
|
|
62
|
+
const c = compile('Module p.\n\nRule f produce Int:\n If Map.contains(42, "k"):\n Return 1.\n Return 0.\n', { lexicon: EN_US });
|
|
63
|
+
assert.ok(c.success && c.core, 'compile 失败');
|
|
64
|
+
const out = evaluate(c.core, 'f', {});
|
|
65
|
+
assert.equal(out.success, false);
|
|
66
|
+
assert.equal(out.error, 'Map.contains: expected Map, got number');
|
|
67
|
+
});
|
|
68
|
+
it('文本 / null / 数组等其它类型同样被拒', () => {
|
|
69
|
+
assert.equal(run('Map.size("abc")').error, 'Map.size: expected Map, got string');
|
|
70
|
+
assert.equal(run('Map.size(None)').error, 'Map.size: expected Map, got object');
|
|
71
|
+
// 数组不是 Map:truffle 侧 java.util.List 既非 AsterMapValue 也非 Map,同样抛错。
|
|
72
|
+
// 此前 `Map.size(List.range(0,2))` 会返回 2——把列表当成 Map 用。
|
|
73
|
+
assert.equal(run('Map.size(List.range(0, 2))').error, 'Map.size: expected Map, got List');
|
|
74
|
+
});
|
|
75
|
+
// ★放行范围:宿主 context 里的 map 就是普通对象 / JS Map 两种形态,
|
|
76
|
+
// 加守卫**不能**误伤它们,否则所有真实调用都会炸。
|
|
77
|
+
it('宿主传入的普通对象与 JS Map 仍然可用', () => {
|
|
78
|
+
assert.deepEqual(runWithMap({ a: 1, b: 2 }), { ok: true, value: 2 });
|
|
79
|
+
assert.deepEqual(runWithMap(new Map([['a', 1]])), { ok: true, value: 1 });
|
|
80
|
+
assert.deepEqual(runWithMap({}), { ok: true, value: 0 });
|
|
81
|
+
});
|
|
82
|
+
it('引擎内部产生的 Map 全链路正常', () => {
|
|
83
|
+
assert.deepEqual(run('Map.size(Map.empty())'), { ok: true, value: 0 });
|
|
84
|
+
assert.deepEqual(run('Map.size(Map.put(Map.empty(), "a", 1))'), { ok: true, value: 1 });
|
|
85
|
+
assert.deepEqual(run('Maybe.withDefault(Map.get(Map.put(Map.empty(), "a", 7), "a"), 0)'), { ok: true, value: 7 });
|
|
86
|
+
});
|
|
87
|
+
// ★Maybe/Result 变体不是 Map(#134 已在两引擎同步收紧)。
|
|
88
|
+
// 这些变体的运行期表示本身就是"带 _type 的对象/Map",不拦就会被当成普通 Map
|
|
89
|
+
// 数键——`Map.size(Some(1))`→2、`Map.size(None)`→1(JVM),全是静默错答案。
|
|
90
|
+
//
|
|
91
|
+
// 二维矩阵实测(6 个 Map.* × 6 种输入 = 36 格):修复前 None 那 6 格两引擎分叉、
|
|
92
|
+
// Some/Ok/Err 那 18 格两引擎"一致地错";修复后 36 格逐格一致。
|
|
93
|
+
it('Maybe/Result 变体被 Map.* 拒绝(Some/None/Ok/Err)', () => {
|
|
94
|
+
// 注:`None` 在本引擎的运行期表示是裸 `null`(不是带 __type 的对象),
|
|
95
|
+
// 故它被更前面的 null 分支拦下、报 `got object` 而非 `got None`。
|
|
96
|
+
// 两条路径都拒绝,只是消息里的类型名不同——这里如实断言各自的实际消息。
|
|
97
|
+
for (const [arg, want] of [
|
|
98
|
+
['Some(1)', 'Some'],
|
|
99
|
+
['Ok(1)', 'Ok'],
|
|
100
|
+
['Err(1)', 'Err'],
|
|
101
|
+
['None', 'object'],
|
|
102
|
+
]) {
|
|
103
|
+
const r = run(`Map.size(${arg})`);
|
|
104
|
+
assert.equal(r.ok, false, `${arg} 应被拒绝,实际返回 ${JSON.stringify(r.value)}`);
|
|
105
|
+
assert.equal(r.error, `Map.size: expected Map, got ${want}`);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
// ★宿主可能传进一个 `new Map([['_type','Some'],...])`——标签存在**条目**里、
|
|
109
|
+
// 不是属性。只用 `v.__type` 读会读不到而放行(实测修复前 Map.size 返回 2)。
|
|
110
|
+
// truffle 侧用 `m.get("_type")`(映射查找)天然覆盖,本引擎必须同时查两处才不分叉。
|
|
111
|
+
it('JS Map 把变体标签放在条目里同样被拒绝', () => {
|
|
112
|
+
const c = compile('Module p.\n\nRule f given m, produce Int:\n Return Map.size(m).\n', {
|
|
113
|
+
lexicon: EN_US,
|
|
114
|
+
});
|
|
115
|
+
assert.ok(c.success && c.core, 'compile 失败');
|
|
116
|
+
for (const tag of ['_type', '__type']) {
|
|
117
|
+
const out = evaluate(c.core, 'f', {
|
|
118
|
+
m: new Map([[tag, 'Some'], ['value', 1]]),
|
|
119
|
+
});
|
|
120
|
+
assert.equal(out.success, false, `Map 条目里的 ${tag} 应被拒,实际 ${JSON.stringify(out.value)}`);
|
|
121
|
+
assert.equal(out.error, 'Map.size: expected Map, got Some');
|
|
122
|
+
}
|
|
123
|
+
// 正常 JS Map 不受影响
|
|
124
|
+
const ok = evaluate(c.core, 'f', { m: new Map([['a', 1]]) });
|
|
125
|
+
assert.deepEqual({ ok: ok.success, value: ok.value }, { ok: true, value: 1 });
|
|
126
|
+
});
|
|
127
|
+
// 跨引擎 payload 可能带 JVM 形的单下划线 `_type`,同样要拦。
|
|
128
|
+
it('JVM 形 _type 变体同样被拒绝', () => {
|
|
129
|
+
const c = compile('Module p.\n\nRule f given m, produce Int:\n Return Map.size(m).\n', {
|
|
130
|
+
lexicon: EN_US,
|
|
131
|
+
});
|
|
132
|
+
assert.ok(c.success && c.core, 'compile 失败');
|
|
133
|
+
const out = evaluate(c.core, 'f', { m: { _type: 'None' } });
|
|
134
|
+
assert.equal(out.success, false);
|
|
135
|
+
assert.equal(out.error, 'Map.size: expected Map, got None');
|
|
136
|
+
});
|
|
137
|
+
// List.groupBy 内部构造 GuestMap,其结果会喂给 Map.size/keys/values。
|
|
138
|
+
// 守卫若把内部形态也拒了,这条链会整个断掉。
|
|
139
|
+
it('List.groupBy 产出的 Map 可被 Map.* 消费', () => {
|
|
140
|
+
const c = compile('Module p.\n\nRule keyf given x as Int, produce Int:\n Return x modulo 2.\n\n' +
|
|
141
|
+
'Rule f produce Int:\n Return Map.size(List.groupBy(List.range(0, 6), keyf)).\n', { lexicon: EN_US });
|
|
142
|
+
assert.ok(c.success && c.core, 'compile 失败');
|
|
143
|
+
const out = evaluate(c.core, 'f', {});
|
|
144
|
+
assert.deepEqual({ ok: out.success, value: out.value }, { ok: true, value: 2 });
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=map-type-guard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-type-guard.test.js","sourceRoot":"","sources":["../../../test/unit/map-type-guard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maybe-isnone-semantics.test.d.ts","sourceRoot":"","sources":["../../../test/unit/maybe-isnone-semantics.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { compile, evaluate, EN_US, initializeAllBundledLexicons } from '../../src/browser.js';
|
|
4
|
+
// Maybe.isNone / Option.isNone 的语义:「**是** None」而非「不是 Some」(#131)。
|
|
5
|
+
//
|
|
6
|
+
// 旧写法 `?.__type !== 'Some'` 会把任意非 Maybe 输入也判成 None:
|
|
7
|
+
// Maybe.isNone(42) → true,而 JVM 侧(`"None".equals(m.get("_type"))`)→ false
|
|
8
|
+
//
|
|
9
|
+
// ★核查方法:36 格矩阵(6 个谓词 × 6 种输入)两引擎逐格实跑对比。
|
|
10
|
+
// 结果:仅 isNone / Option.isNone 的 Ok/Err/Int/Text 四格分叉(共 8 格),
|
|
11
|
+
// isSome / Result.isOk / Result.isErr 全部对齐。
|
|
12
|
+
// JVM 那侧是对的——isNone 不该对 `Ok(1)`、`42` 返回 true。
|
|
13
|
+
//
|
|
14
|
+
// ★为什么 isSome 没有同类问题:它写的是 `=== 'Some'`(正向判定),
|
|
15
|
+
// 天然对非 Maybe 返回 false。是 isNone 用了取反才引入这个洞——
|
|
16
|
+
// 这也是我在 #128 的核查表里把 isSome/isNone 合并成一行、从而漏判的根源。
|
|
17
|
+
initializeAllBundledLexicons();
|
|
18
|
+
/** 用 If 取布尔谓词的结果:真→1、假→0。 */
|
|
19
|
+
function predicate(expr) {
|
|
20
|
+
const c = compile(`Module p.\n\nRule f produce Int:\n If ${expr}:\n Return 1.\n Return 0.\n`, { lexicon: EN_US });
|
|
21
|
+
assert.ok(c.success && c.core, `compile 失败: ${JSON.stringify(c.parseErrors ?? [])}`);
|
|
22
|
+
const out = evaluate(c.core, 'f', {});
|
|
23
|
+
assert.ok(out.success, 'evaluate 失败');
|
|
24
|
+
return out.value;
|
|
25
|
+
}
|
|
26
|
+
describe('Maybe.isNone 语义:是 None,而非"不是 Some"', () => {
|
|
27
|
+
for (const fn of ['Maybe.isNone', 'Option.isNone']) {
|
|
28
|
+
it(`${fn} 对非 Maybe 输入返回 false(与 JVM 一致)`, () => {
|
|
29
|
+
// 这四格是修复前与 JVM 分叉的位置:旧实现全部返回 true。
|
|
30
|
+
for (const arg of ['Ok(1)', 'Err(1)', '42', '"a"']) {
|
|
31
|
+
assert.equal(predicate(`${fn}(${arg})`), 0, `${fn}(${arg}) 应为 false`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it(`${fn} 对 None 返回 true、对 Some 返回 false`, () => {
|
|
35
|
+
assert.equal(predicate(`${fn}(None)`), 1);
|
|
36
|
+
assert.equal(predicate(`${fn}(Some(1))`), 0);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// ★两种 None 表示都要认:`None` 字面量是裸 null,Maybe.map 等返回 {__type:'None'}。
|
|
40
|
+
// 只认后者会让 `Maybe.isNone(None)` 变 false——这是修复时最容易踩的坑。
|
|
41
|
+
it('None 的两种运行期表示都判为 true', () => {
|
|
42
|
+
assert.equal(predicate('Maybe.isNone(None)'), 1, '裸 null 形');
|
|
43
|
+
// Maybe.map(None, f) 返回 {__type:'None'}
|
|
44
|
+
assert.equal(predicate('Maybe.isNone(Maybe.map(None, Maybe.unwrap))'), 1, '带标签形');
|
|
45
|
+
});
|
|
46
|
+
it('与 Map.get 的组合(ADR 0035 起 Map.get 返回 Maybe)', () => {
|
|
47
|
+
const missing = compile('Module p.\n\nRule f produce Int:\n Let m be Map.empty().\n' +
|
|
48
|
+
' If Maybe.isNone(Map.get(m, "k")):\n Return 1.\n Return 0.\n', { lexicon: EN_US });
|
|
49
|
+
assert.ok(missing.success && missing.core);
|
|
50
|
+
assert.equal(evaluate(missing.core, 'f', {}).value, 1, '缺键应为 None');
|
|
51
|
+
const hit = compile('Module p.\n\nRule f produce Int:\n Let m be Map.put(Map.empty(), "k", 5).\n' +
|
|
52
|
+
' If Maybe.isNone(Map.get(m, "k")):\n Return 1.\n Return 0.\n', { lexicon: EN_US });
|
|
53
|
+
assert.ok(hit.success && hit.core);
|
|
54
|
+
assert.equal(evaluate(hit.core, 'f', {}).value, 0, '命中不应为 None');
|
|
55
|
+
});
|
|
56
|
+
// isSome 是正向判定(`=== 'Some'`),本就没有这个洞;锁住它以防有人"顺手对称化"
|
|
57
|
+
// 而把 isSome 也改成取反、反向引入同一个缺陷。
|
|
58
|
+
it('isSome 保持正向判定:对非 Maybe 返回 false', () => {
|
|
59
|
+
for (const arg of ['Ok(1)', 'Err(1)', '42', '"a"', 'None']) {
|
|
60
|
+
assert.equal(predicate(`Maybe.isSome(${arg})`), 0, `Maybe.isSome(${arg}) 应为 false`);
|
|
61
|
+
}
|
|
62
|
+
assert.equal(predicate('Maybe.isSome(Some(1))'), 1);
|
|
63
|
+
});
|
|
64
|
+
// Result 侧两个谓词矩阵实测已对齐,锁住现状防回退。
|
|
65
|
+
it('Result.isOk / isErr 对非 Result 输入返回 false', () => {
|
|
66
|
+
for (const arg of ['None', 'Some(1)', '42', '"a"']) {
|
|
67
|
+
assert.equal(predicate(`Result.isOk(${arg})`), 0, `Result.isOk(${arg})`);
|
|
68
|
+
assert.equal(predicate(`Result.isErr(${arg})`), 0, `Result.isErr(${arg})`);
|
|
69
|
+
}
|
|
70
|
+
assert.equal(predicate('Result.isOk(Ok(1))'), 1);
|
|
71
|
+
assert.equal(predicate('Result.isErr(Err(1))'), 1);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=maybe-isnone-semantics.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maybe-isnone-semantics.test.js","sourceRoot":"","sources":["../../../test/unit/maybe-isnone-semantics.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maybe-map-type-guard.test.d.ts","sourceRoot":"","sources":["../../../test/unit/maybe-map-type-guard.test.ts"],"names":[],"mappings":""}
|