@aster-cloud/aster-lang-ts 1.0.5 → 1.0.7

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.
Files changed (66) hide show
  1. package/dist/src/ast/ast.d.ts +1 -0
  2. package/dist/src/ast/ast.d.ts.map +1 -1
  3. package/dist/src/ast/ast.js +1 -0
  4. package/dist/src/ast/ast.js.map +1 -1
  5. package/dist/src/core/core_ir.d.ts +1 -0
  6. package/dist/src/core/core_ir.d.ts.map +1 -1
  7. package/dist/src/core/core_ir.js +1 -0
  8. package/dist/src/core/core_ir.js.map +1 -1
  9. package/dist/src/core/interpreter.d.ts +3 -1
  10. package/dist/src/core/interpreter.d.ts.map +1 -1
  11. package/dist/src/core/interpreter.js +214 -5
  12. package/dist/src/core/interpreter.js.map +1 -1
  13. package/dist/src/core/pretty_core.d.ts.map +1 -1
  14. package/dist/src/core/pretty_core.js +1 -0
  15. package/dist/src/core/pretty_core.js.map +1 -1
  16. package/dist/src/core/visitor.d.ts.map +1 -1
  17. package/dist/src/core/visitor.js +1 -0
  18. package/dist/src/core/visitor.js.map +1 -1
  19. package/dist/src/diagnostics/diagnostics.d.ts +2 -0
  20. package/dist/src/diagnostics/diagnostics.d.ts.map +1 -1
  21. package/dist/src/diagnostics/diagnostics.js +6 -0
  22. package/dist/src/diagnostics/diagnostics.js.map +1 -1
  23. package/dist/src/diagnostics/error_codes.d.ts +1 -0
  24. package/dist/src/diagnostics/error_codes.d.ts.map +1 -1
  25. package/dist/src/diagnostics/error_codes.js +2 -0
  26. package/dist/src/diagnostics/error_codes.js.map +1 -1
  27. package/dist/src/frontend/lexer.d.ts +7 -0
  28. package/dist/src/frontend/lexer.d.ts.map +1 -1
  29. package/dist/src/frontend/lexer.js +37 -2
  30. package/dist/src/frontend/lexer.js.map +1 -1
  31. package/dist/src/lower_to_core.js +2 -0
  32. package/dist/src/lower_to_core.js.map +1 -1
  33. package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
  34. package/dist/src/parser/expr-stmt-parser.js +7 -0
  35. package/dist/src/parser/expr-stmt-parser.js.map +1 -1
  36. package/dist/src/typecheck/expression.d.ts.map +1 -1
  37. package/dist/src/typecheck/expression.js +55 -0
  38. package/dist/src/typecheck/expression.js.map +1 -1
  39. package/dist/src/typecheck/type_system.d.ts.map +1 -1
  40. package/dist/src/typecheck/type_system.js +9 -1
  41. package/dist/src/typecheck/type_system.js.map +1 -1
  42. package/dist/src/types/base.d.ts +10 -0
  43. package/dist/src/types/base.d.ts.map +1 -1
  44. package/dist/src/types.d.ts +10 -2
  45. package/dist/src/types.d.ts.map +1 -1
  46. package/dist/src/types.js +1 -0
  47. package/dist/src/types.js.map +1 -1
  48. package/dist/test/unit/date-builtins.test.d.ts +2 -0
  49. package/dist/test/unit/date-builtins.test.d.ts.map +1 -0
  50. package/dist/test/unit/date-builtins.test.js +74 -0
  51. package/dist/test/unit/date-builtins.test.js.map +1 -0
  52. package/dist/test/unit/decimal-literals.test.d.ts +2 -0
  53. package/dist/test/unit/decimal-literals.test.d.ts.map +1 -0
  54. package/dist/test/unit/decimal-literals.test.js +76 -0
  55. package/dist/test/unit/decimal-literals.test.js.map +1 -0
  56. package/dist/test/unit/decimal-mixing-typecheck.test.d.ts +2 -0
  57. package/dist/test/unit/decimal-mixing-typecheck.test.d.ts.map +1 -0
  58. package/dist/test/unit/decimal-mixing-typecheck.test.js +80 -0
  59. package/dist/test/unit/decimal-mixing-typecheck.test.js.map +1 -0
  60. package/dist/test/unit/decimal-round-divide.test.d.ts +2 -0
  61. package/dist/test/unit/decimal-round-divide.test.d.ts.map +1 -0
  62. package/dist/test/unit/decimal-round-divide.test.js +53 -0
  63. package/dist/test/unit/decimal-round-divide.test.js.map +1 -0
  64. package/dist/test/unit/stdlib-collections.test.js +35 -0
  65. package/dist/test/unit/stdlib-collections.test.js.map +1 -1
  66. package/package.json +3 -2
@@ -2,6 +2,34 @@ import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { compile } from '../../src/browser.js';
4
4
  import { evaluate } from '../../src/core/interpreter.js';
5
+ // evaluate 的 maxSteps 选项:受信、计算量已知有界的场景(如 poker best-5-of-7:
6
+ // 21 组合×classify ~数万步但 <6ms)可上调步数闸门;默认 10000 不变(untrusted DoS 防护)。
7
+ describe('evaluate maxSteps option', () => {
8
+ // 制造一个超过默认 10000 步但有界的计算:对一个长列表反复 map(步数随长度线性增长)。
9
+ const heavy = `Module probe.
10
+ Rule dbl given x, produce:
11
+ Return x times 2.
12
+ Rule main given seed as Int, produce Int:
13
+ Let xs be List.range(0, 4000).
14
+ Let a be List.map(xs, dbl).
15
+ Let b be List.map(a, dbl).
16
+ Let c be List.map(b, dbl).
17
+ Return List.length(c).`;
18
+ it('heavy computation exceeds default 10000 steps', () => {
19
+ const m = compile(heavy);
20
+ assert.ok(m.core);
21
+ const ev = evaluate(m.core, 'main', { seed: 0 });
22
+ assert.equal(ev.success, false);
23
+ assert.match(String(ev.error), /Maximum execution steps \(10000\)/);
24
+ });
25
+ it('same computation succeeds with raised maxSteps', () => {
26
+ const m = compile(heavy);
27
+ assert.ok(m.core);
28
+ const ev = evaluate(m.core, 'main', { seed: 0 }, { maxSteps: 200000 });
29
+ assert.ok(ev.success, `eval: ${ev.error ?? ''}`);
30
+ assert.equal(ev.value, 4000);
31
+ });
32
+ });
5
33
  // ADR 0024 受控 stdlib:通用集合 builtin(与 truffle Builtins 镜像,逐位 parity)。
6
34
  function run(body) {
7
35
  const c = compile(`Module probe.\n${body}\n`);
@@ -25,5 +53,12 @@ describe('ADR 0024 stdlib — 通用集合 builtin', () => {
25
53
  it('List.maxBy', () => assert.equal(run(Rf('Rule id given x, produce:\n Return x.', 'List.maxBy([3, 8, 1], id)')), 8));
26
54
  it('List.minBy', () => assert.equal(run(Rf('Rule id given x, produce:\n Return x.', 'List.minBy([3, 8, 1], id)')), 1));
27
55
  it('List.groupBy', () => assert.equal(run(Rf('Rule par given x, produce:\n Return x modulo 2.', 'Map.size(List.groupBy([1, 2, 3, 4, 5], par))')), 2));
56
+ // List.combinations(list, k):C(n,k) 个 k 元素子集,确定性递增索引字典序。
57
+ it('List.combinations count C(4,2)=6', () => assert.equal(run(R('List.length(List.combinations([10, 20, 30, 40], 2))')), 6));
58
+ it('List.combinations count C(7,5)=21 (poker best-5-of-7)', () => assert.equal(run(R('List.length(List.combinations([2, 3, 4, 5, 6, 7, 8], 5))')), 21));
59
+ it('List.combinations k=0 → [[]]', () => assert.equal(run(R('List.length(List.combinations([1, 2, 3], 0))')), 1));
60
+ it('List.combinations k>n → []', () => assert.equal(run(R('List.length(List.combinations([1, 2], 5))')), 0));
61
+ it('List.combinations first subset is [0,1] indices', () => assert.equal(run(R('List.get(List.get(List.combinations([10, 20, 30], 2), 0), 0)')), 10));
62
+ it('List.combinations second subset is [0,2] → [10,30]', () => assert.equal(run(R('List.get(List.get(List.combinations([10, 20, 30], 2), 1), 1)')), 30));
28
63
  });
29
64
  //# sourceMappingURL=stdlib-collections.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdlib-collections.test.js","sourceRoot":"","sources":["../../../test/unit/stdlib-collections.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stdlib-collections.test.js","sourceRoot":"","sources":["../../../test/unit/stdlib-collections.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aster-cloud/aster-lang-ts",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Aster CNL (Controlled Natural Language) TypeScript Compiler - Lexer, Parser, AST, Core IR, Type Checker",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -116,7 +116,8 @@
116
116
  },
117
117
  "dependencies": {
118
118
  "@types/semver": "^7.7.1",
119
- "semver": "^7.7.3"
119
+ "semver": "^7.7.3",
120
+ "decimal.js": "10.4.3"
120
121
  },
121
122
  "//peerDependencies": "P0-R19: CLI/LSP-only deps. Consumers importing only the browser/core entries don't need them. Subpath imports (./cli, ./lsp) require them — flagged optional so npm/pnpm install them by default but consumers can opt out with --no-optional.",
122
123
  "peerDependencies": {