@bilig/formula 0.1.83 → 0.1.84
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/addressing.d.ts +6 -6
- package/dist/addressing.js +16 -16
- package/dist/addressing.js.map +1 -1
- package/dist/ast.d.ts +18 -18
- package/dist/binder-wasm-rules.d.ts +2 -2
- package/dist/binder-wasm-rules.js +677 -724
- package/dist/binder-wasm-rules.js.map +1 -1
- package/dist/binder.d.ts +2 -2
- package/dist/binder.js +133 -137
- package/dist/binder.js.map +1 -1
- package/dist/builtin-capabilities.d.ts +4 -4
- package/dist/builtin-capabilities.js +777 -816
- package/dist/builtin-capabilities.js.map +1 -1
- package/dist/builtins/complex.d.ts +3 -3
- package/dist/builtins/complex.js +20 -48
- package/dist/builtins/complex.js.map +1 -1
- package/dist/builtins/convert.d.ts +1 -1
- package/dist/builtins/convert.js +180 -181
- package/dist/builtins/convert.js.map +1 -1
- package/dist/builtins/datetime.d.ts +1 -1
- package/dist/builtins/datetime.js +60 -72
- package/dist/builtins/datetime.js.map +1 -1
- package/dist/builtins/distribution-builtins.d.ts +2 -2
- package/dist/builtins/distribution-builtins.js +62 -112
- package/dist/builtins/distribution-builtins.js.map +1 -1
- package/dist/builtins/distributions.js +17 -54
- package/dist/builtins/distributions.js.map +1 -1
- package/dist/builtins/financial-builtins.d.ts +2 -2
- package/dist/builtins/financial-builtins.js +9 -42
- package/dist/builtins/financial-builtins.js.map +1 -1
- package/dist/builtins/financial.js +4 -18
- package/dist/builtins/financial.js.map +1 -1
- package/dist/builtins/fixed-income-builtins.d.ts +2 -2
- package/dist/builtins/fixed-income-builtins.js +18 -60
- package/dist/builtins/fixed-income-builtins.js.map +1 -1
- package/dist/builtins/fixed-income.js +25 -96
- package/dist/builtins/fixed-income.js.map +1 -1
- package/dist/builtins/formatting.js +9 -9
- package/dist/builtins/formatting.js.map +1 -1
- package/dist/builtins/logical.d.ts +1 -1
- package/dist/builtins/logical.js +5 -5
- package/dist/builtins/logical.js.map +1 -1
- package/dist/builtins/lookup-array-shape-builtins.d.ts +3 -3
- package/dist/builtins/lookup-array-shape-builtins.js +8 -15
- package/dist/builtins/lookup-array-shape-builtins.js.map +1 -1
- package/dist/builtins/lookup-criteria-builtins.d.ts +2 -2
- package/dist/builtins/lookup-criteria-builtins.js +1 -1
- package/dist/builtins/lookup-criteria-builtins.js.map +1 -1
- package/dist/builtins/lookup-database-builtins.d.ts +2 -2
- package/dist/builtins/lookup-database-builtins.js +20 -24
- package/dist/builtins/lookup-database-builtins.js.map +1 -1
- package/dist/builtins/lookup-financial-builtins.d.ts +3 -3
- package/dist/builtins/lookup-financial-builtins.js +14 -30
- package/dist/builtins/lookup-financial-builtins.js.map +1 -1
- package/dist/builtins/lookup-hypothesis-builtins.d.ts +2 -2
- package/dist/builtins/lookup-hypothesis-builtins.js +23 -58
- package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -1
- package/dist/builtins/lookup-matrix-builtins.d.ts +3 -3
- package/dist/builtins/lookup-matrix-builtins.js +5 -3
- package/dist/builtins/lookup-matrix-builtins.js.map +1 -1
- package/dist/builtins/lookup-order-statistics-builtins.d.ts +3 -3
- package/dist/builtins/lookup-order-statistics-builtins.js +18 -30
- package/dist/builtins/lookup-order-statistics-builtins.js.map +1 -1
- package/dist/builtins/lookup-reference-builtins.d.ts +2 -2
- package/dist/builtins/lookup-reference-builtins.js +10 -26
- package/dist/builtins/lookup-reference-builtins.js.map +1 -1
- package/dist/builtins/lookup-regression-builtins.d.ts +2 -2
- package/dist/builtins/lookup-regression-builtins.js +52 -69
- package/dist/builtins/lookup-regression-builtins.js.map +1 -1
- package/dist/builtins/lookup-sort-filter-builtins.d.ts +3 -3
- package/dist/builtins/lookup-sort-filter-builtins.js +5 -13
- package/dist/builtins/lookup-sort-filter-builtins.js.map +1 -1
- package/dist/builtins/lookup.d.ts +5 -5
- package/dist/builtins/lookup.js +61 -73
- package/dist/builtins/lookup.js.map +1 -1
- package/dist/builtins/math-builtins.d.ts +2 -2
- package/dist/builtins/math-builtins.js +11 -17
- package/dist/builtins/math-builtins.js.map +1 -1
- package/dist/builtins/numeric.d.ts +2 -2
- package/dist/builtins/numeric.js +2 -2
- package/dist/builtins/numeric.js.map +1 -1
- package/dist/builtins/placeholder.d.ts +1 -1
- package/dist/builtins/placeholder.js +505 -505
- package/dist/builtins/placeholder.js.map +1 -1
- package/dist/builtins/radix.d.ts +2 -2
- package/dist/builtins/radix.js +33 -39
- package/dist/builtins/radix.js.map +1 -1
- package/dist/builtins/statistical-builtins.d.ts +2 -2
- package/dist/builtins/statistical-builtins.js +29 -56
- package/dist/builtins/statistical-builtins.js.map +1 -1
- package/dist/builtins/statistics.d.ts +1 -1
- package/dist/builtins/statistics.js +3 -7
- package/dist/builtins/statistics.js.map +1 -1
- package/dist/builtins/text-core-builtins.d.ts +2 -2
- package/dist/builtins/text-core-builtins.js +110 -110
- package/dist/builtins/text-core-builtins.js.map +1 -1
- package/dist/builtins/text-format-builtins.d.ts +2 -2
- package/dist/builtins/text-format-builtins.js +109 -141
- package/dist/builtins/text-format-builtins.js.map +1 -1
- package/dist/builtins/text-search-builtins.d.ts +2 -2
- package/dist/builtins/text-search-builtins.js +37 -44
- package/dist/builtins/text-search-builtins.js.map +1 -1
- package/dist/builtins/text.d.ts +2 -2
- package/dist/builtins/text.js +19 -29
- package/dist/builtins/text.js.map +1 -1
- package/dist/builtins.d.ts +3 -3
- package/dist/builtins.js +55 -75
- package/dist/builtins.js.map +1 -1
- package/dist/compatibility.js +425 -430
- package/dist/compatibility.js.map +1 -1
- package/dist/compiler.d.ts +7 -7
- package/dist/compiler.js +212 -228
- package/dist/compiler.js.map +1 -1
- package/dist/external-function-adapter.d.ts +6 -6
- package/dist/external-function-adapter.js +3 -3
- package/dist/external-function-adapter.js.map +1 -1
- package/dist/formula-template-key.js +25 -26
- package/dist/formula-template-key.js.map +1 -1
- package/dist/generated/formula-inventory.js +3567 -3567
- package/dist/generated/formula-inventory.js.map +1 -1
- package/dist/group-pivot-evaluator.d.ts +2 -2
- package/dist/group-pivot-evaluator.js +27 -32
- package/dist/group-pivot-evaluator.js.map +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/dist/js-evaluator-array-special-calls.d.ts +3 -3
- package/dist/js-evaluator-array-special-calls.js +25 -34
- package/dist/js-evaluator-array-special-calls.js.map +1 -1
- package/dist/js-evaluator-context-special-calls.d.ts +2 -2
- package/dist/js-evaluator-context-special-calls.js +23 -27
- package/dist/js-evaluator-context-special-calls.js.map +1 -1
- package/dist/js-evaluator-reference-context.d.ts +2 -2
- package/dist/js-evaluator-reference-context.js +22 -24
- package/dist/js-evaluator-reference-context.js.map +1 -1
- package/dist/js-evaluator-workbook-special-calls.d.ts +2 -2
- package/dist/js-evaluator-workbook-special-calls.js +18 -24
- package/dist/js-evaluator-workbook-special-calls.js.map +1 -1
- package/dist/js-evaluator.d.ts +40 -40
- package/dist/js-evaluator.js +135 -147
- package/dist/js-evaluator.js.map +1 -1
- package/dist/js-plan-lowering.d.ts +2 -2
- package/dist/js-plan-lowering.js +103 -108
- package/dist/js-plan-lowering.js.map +1 -1
- package/dist/lexer.d.ts +1 -1
- package/dist/lexer.js +34 -43
- package/dist/lexer.js.map +1 -1
- package/dist/optimizer.d.ts +1 -1
- package/dist/optimizer.js +99 -108
- package/dist/optimizer.js.map +1 -1
- package/dist/parser.d.ts +1 -1
- package/dist/parser.js +129 -136
- package/dist/parser.js.map +1 -1
- package/dist/program-arena.js.map +1 -1
- package/dist/runtime-inventory.d.ts +2 -2
- package/dist/runtime-inventory.js +14 -20
- package/dist/runtime-inventory.js.map +1 -1
- package/dist/runtime-values.d.ts +4 -4
- package/dist/runtime-values.js +2 -2
- package/dist/runtime-values.js.map +1 -1
- package/dist/special-call-rewrites.d.ts +1 -1
- package/dist/special-call-rewrites.js +14 -18
- package/dist/special-call-rewrites.js.map +1 -1
- package/dist/translation.d.ts +7 -7
- package/dist/translation.js +323 -366
- package/dist/translation.js.map +1 -1
- package/package.json +2 -2
package/dist/compatibility.js
CHANGED
|
@@ -1,84 +1,79 @@
|
|
|
1
1
|
export const compatibilityStatuses = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
];
|
|
9
|
-
export const compatibilityScopes = ["canonical", "extended"];
|
|
10
|
-
export const wasmCompatibilityStatuses = [
|
|
11
|
-
"not-started",
|
|
12
|
-
"shadow",
|
|
13
|
-
"production",
|
|
14
|
-
"blocked",
|
|
2
|
+
'unsupported',
|
|
3
|
+
'seeded',
|
|
4
|
+
'implemented-js',
|
|
5
|
+
'implemented-js-and-wasm-shadow',
|
|
6
|
+
'implemented-wasm-production',
|
|
7
|
+
'blocked',
|
|
15
8
|
];
|
|
9
|
+
export const compatibilityScopes = ['canonical', 'extended'];
|
|
10
|
+
export const wasmCompatibilityStatuses = ['not-started', 'shadow', 'production', 'blocked'];
|
|
16
11
|
export const compatibilityFamilies = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
12
|
+
'arithmetic',
|
|
13
|
+
'comparison',
|
|
14
|
+
'logical',
|
|
15
|
+
'aggregation',
|
|
16
|
+
'math',
|
|
17
|
+
'text',
|
|
18
|
+
'date-time',
|
|
19
|
+
'lookup-reference',
|
|
20
|
+
'statistical',
|
|
21
|
+
'information',
|
|
22
|
+
'dynamic-array',
|
|
23
|
+
'names',
|
|
24
|
+
'tables',
|
|
25
|
+
'structured-reference',
|
|
26
|
+
'volatile',
|
|
27
|
+
'lambda',
|
|
33
28
|
];
|
|
34
29
|
const familyOwners = {
|
|
35
|
-
arithmetic:
|
|
36
|
-
comparison:
|
|
37
|
-
logical:
|
|
38
|
-
aggregation:
|
|
39
|
-
math:
|
|
40
|
-
text:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
statistical:
|
|
44
|
-
information:
|
|
45
|
-
|
|
46
|
-
names:
|
|
47
|
-
tables:
|
|
48
|
-
|
|
49
|
-
volatile:
|
|
50
|
-
lambda:
|
|
30
|
+
arithmetic: 'lane-a-arithmetic-aggregation',
|
|
31
|
+
comparison: 'backbone-value-model',
|
|
32
|
+
logical: 'lane-b-logical-information',
|
|
33
|
+
aggregation: 'lane-a-arithmetic-aggregation',
|
|
34
|
+
math: 'lane-a-arithmetic-aggregation',
|
|
35
|
+
text: 'lane-c-text',
|
|
36
|
+
'date-time': 'lane-d-date-time',
|
|
37
|
+
'lookup-reference': 'lane-e-lookup-reference',
|
|
38
|
+
statistical: 'lane-f-statistical-financial',
|
|
39
|
+
information: 'lane-b-logical-information',
|
|
40
|
+
'dynamic-array': 'lane-g-dynamic-array-metadata',
|
|
41
|
+
names: 'lane-g-dynamic-array-metadata',
|
|
42
|
+
tables: 'lane-g-dynamic-array-metadata',
|
|
43
|
+
'structured-reference': 'lane-g-dynamic-array-metadata',
|
|
44
|
+
volatile: 'lane-d-date-time',
|
|
45
|
+
lambda: 'lane-h-lambda',
|
|
51
46
|
};
|
|
52
47
|
const familyPrerequisites = {
|
|
53
|
-
arithmetic: [
|
|
54
|
-
comparison: [
|
|
55
|
-
logical: [
|
|
56
|
-
aggregation: [
|
|
57
|
-
math: [
|
|
58
|
-
text: [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
statistical: [
|
|
62
|
-
information: [
|
|
63
|
-
|
|
64
|
-
names: [
|
|
65
|
-
tables: [
|
|
66
|
-
|
|
67
|
-
volatile: [
|
|
68
|
-
lambda: [
|
|
48
|
+
arithmetic: ['core:value-model'],
|
|
49
|
+
comparison: ['core:value-model', 'core:comparison-model'],
|
|
50
|
+
logical: ['core:value-model', 'core:error-model'],
|
|
51
|
+
aggregation: ['core:value-model', 'core:range-iterators'],
|
|
52
|
+
math: ['core:value-model'],
|
|
53
|
+
text: ['core:value-model', 'core:string-coercion'],
|
|
54
|
+
'date-time': ['core:value-model', 'core:date-serial-model'],
|
|
55
|
+
'lookup-reference': ['core:reference-model', 'core:comparison-model'],
|
|
56
|
+
statistical: ['core:value-model', 'core:criteria-model'],
|
|
57
|
+
information: ['core:value-model', 'core:error-model'],
|
|
58
|
+
'dynamic-array': ['core:shape-model', 'core:spill-model'],
|
|
59
|
+
names: ['core:names-model'],
|
|
60
|
+
tables: ['core:tables-model'],
|
|
61
|
+
'structured-reference': ['core:tables-model', 'core:structured-reference-model'],
|
|
62
|
+
volatile: ['core:volatile-context'],
|
|
63
|
+
lambda: ['core:lambda-runtime', 'core:shape-model'],
|
|
69
64
|
};
|
|
70
65
|
export function deriveWasmStatus(status) {
|
|
71
66
|
switch (status) {
|
|
72
|
-
case
|
|
73
|
-
case
|
|
74
|
-
case
|
|
75
|
-
return
|
|
76
|
-
case
|
|
77
|
-
return
|
|
78
|
-
case
|
|
79
|
-
return
|
|
80
|
-
case
|
|
81
|
-
return
|
|
67
|
+
case 'unsupported':
|
|
68
|
+
case 'seeded':
|
|
69
|
+
case 'implemented-js':
|
|
70
|
+
return 'not-started';
|
|
71
|
+
case 'implemented-js-and-wasm-shadow':
|
|
72
|
+
return 'shadow';
|
|
73
|
+
case 'implemented-wasm-production':
|
|
74
|
+
return 'production';
|
|
75
|
+
case 'blocked':
|
|
76
|
+
return 'blocked';
|
|
82
77
|
}
|
|
83
78
|
}
|
|
84
79
|
function entry(id, family, formula, status, options = {}) {
|
|
@@ -87,7 +82,7 @@ function entry(id, family, formula, status, options = {}) {
|
|
|
87
82
|
family,
|
|
88
83
|
formula,
|
|
89
84
|
status,
|
|
90
|
-
scope: options.scope ??
|
|
85
|
+
scope: options.scope ?? 'canonical',
|
|
91
86
|
fixtureIds: options.fixtureIds ?? [id],
|
|
92
87
|
owner: options.owner ?? familyOwners[family],
|
|
93
88
|
prerequisites: options.prerequisites ?? familyPrerequisites[family],
|
|
@@ -96,394 +91,394 @@ function entry(id, family, formula, status, options = {}) {
|
|
|
96
91
|
return options.notes === undefined ? base : { ...base, notes: options.notes };
|
|
97
92
|
}
|
|
98
93
|
export const formulaCompatibilityRegistry = [
|
|
99
|
-
entry(
|
|
100
|
-
entry(
|
|
101
|
-
entry(
|
|
102
|
-
entry(
|
|
103
|
-
entry(
|
|
104
|
-
entry(
|
|
105
|
-
notes:
|
|
94
|
+
entry('arithmetic:add-basic', 'arithmetic', '=A1+A2', 'implemented-wasm-production'),
|
|
95
|
+
entry('arithmetic:precedence-basic', 'arithmetic', '=A1+A2*A3', 'implemented-wasm-production'),
|
|
96
|
+
entry('arithmetic:unary-negation', 'arithmetic', '=-A1', 'implemented-wasm-production'),
|
|
97
|
+
entry('arithmetic:division-basic', 'arithmetic', '=A1/A2', 'implemented-wasm-production'),
|
|
98
|
+
entry('arithmetic:power-basic', 'arithmetic', '=A1^A2', 'implemented-wasm-production'),
|
|
99
|
+
entry('arithmetic:percent-operator', 'arithmetic', '=A1*10%', 'implemented-wasm-production', {
|
|
100
|
+
notes: 'Postfix percent is in the canonical formula corpus and tracked as part of the arithmetic lane.',
|
|
106
101
|
}),
|
|
107
|
-
entry(
|
|
108
|
-
entry(
|
|
109
|
-
entry(
|
|
110
|
-
entry(
|
|
111
|
-
entry(
|
|
112
|
-
entry(
|
|
113
|
-
entry(
|
|
114
|
-
entry(
|
|
115
|
-
entry(
|
|
116
|
-
entry(
|
|
117
|
-
entry(
|
|
118
|
-
entry(
|
|
119
|
-
entry(
|
|
120
|
-
entry(
|
|
121
|
-
entry(
|
|
122
|
-
entry(
|
|
123
|
-
entry(
|
|
124
|
-
entry(
|
|
125
|
-
entry(
|
|
126
|
-
entry(
|
|
127
|
-
entry(
|
|
128
|
-
entry(
|
|
129
|
-
entry(
|
|
130
|
-
entry(
|
|
131
|
-
entry(
|
|
132
|
-
entry(
|
|
133
|
-
entry(
|
|
134
|
-
entry(
|
|
135
|
-
entry(
|
|
136
|
-
entry(
|
|
137
|
-
entry(
|
|
138
|
-
entry(
|
|
139
|
-
entry(
|
|
140
|
-
entry(
|
|
141
|
-
entry(
|
|
142
|
-
entry(
|
|
143
|
-
entry(
|
|
144
|
-
entry(
|
|
145
|
-
entry(
|
|
146
|
-
entry(
|
|
147
|
-
entry(
|
|
148
|
-
entry(
|
|
149
|
-
entry(
|
|
150
|
-
entry(
|
|
151
|
-
entry(
|
|
152
|
-
entry(
|
|
153
|
-
entry(
|
|
154
|
-
entry(
|
|
155
|
-
entry(
|
|
156
|
-
entry(
|
|
157
|
-
entry(
|
|
158
|
-
entry(
|
|
159
|
-
entry(
|
|
160
|
-
entry(
|
|
161
|
-
entry(
|
|
162
|
-
entry(
|
|
163
|
-
entry(
|
|
164
|
-
notes:
|
|
102
|
+
entry('comparison:equality-number', 'comparison', '=A1=A2', 'implemented-wasm-production'),
|
|
103
|
+
entry('comparison:equality-text', 'comparison', '="hello"="HELLO"', 'implemented-wasm-production'),
|
|
104
|
+
entry('comparison:greater-than', 'comparison', '=A1>A2', 'implemented-wasm-production'),
|
|
105
|
+
entry('comparison:less-than-or-equal', 'comparison', '=A1<=A2', 'implemented-wasm-production'),
|
|
106
|
+
entry('logical:if-basic', 'logical', '=IF(A1>0,"yes","no")', 'implemented-wasm-production'),
|
|
107
|
+
entry('logical:ifs-basic', 'logical', '=IFS(A1>1,"big",TRUE(),"small")', 'implemented-wasm-production'),
|
|
108
|
+
entry('logical:and-basic', 'logical', '=AND(A1,A2)', 'implemented-wasm-production'),
|
|
109
|
+
entry('logical:or-basic', 'logical', '=OR(A1,A2)', 'implemented-wasm-production'),
|
|
110
|
+
entry('logical:not-basic', 'logical', '=NOT(A1)', 'implemented-wasm-production'),
|
|
111
|
+
entry('logical:switch-basic', 'logical', '=SWITCH(A1,1,"one","other")', 'implemented-wasm-production'),
|
|
112
|
+
entry('logical:xor-basic', 'logical', '=XOR(TRUE(),FALSE(),TRUE())', 'implemented-wasm-production'),
|
|
113
|
+
entry('aggregation:sum-range', 'aggregation', '=SUM(A1:A3)', 'implemented-wasm-production'),
|
|
114
|
+
entry('aggregation:avg-range', 'aggregation', '=AVG(A1:A3)', 'implemented-wasm-production'),
|
|
115
|
+
entry('aggregation:min-range', 'aggregation', '=MIN(A1:A3)', 'implemented-wasm-production'),
|
|
116
|
+
entry('aggregation:max-range', 'aggregation', '=MAX(A1:A3)', 'implemented-wasm-production'),
|
|
117
|
+
entry('aggregation:count-range', 'aggregation', '=COUNT(A1:A4)', 'implemented-wasm-production'),
|
|
118
|
+
entry('aggregation:counta-range', 'aggregation', '=COUNTA(A1:A4)', 'implemented-wasm-production'),
|
|
119
|
+
entry('aggregation:countblank-range', 'aggregation', '=COUNTBLANK(A1:A4)', 'implemented-wasm-production'),
|
|
120
|
+
entry('math:abs-basic', 'math', '=ABS(A1)', 'implemented-wasm-production'),
|
|
121
|
+
entry('math:round-basic', 'math', '=ROUND(A1,1)', 'implemented-wasm-production'),
|
|
122
|
+
entry('math:trunc-basic', 'math', '=TRUNC(A1,1)', 'implemented-wasm-production'),
|
|
123
|
+
entry('math:floor-basic', 'math', '=FLOOR(A1,2)', 'implemented-wasm-production'),
|
|
124
|
+
entry('math:floor-math-basic', 'math', '=FLOOR.MATH(A1,2)', 'implemented-wasm-production'),
|
|
125
|
+
entry('math:floor-precise-basic', 'math', '=FLOOR.PRECISE(A1,2)', 'implemented-wasm-production'),
|
|
126
|
+
entry('math:ceiling-basic', 'math', '=CEILING(A1,2)', 'implemented-wasm-production'),
|
|
127
|
+
entry('math:ceiling-math-basic', 'math', '=CEILING.MATH(A1,2)', 'implemented-wasm-production'),
|
|
128
|
+
entry('math:ceiling-precise-basic', 'math', '=CEILING.PRECISE(A1,2)', 'implemented-wasm-production'),
|
|
129
|
+
entry('math:iso-ceiling-basic', 'math', '=ISO.CEILING(A1,2)', 'implemented-wasm-production'),
|
|
130
|
+
entry('math:mod-basic', 'math', '=MOD(A1,A2)', 'implemented-wasm-production'),
|
|
131
|
+
entry('math:bitand-basic', 'math', '=BITAND(6,3)', 'implemented-wasm-production'),
|
|
132
|
+
entry('math:base-basic', 'math', '=BASE(255,16,4)', 'implemented-wasm-production'),
|
|
133
|
+
entry('math:decimal-basic', 'math', '=DECIMAL("00FF",16)', 'implemented-wasm-production'),
|
|
134
|
+
entry('math:bin2dec-basic', 'math', '=BIN2DEC("1111111111")', 'implemented-wasm-production'),
|
|
135
|
+
entry('math:dec2bin-basic', 'math', '=DEC2BIN(10,8)', 'implemented-wasm-production'),
|
|
136
|
+
entry('math:oct2hex-basic', 'math', '=OCT2HEX("17",4)', 'implemented-wasm-production'),
|
|
137
|
+
entry('math:besseli-basic', 'math', '=BESSELI(1.5,1)', 'implemented-wasm-production'),
|
|
138
|
+
entry('math:besselj-basic', 'math', '=BESSELJ(1.9,2)', 'implemented-wasm-production'),
|
|
139
|
+
entry('math:besselk-basic', 'math', '=BESSELK(1.5,1)', 'implemented-wasm-production'),
|
|
140
|
+
entry('math:bessely-basic', 'math', '=BESSELY(2.5,1)', 'implemented-wasm-production'),
|
|
141
|
+
entry('math:convert-basic', 'math', '=CONVERT(6,"mi","km")', 'implemented-wasm-production'),
|
|
142
|
+
entry('math:euroconvert-basic', 'math', '=EUROCONVERT(1,"FRF","DEM",TRUE,3)', 'implemented-wasm-production'),
|
|
143
|
+
entry('math:acosh-basic', 'math', '=ACOSH(1)', 'implemented-wasm-production'),
|
|
144
|
+
entry('math:fact-basic', 'math', '=FACT(5)', 'implemented-wasm-production'),
|
|
145
|
+
entry('math:combin-basic', 'math', '=COMBIN(8,3)', 'implemented-wasm-production'),
|
|
146
|
+
entry('math:permut-basic', 'math', '=PERMUT(5,3)', 'implemented-wasm-production'),
|
|
147
|
+
entry('math:permutationa-basic', 'math', '=PERMUTATIONA(2,3)', 'implemented-wasm-production'),
|
|
148
|
+
entry('math:mround-basic', 'math', '=MROUND(A1,4)', 'implemented-wasm-production'),
|
|
149
|
+
entry('math:seriessum-basic', 'math', '=SERIESSUM(2,1,2,1,2)', 'implemented-wasm-production'),
|
|
150
|
+
entry('math:gcd-basic', 'math', '=GCD(A1:A3)', 'implemented-wasm-production'),
|
|
151
|
+
entry('math:product-basic', 'math', '=PRODUCT(A1:A3)', 'implemented-wasm-production'),
|
|
152
|
+
entry('math:geomean-basic', 'math', '=GEOMEAN(A1:A3)', 'implemented-wasm-production'),
|
|
153
|
+
entry('math:harmean-basic', 'math', '=HARMEAN(A1:A3)', 'implemented-wasm-production'),
|
|
154
|
+
entry('math:sqrtpi-basic', 'math', '=SQRTPI(A1)', 'implemented-wasm-production'),
|
|
155
|
+
entry('math:sumsq-basic', 'math', '=SUMSQ(A1:A3)', 'implemented-wasm-production'),
|
|
156
|
+
entry('text:concat-operator', 'text', '="bi"&"lig"', 'implemented-wasm-production'),
|
|
157
|
+
entry('text:concat-function', 'text', '=CONCAT("bi","lig")', 'implemented-wasm-production'),
|
|
158
|
+
entry('text:len-basic', 'text', '=LEN("bilig")', 'implemented-wasm-production', {
|
|
159
|
+
notes: 'LEN now executes through the string-aware native runtime for scalar inputs.',
|
|
165
160
|
}),
|
|
166
|
-
entry(
|
|
167
|
-
entry(
|
|
168
|
-
entry(
|
|
169
|
-
entry(
|
|
170
|
-
entry(
|
|
171
|
-
entry(
|
|
172
|
-
entry(
|
|
173
|
-
entry(
|
|
174
|
-
entry(
|
|
175
|
-
entry(
|
|
176
|
-
entry(
|
|
177
|
-
entry(
|
|
178
|
-
entry(
|
|
179
|
-
entry(
|
|
180
|
-
entry(
|
|
181
|
-
entry(
|
|
182
|
-
entry(
|
|
183
|
-
entry(
|
|
184
|
-
entry(
|
|
185
|
-
entry(
|
|
186
|
-
entry(
|
|
187
|
-
entry(
|
|
188
|
-
entry(
|
|
189
|
-
entry(
|
|
190
|
-
entry(
|
|
191
|
-
entry(
|
|
192
|
-
entry(
|
|
193
|
-
entry(
|
|
194
|
-
entry(
|
|
195
|
-
entry(
|
|
196
|
-
entry(
|
|
197
|
-
entry(
|
|
198
|
-
entry(
|
|
199
|
-
entry(
|
|
200
|
-
entry(
|
|
201
|
-
entry(
|
|
202
|
-
entry(
|
|
203
|
-
entry(
|
|
204
|
-
prerequisites: [
|
|
161
|
+
entry('text:char-basic', 'text', '=CHAR(65)', 'implemented-wasm-production'),
|
|
162
|
+
entry('text:code-basic', 'text', '=CODE("A")', 'implemented-wasm-production'),
|
|
163
|
+
entry('text:clean-basic', 'text', '=CLEAN(CHAR(97)&CHAR(1)&CHAR(98))', 'implemented-wasm-production'),
|
|
164
|
+
entry('text:asc-basic', 'text', '=ASC("ABC 123")', 'implemented-wasm-production'),
|
|
165
|
+
entry('text:jis-basic', 'text', '=JIS("ABC 123")', 'implemented-wasm-production'),
|
|
166
|
+
entry('text:dbcs-basic', 'text', '=DBCS("ABC 123")', 'implemented-wasm-production'),
|
|
167
|
+
entry('text:unichar-basic', 'text', '=UNICHAR(66)', 'implemented-wasm-production'),
|
|
168
|
+
entry('text:dollar-basic', 'text', '=DOLLAR(-1234.5,1)', 'implemented-wasm-production'),
|
|
169
|
+
entry('text:text-basic', 'text', '=TEXT(1234.567,"#,##0.00")', 'implemented-wasm-production'),
|
|
170
|
+
entry('text:text-date-basic', 'text', '=TEXT(DATE(2024,3,5),"yyyy-mm-dd")', 'implemented-wasm-production'),
|
|
171
|
+
entry('text:phonetic-basic', 'text', '=PHONETIC("カタカナ")', 'implemented-wasm-production'),
|
|
172
|
+
entry('text:bahttext-basic', 'text', '=BAHTTEXT(1234)', 'implemented-wasm-production'),
|
|
173
|
+
entry('information:t-basic', 'information', '=T("alpha")', 'implemented-wasm-production'),
|
|
174
|
+
entry('information:n-basic', 'information', '=N(TRUE())', 'implemented-wasm-production'),
|
|
175
|
+
entry('information:type-basic', 'information', '=TYPE("alpha")', 'implemented-wasm-production'),
|
|
176
|
+
entry('math:delta-basic', 'math', '=DELTA(4,4)', 'implemented-wasm-production'),
|
|
177
|
+
entry('math:gestep-basic', 'math', '=GESTEP(-1)', 'implemented-wasm-production'),
|
|
178
|
+
entry('statistical:gauss-basic', 'statistical', '=GAUSS(0)', 'implemented-wasm-production'),
|
|
179
|
+
entry('statistical:phi-basic', 'statistical', '=PHI(0)', 'implemented-wasm-production'),
|
|
180
|
+
entry('statistical:standardize-basic', 'statistical', '=STANDARDIZE(1,0,1)', 'implemented-wasm-production'),
|
|
181
|
+
entry('statistical:confidence-norm-basic', 'statistical', '=CONFIDENCE.NORM(0.05,1,100)', 'implemented-wasm-production'),
|
|
182
|
+
entry('statistical:mode-basic', 'statistical', '=MODE(A1:A6)', 'implemented-wasm-production'),
|
|
183
|
+
entry('statistical:mode-sngl-basic', 'statistical', '=MODE.SNGL(A1:A6)', 'implemented-wasm-production'),
|
|
184
|
+
entry('statistical:stdev-basic', 'statistical', '=STDEV(A1:A4)', 'implemented-wasm-production'),
|
|
185
|
+
entry('statistical:stdeva-basic', 'statistical', '=STDEVA(2,TRUE(),"skip")', 'implemented-wasm-production'),
|
|
186
|
+
entry('statistical:var-basic', 'statistical', '=VAR(A1:A4)', 'implemented-wasm-production'),
|
|
187
|
+
entry('statistical:vara-basic', 'statistical', '=VARA(2,TRUE(),"skip")', 'implemented-wasm-production'),
|
|
188
|
+
entry('statistical:skew-basic', 'statistical', '=SKEW(A1:A5)', 'implemented-wasm-production'),
|
|
189
|
+
entry('statistical:kurt-basic', 'statistical', '=KURT(A1:A5)', 'implemented-wasm-production'),
|
|
190
|
+
entry('statistical:normdist-basic', 'statistical', '=NORMDIST(1,0,1,TRUE)', 'implemented-wasm-production'),
|
|
191
|
+
entry('statistical:norminv-basic', 'statistical', '=NORMINV(0.8413447460685429,0,1)', 'implemented-wasm-production'),
|
|
192
|
+
entry('statistical:normsdist-basic', 'statistical', '=NORMSDIST(1)', 'implemented-wasm-production'),
|
|
193
|
+
entry('statistical:normsinv-basic', 'statistical', '=NORMSINV(0.001)', 'implemented-wasm-production'),
|
|
194
|
+
entry('statistical:loginv-basic', 'statistical', '=LOGINV(0.5,0,1)', 'implemented-wasm-production'),
|
|
195
|
+
entry('statistical:lognormdist-basic', 'statistical', '=LOGNORMDIST(1,0,1)', 'implemented-wasm-production'),
|
|
196
|
+
entry('date-time:serial-addition', 'date-time', '=A1+7', 'implemented-wasm-production'),
|
|
197
|
+
entry('date-time:date-constructor', 'date-time', '=DATE(2026,3,15)', 'implemented-wasm-production'),
|
|
198
|
+
entry('date-time:today-volatile', 'date-time', '=TODAY()', 'implemented-wasm-production', {
|
|
199
|
+
prerequisites: ['core:value-model', 'core:date-serial-model', 'core:volatile-context'],
|
|
205
200
|
}),
|
|
206
|
-
entry(
|
|
207
|
-
entry(
|
|
208
|
-
entry(
|
|
209
|
-
entry(
|
|
210
|
-
entry(
|
|
211
|
-
entry(
|
|
212
|
-
entry(
|
|
213
|
-
entry(
|
|
214
|
-
entry(
|
|
215
|
-
entry(
|
|
216
|
-
entry(
|
|
217
|
-
entry(
|
|
218
|
-
entry(
|
|
219
|
-
entry(
|
|
220
|
-
entry(
|
|
221
|
-
entry(
|
|
222
|
-
entry(
|
|
223
|
-
entry(
|
|
224
|
-
entry(
|
|
225
|
-
entry(
|
|
226
|
-
entry(
|
|
227
|
-
entry(
|
|
228
|
-
entry(
|
|
229
|
-
entry(
|
|
230
|
-
entry(
|
|
231
|
-
entry(
|
|
232
|
-
entry(
|
|
233
|
-
entry(
|
|
234
|
-
entry(
|
|
235
|
-
entry(
|
|
236
|
-
entry(
|
|
237
|
-
entry(
|
|
238
|
-
entry(
|
|
239
|
-
entry(
|
|
240
|
-
entry(
|
|
241
|
-
entry(
|
|
242
|
-
entry(
|
|
243
|
-
entry(
|
|
244
|
-
entry(
|
|
245
|
-
entry(
|
|
246
|
-
entry(
|
|
247
|
-
entry(
|
|
248
|
-
entry(
|
|
249
|
-
entry(
|
|
250
|
-
entry(
|
|
251
|
-
entry(
|
|
252
|
-
entry(
|
|
253
|
-
entry(
|
|
254
|
-
entry(
|
|
255
|
-
entry(
|
|
256
|
-
entry(
|
|
257
|
-
entry(
|
|
258
|
-
entry(
|
|
259
|
-
entry(
|
|
260
|
-
entry(
|
|
261
|
-
entry(
|
|
262
|
-
entry(
|
|
263
|
-
entry(
|
|
264
|
-
entry(
|
|
265
|
-
entry(
|
|
266
|
-
entry(
|
|
267
|
-
entry(
|
|
268
|
-
entry(
|
|
269
|
-
entry(
|
|
270
|
-
entry(
|
|
271
|
-
entry(
|
|
272
|
-
entry(
|
|
273
|
-
entry(
|
|
274
|
-
entry(
|
|
275
|
-
entry(
|
|
276
|
-
entry(
|
|
277
|
-
entry(
|
|
278
|
-
entry(
|
|
279
|
-
entry(
|
|
280
|
-
entry(
|
|
281
|
-
entry(
|
|
282
|
-
notes:
|
|
201
|
+
entry('lookup-reference:address-basic', 'lookup-reference', '=ADDRESS(12,3)', 'implemented-wasm-production'),
|
|
202
|
+
entry('lookup-reference:index-basic', 'lookup-reference', '=INDEX(A1:B2,2,1)', 'implemented-wasm-production'),
|
|
203
|
+
entry('lookup-reference:match-exact', 'lookup-reference', '=MATCH("pear",A1:A3,0)', 'implemented-wasm-production'),
|
|
204
|
+
entry('lookup-reference:vlookup-exact', 'lookup-reference', '=VLOOKUP("pear",A1:B3,2,FALSE)', 'implemented-wasm-production'),
|
|
205
|
+
entry('lookup-reference:xlookup-exact', 'lookup-reference', '=XLOOKUP("pear",A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
206
|
+
entry('statistical:averageif-basic', 'statistical', '=AVERAGEIF(A1:A4,">0")', 'implemented-wasm-production'),
|
|
207
|
+
entry('statistical:countif-basic', 'statistical', '=COUNTIF(A1:A4,">0")', 'implemented-wasm-production'),
|
|
208
|
+
entry('statistical:chisqdist-basic', 'statistical', '=CHISQDIST(18.307,10)', 'implemented-wasm-production'),
|
|
209
|
+
entry('statistical:chiinv-basic', 'statistical', '=CHIINV(0.050001,10)', 'implemented-wasm-production'),
|
|
210
|
+
entry('statistical:chisq-inv-rt-basic', 'statistical', '=CHISQ.INV.RT(0.050001,10)', 'implemented-wasm-production'),
|
|
211
|
+
entry('statistical:chisqinv-basic', 'statistical', '=CHISQINV(0.050001,10)', 'implemented-wasm-production'),
|
|
212
|
+
entry('statistical:chisq-inv-basic', 'statistical', '=CHISQ.INV(0.93,1)', 'implemented-wasm-production'),
|
|
213
|
+
entry('statistical:chisq-test-basic', 'statistical', '=CHISQ.TEST(A1:B3,D1:E3)', 'implemented-wasm-production'),
|
|
214
|
+
entry('statistical:beta-dist-basic', 'statistical', '=BETA.DIST(2,8,10,TRUE,1,3)', 'implemented-wasm-production'),
|
|
215
|
+
entry('statistical:beta-inv-basic', 'statistical', '=BETA.INV(0.6854705810117458,8,10,1,3)', 'implemented-wasm-production'),
|
|
216
|
+
entry('statistical:f-dist-rt-basic', 'statistical', '=F.DIST.RT(15.2068649,6,4)', 'implemented-wasm-production'),
|
|
217
|
+
entry('statistical:fdist-basic', 'statistical', '=FDIST(15.2068649,6,4)', 'implemented-wasm-production'),
|
|
218
|
+
entry('statistical:f-inv-basic', 'statistical', '=F.INV(0.01,6,4)', 'implemented-wasm-production'),
|
|
219
|
+
entry('statistical:f-inv-rt-basic', 'statistical', '=F.INV.RT(0.01,6,4)', 'implemented-wasm-production'),
|
|
220
|
+
entry('statistical:f-test-basic', 'statistical', '=F.TEST(A1:A5,B1:B5)', 'implemented-wasm-production'),
|
|
221
|
+
entry('statistical:z-test-basic', 'statistical', '=Z.TEST(D1:D5,2,1)', 'implemented-wasm-production'),
|
|
222
|
+
entry('statistical:correl-basic', 'statistical', '=CORREL(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
223
|
+
entry('statistical:covar-basic', 'statistical', '=COVAR(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
224
|
+
entry('statistical:covariance-p-basic', 'statistical', '=COVARIANCE.P(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
225
|
+
entry('statistical:covariance-s-basic', 'statistical', '=COVARIANCE.S(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
226
|
+
entry('statistical:pearson-basic', 'statistical', '=PEARSON(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
227
|
+
entry('statistical:intercept-basic', 'statistical', '=INTERCEPT(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
228
|
+
entry('statistical:slope-basic', 'statistical', '=SLOPE(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
229
|
+
entry('statistical:rsq-basic', 'statistical', '=RSQ(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
230
|
+
entry('statistical:steyx-basic', 'statistical', '=STEYX(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
231
|
+
entry('statistical:rank-basic', 'statistical', '=RANK(20,A1:A4)', 'implemented-wasm-production'),
|
|
232
|
+
entry('statistical:rank-eq-basic', 'statistical', '=RANK.EQ(20,A1:A4)', 'implemented-wasm-production'),
|
|
233
|
+
entry('statistical:rank-avg-basic', 'statistical', '=RANK.AVG(20,A1:A4)', 'implemented-wasm-production'),
|
|
234
|
+
entry('statistical:median-basic', 'statistical', '=MEDIAN(A1:A8)', 'implemented-wasm-production'),
|
|
235
|
+
entry('statistical:small-basic', 'statistical', '=SMALL(A1:A8,3)', 'implemented-wasm-production'),
|
|
236
|
+
entry('statistical:large-basic', 'statistical', '=LARGE(A1:A8,2)', 'implemented-wasm-production'),
|
|
237
|
+
entry('statistical:percentile-basic', 'statistical', '=PERCENTILE(A1:A8,0.25)', 'implemented-wasm-production'),
|
|
238
|
+
entry('statistical:percentile-inc-basic', 'statistical', '=PERCENTILE.INC(A1:A8,0.25)', 'implemented-wasm-production'),
|
|
239
|
+
entry('statistical:percentile-exc-basic', 'statistical', '=PERCENTILE.EXC(A1:A8,0.25)', 'implemented-wasm-production'),
|
|
240
|
+
entry('statistical:percentrank-basic', 'statistical', '=PERCENTRANK(A1:A8,8)', 'implemented-wasm-production'),
|
|
241
|
+
entry('statistical:percentrank-inc-basic', 'statistical', '=PERCENTRANK.INC(A1:A8,8)', 'implemented-wasm-production'),
|
|
242
|
+
entry('statistical:percentrank-exc-basic', 'statistical', '=PERCENTRANK.EXC(A1:A8,8)', 'implemented-wasm-production'),
|
|
243
|
+
entry('statistical:quartile-basic', 'statistical', '=QUARTILE(A1:A8,1)', 'implemented-wasm-production'),
|
|
244
|
+
entry('statistical:quartile-inc-basic', 'statistical', '=QUARTILE.INC(A1:A8,1)', 'implemented-wasm-production'),
|
|
245
|
+
entry('statistical:quartile-exc-basic', 'statistical', '=QUARTILE.EXC(A1:A8,1)', 'implemented-wasm-production'),
|
|
246
|
+
entry('statistical:mode-mult-basic', 'statistical', '=MODE.MULT(A1:A6)', 'implemented-wasm-production'),
|
|
247
|
+
entry('statistical:frequency-basic', 'statistical', '=FREQUENCY(A1:A6,B1:B3)', 'implemented-wasm-production'),
|
|
248
|
+
entry('statistical:t-dist-basic', 'statistical', '=T.DIST(1,1,TRUE)', 'implemented-wasm-production'),
|
|
249
|
+
entry('statistical:t-inv-2t-basic', 'statistical', '=T.INV.2T(0.5,1)', 'implemented-wasm-production'),
|
|
250
|
+
entry('statistical:confidence-t-basic', 'statistical', '=CONFIDENCE.T(0.5,2,4)', 'implemented-wasm-production'),
|
|
251
|
+
entry('statistical:gamma-inv-basic', 'statistical', '=GAMMA.INV(0.08030139707139418,3,2)', 'implemented-wasm-production'),
|
|
252
|
+
entry('statistical:t-test-basic', 'statistical', '=T.TEST(A1:A3,B1:B3,2,1)', 'implemented-wasm-production'),
|
|
253
|
+
entry('statistical:forecast-basic', 'statistical', '=FORECAST(4,A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
254
|
+
entry('statistical:forecast-linear-basic', 'statistical', '=FORECAST.LINEAR(4,A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
255
|
+
entry('statistical:trend-basic', 'statistical', '=TREND(A1:A3,B1:B3,D1:D2)', 'implemented-wasm-production'),
|
|
256
|
+
entry('statistical:growth-basic', 'statistical', '=GROWTH(A1:A3,B1:B3,D1:D2)', 'implemented-wasm-production'),
|
|
257
|
+
entry('statistical:linest-basic', 'statistical', '=LINEST(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
258
|
+
entry('statistical:logest-basic', 'statistical', '=LOGEST(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
259
|
+
entry('statistical:prob-basic', 'statistical', '=PROB(A1:A4,B1:B4,2,3)', 'implemented-wasm-production'),
|
|
260
|
+
entry('statistical:trimmean-basic', 'statistical', '=TRIMMEAN(A1:A8,0.25)', 'implemented-wasm-production'),
|
|
261
|
+
entry('statistical:daverage-basic', 'statistical', '=DAVERAGE(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
262
|
+
entry('statistical:dcount-basic', 'statistical', '=DCOUNT(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
263
|
+
entry('statistical:dcounta-basic', 'statistical', '=DCOUNTA(A1:C5,"Height",E1:E2)', 'implemented-wasm-production'),
|
|
264
|
+
entry('statistical:dget-basic', 'statistical', '=DGET(A1:C5,"Height",F1:F2)', 'implemented-wasm-production'),
|
|
265
|
+
entry('statistical:dmax-basic', 'statistical', '=DMAX(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
266
|
+
entry('statistical:dmin-basic', 'statistical', '=DMIN(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
267
|
+
entry('statistical:dproduct-basic', 'statistical', '=DPRODUCT(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
268
|
+
entry('statistical:dstdev-basic', 'statistical', '=DSTDEV(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
269
|
+
entry('statistical:dstdevp-basic', 'statistical', '=DSTDEVP(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
270
|
+
entry('statistical:dsum-basic', 'statistical', '=DSUM(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
271
|
+
entry('statistical:dvar-basic', 'statistical', '=DVAR(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
272
|
+
entry('statistical:dvarp-basic', 'statistical', '=DVARP(A1:C5,"Yield",E1:E2)', 'implemented-wasm-production'),
|
|
273
|
+
entry('information:isblank-basic', 'information', '=ISBLANK(A1)', 'implemented-wasm-production'),
|
|
274
|
+
entry('information:isnumber-basic', 'information', '=ISNUMBER(A1)', 'implemented-wasm-production'),
|
|
275
|
+
entry('information:istext-basic', 'information', '=ISTEXT(A1)', 'implemented-wasm-production'),
|
|
276
|
+
entry('dynamic-array:sequence-spill', 'dynamic-array', '=SEQUENCE(3,1,1,1)', 'implemented-wasm-production', {
|
|
277
|
+
notes: 'Top-level SEQUENCE spills now execute on the AssemblyScript path and reuse the existing workbook spill metadata contract; broader array families remain blocked.',
|
|
283
278
|
}),
|
|
284
|
-
entry(
|
|
285
|
-
notes:
|
|
279
|
+
entry('dynamic-array:sequence-aggregate', 'dynamic-array', '=SUM(SEQUENCE(A1,1,1,1))', 'implemented-wasm-production', {
|
|
280
|
+
notes: 'Numeric aggregate consumers can now read transient native SEQUENCE arrays directly on the AssemblyScript path without reviving the removed JS runtime fallback.',
|
|
286
281
|
}),
|
|
287
|
-
entry(
|
|
288
|
-
entry(
|
|
289
|
-
entry(
|
|
290
|
-
notes:
|
|
282
|
+
entry('dynamic-array:filter-basic', 'dynamic-array', '=FILTER(A1:A4,A1:A4>2)', 'implemented-wasm-production'),
|
|
283
|
+
entry('dynamic-array:unique-basic', 'dynamic-array', '=UNIQUE(A1:A4)', 'implemented-wasm-production'),
|
|
284
|
+
entry('dynamic-array:groupby-basic', 'dynamic-array', '=GROUPBY(A1:A5,C1:C5,SUM,3,1)', 'implemented-wasm-production', {
|
|
285
|
+
notes: 'The canonical SUM-form GROUPBY case now lowers onto an internal native grouped-array builtin, so the canonical spill executes on the wasm path with oracle coverage.',
|
|
291
286
|
}),
|
|
292
|
-
entry(
|
|
293
|
-
notes:
|
|
287
|
+
entry('dynamic-array:pivotby-basic', 'dynamic-array', '=PIVOTBY(A1:A5,B1:B5,C1:C5,SUM,3,1,0,1)', 'implemented-wasm-production', {
|
|
288
|
+
notes: 'The canonical SUM-form PIVOTBY case now lowers onto an internal native grouped-array builtin, so the canonical pivot spill executes on the wasm path with oracle coverage.',
|
|
294
289
|
}),
|
|
295
|
-
entry(
|
|
296
|
-
notes:
|
|
290
|
+
entry('names:defined-name-scalar', 'names', '=TaxRate*A1', 'implemented-wasm-production', {
|
|
291
|
+
notes: 'Scalar workbook names rebind onto the AssemblyScript path once the engine has concrete scalar metadata; reference-valued names remain blocked.',
|
|
297
292
|
}),
|
|
298
|
-
entry(
|
|
299
|
-
scope:
|
|
300
|
-
notes:
|
|
293
|
+
entry('names:defined-name-case-insensitive', 'names', '=taxrate*A1', 'implemented-wasm-production', {
|
|
294
|
+
scope: 'extended',
|
|
295
|
+
notes: 'Case-insensitive scalar workbook names rebind onto the AssemblyScript path after metadata normalization.',
|
|
301
296
|
}),
|
|
302
|
-
entry(
|
|
303
|
-
scope:
|
|
304
|
-
notes:
|
|
297
|
+
entry('names:defined-name-multi-scalar-pack', 'names', '=TaxRate+FeeRate', 'implemented-wasm-production', {
|
|
298
|
+
scope: 'extended',
|
|
299
|
+
notes: 'Multiple scalar workbook names can participate in one AssemblyScript-routed scalar expression without widening onto reference-valued metadata.',
|
|
305
300
|
}),
|
|
306
|
-
entry(
|
|
307
|
-
scope:
|
|
308
|
-
notes:
|
|
301
|
+
entry('names:defined-name-missing', 'names', '=MissingRate*A1', 'implemented-wasm-production', {
|
|
302
|
+
scope: 'extended',
|
|
303
|
+
notes: 'Missing workbook-level names now stay on the AssemblyScript path, surface #NAME?, and rebind natively once the name appears.',
|
|
309
304
|
}),
|
|
310
|
-
entry(
|
|
311
|
-
scope:
|
|
312
|
-
notes:
|
|
305
|
+
entry('lookup-reference:multiple-operations-basic', 'lookup-reference', '=MULTIPLE.OPERATIONS(B5,B3,C4,B2,D2)', 'implemented-js', {
|
|
306
|
+
scope: 'extended',
|
|
307
|
+
notes: 'MULTIPLE.OPERATIONS now routes through the workbook-aware JS what-if contract and is covered by both fixture-harness and engine integration tests.',
|
|
313
308
|
}),
|
|
314
|
-
entry(
|
|
315
|
-
notes:
|
|
309
|
+
entry('tables:table-total-row-sum', 'tables', '=SUM(Sales[Amount])', 'implemented-wasm-production', {
|
|
310
|
+
notes: 'Table-backed aggregate formulas now compile through metadata substitution and route onto the native aggregate path once the table exists.',
|
|
316
311
|
}),
|
|
317
|
-
entry(
|
|
318
|
-
notes:
|
|
312
|
+
entry('structured-reference:table-column-ref', 'structured-reference', '=SUM(Sales[Amount])', 'implemented-wasm-production', {
|
|
313
|
+
notes: 'Structured column references now compile through metadata substitution and route onto the native aggregate path once the table exists.',
|
|
319
314
|
}),
|
|
320
|
-
entry(
|
|
321
|
-
prerequisites: [
|
|
315
|
+
entry('volatile:rand-basic', 'volatile', '=RAND()', 'implemented-wasm-production', {
|
|
316
|
+
prerequisites: ['core:volatile-context', 'core:value-model'],
|
|
322
317
|
}),
|
|
323
|
-
entry(
|
|
324
|
-
notes:
|
|
318
|
+
entry('lambda:let-basic', 'lambda', '=LET(x,2,x+3)', 'implemented-wasm-production', {
|
|
319
|
+
notes: 'LET formulas with rewrite-safe bindings now lower to ordinary scalar AST before binding, which lets deterministic cases route through the native fast path without a general closure VM.',
|
|
325
320
|
}),
|
|
326
|
-
entry(
|
|
327
|
-
notes:
|
|
321
|
+
entry('lambda:lambda-invoke', 'lambda', '=LAMBDA(x,x+1)(4)', 'implemented-wasm-production', {
|
|
322
|
+
notes: 'Immediate LAMBDA invocation now rewrites to the invoked body with argument substitution before binding, so scalar deterministic cases compile onto the native path.',
|
|
328
323
|
}),
|
|
329
|
-
entry(
|
|
330
|
-
notes:
|
|
324
|
+
entry('lambda:map-basic', 'lambda', '=MAP(A1:A3,LAMBDA(x,x*2))', 'implemented-wasm-production', {
|
|
325
|
+
notes: 'MAP calls whose lambda body rewrites to an ordinary broadcasted array expression now lower before binding and execute on the native spill path.',
|
|
331
326
|
}),
|
|
332
|
-
entry(
|
|
333
|
-
entry(
|
|
334
|
-
notes:
|
|
327
|
+
entry('logical:if-true-branch', 'logical', '=IF(A1,A2,A3)', 'implemented-wasm-production'),
|
|
328
|
+
entry('logical:if-condition-error', 'logical', '=IF(1/0,1,2)', 'implemented-wasm-production', {
|
|
329
|
+
notes: 'The native branch VM now propagates IF condition errors before either branch executes.',
|
|
335
330
|
}),
|
|
336
|
-
entry(
|
|
337
|
-
entry(
|
|
338
|
-
entry(
|
|
339
|
-
entry(
|
|
340
|
-
entry(
|
|
341
|
-
entry(
|
|
342
|
-
entry(
|
|
343
|
-
entry(
|
|
344
|
-
entry(
|
|
345
|
-
entry(
|
|
346
|
-
notes:
|
|
331
|
+
entry('logical:iferror-catches-any-error', 'logical', '=IFERROR(1/0,"fallback")', 'implemented-wasm-production'),
|
|
332
|
+
entry('logical:ifna-catches-na-only', 'logical', '=IFNA(NA(),"missing")', 'implemented-wasm-production'),
|
|
333
|
+
entry('logical:and-false-on-empty', 'logical', '=AND(TRUE,A1)', 'implemented-wasm-production'),
|
|
334
|
+
entry('logical:or-true-branch', 'logical', '=OR(A1,TRUE)', 'implemented-wasm-production'),
|
|
335
|
+
entry('logical:not-number', 'logical', '=NOT(2)', 'implemented-wasm-production'),
|
|
336
|
+
entry('information:isblank-empty', 'information', '=ISBLANK(A1)', 'implemented-wasm-production'),
|
|
337
|
+
entry('information:isnumber-number', 'information', '=ISNUMBER(42)', 'implemented-wasm-production'),
|
|
338
|
+
entry('information:istext-string', 'information', '=ISTEXT("hello")', 'implemented-wasm-production'),
|
|
339
|
+
entry('text:len-counts-plain-string-length', 'text', '=LEN("hello")', 'implemented-wasm-production'),
|
|
340
|
+
entry('text:exact-basic', 'text', '=EXACT("Alpha","alpha")', 'implemented-wasm-production', {
|
|
341
|
+
notes: 'EXACT now routes through the string-aware WASM runtime.',
|
|
347
342
|
}),
|
|
348
|
-
entry(
|
|
349
|
-
entry(
|
|
350
|
-
entry(
|
|
351
|
-
entry(
|
|
352
|
-
entry(
|
|
353
|
-
entry(
|
|
354
|
-
entry(
|
|
355
|
-
entry(
|
|
356
|
-
entry(
|
|
357
|
-
entry(
|
|
358
|
-
entry(
|
|
359
|
-
entry(
|
|
360
|
-
entry(
|
|
361
|
-
notes:
|
|
343
|
+
entry('text:left-basic', 'text', '=LEFT("alpha",3)', 'implemented-wasm-production'),
|
|
344
|
+
entry('text:right-basic', 'text', '=RIGHT("alpha",2)', 'implemented-wasm-production'),
|
|
345
|
+
entry('text:mid-basic', 'text', '=MID("alphabet",2,3)', 'implemented-wasm-production'),
|
|
346
|
+
entry('text:trim-basic', 'text', '=TRIM(" alpha beta ")', 'implemented-wasm-production'),
|
|
347
|
+
entry('text:upper-basic', 'text', '=UPPER("Alpha beta")', 'implemented-wasm-production'),
|
|
348
|
+
entry('text:lower-basic', 'text', '=LOWER("Alpha BETA")', 'implemented-wasm-production'),
|
|
349
|
+
entry('text:find-basic', 'text', '=FIND("ph","alphabet")', 'implemented-wasm-production'),
|
|
350
|
+
entry('text:search-basic', 'text', '=SEARCH("PH","alphabet")', 'implemented-wasm-production'),
|
|
351
|
+
entry('text:textbefore-basic', 'text', '=TEXTBEFORE("alpha-beta","-")', 'implemented-wasm-production'),
|
|
352
|
+
entry('text:textafter-basic', 'text', '=TEXTAFTER("alpha-beta","-")', 'implemented-wasm-production'),
|
|
353
|
+
entry('text:textjoin-basic', 'text', '=TEXTJOIN("-",TRUE,A1:A3)', 'implemented-wasm-production'),
|
|
354
|
+
entry('text:textsplit-basic', 'text', '=TEXTSPLIT(A1,",","|")', 'implemented-wasm-production'),
|
|
355
|
+
entry('text:value-basic', 'text', '=VALUE("42")', 'implemented-wasm-production', {
|
|
356
|
+
notes: 'VALUE now coerces scalar text inputs on the AssemblyScript path, including trimmed decimals and exponent forms.',
|
|
362
357
|
}),
|
|
363
|
-
entry(
|
|
364
|
-
entry(
|
|
365
|
-
entry(
|
|
366
|
-
entry(
|
|
367
|
-
notes:
|
|
358
|
+
entry('lookup-reference:choose-basic', 'lookup-reference', '=CHOOSE(2,"red","blue","green")', 'implemented-wasm-production'),
|
|
359
|
+
entry('lookup-reference:xmatch-basic', 'lookup-reference', '=XMATCH("pear",A1:A3,0)', 'implemented-wasm-production'),
|
|
360
|
+
entry('lookup-reference:hlookup-basic', 'lookup-reference', '=HLOOKUP("pear",A1:C2,2,FALSE)', 'implemented-wasm-production'),
|
|
361
|
+
entry('lookup-reference:offset-basic', 'lookup-reference', '=OFFSET(A1,1,1)', 'implemented-wasm-production', {
|
|
362
|
+
notes: 'OFFSET now executes on the AssemblyScript path for numeric inputs, including simple in-bounds offset ranges.',
|
|
368
363
|
}),
|
|
369
|
-
entry(
|
|
370
|
-
entry(
|
|
371
|
-
entry(
|
|
372
|
-
entry(
|
|
373
|
-
entry(
|
|
374
|
-
entry(
|
|
375
|
-
entry(
|
|
376
|
-
entry(
|
|
377
|
-
entry(
|
|
378
|
-
entry(
|
|
379
|
-
entry(
|
|
380
|
-
entry(
|
|
381
|
-
entry(
|
|
382
|
-
scope:
|
|
383
|
-
prerequisites: [
|
|
384
|
-
notes:
|
|
364
|
+
entry('dynamic-array:take-basic', 'dynamic-array', '=TAKE(A1:A4,2)', 'implemented-wasm-production'),
|
|
365
|
+
entry('dynamic-array:drop-basic', 'dynamic-array', '=DROP(A1:A4,2)', 'implemented-wasm-production'),
|
|
366
|
+
entry('dynamic-array:choosecols-basic', 'dynamic-array', '=CHOOSECOLS(A1:C2,1,3)', 'implemented-wasm-production'),
|
|
367
|
+
entry('dynamic-array:chooserows-basic', 'dynamic-array', '=CHOOSEROWS(A1:B3,1,3)', 'implemented-wasm-production'),
|
|
368
|
+
entry('statistical:sumif-basic', 'statistical', '=SUMIF(A1:A4,">0",B1:B4)', 'implemented-wasm-production'),
|
|
369
|
+
entry('statistical:sumifs-basic', 'statistical', '=SUMIFS(C1:C4,A1:A4,">0",B1:B4,"x")', 'implemented-wasm-production'),
|
|
370
|
+
entry('statistical:averageifs-basic', 'statistical', '=AVERAGEIFS(C1:C4,A1:A4,">0",B1:B4,"x")', 'implemented-wasm-production'),
|
|
371
|
+
entry('statistical:countifs-basic', 'statistical', '=COUNTIFS(A1:A4,">0",B1:B4,"x")', 'implemented-wasm-production'),
|
|
372
|
+
entry('math:sumproduct-basic', 'math', '=SUMPRODUCT(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
373
|
+
entry('math:int-basic', 'math', '=INT(-3.1)', 'implemented-wasm-production'),
|
|
374
|
+
entry('math:roundup-basic', 'math', '=ROUNDUP(12.341,2)', 'implemented-wasm-production'),
|
|
375
|
+
entry('math:rounddown-basic', 'math', '=ROUNDDOWN(12.349,2)', 'implemented-wasm-production'),
|
|
376
|
+
entry('arithmetic:cross-sheet-multiply', 'arithmetic', '=Sheet2!B1*3', 'implemented-wasm-production', {
|
|
377
|
+
scope: 'extended',
|
|
378
|
+
prerequisites: ['core:value-model', 'core:reference-model'],
|
|
379
|
+
notes: 'Qualified scalar references stay on the native arithmetic path once the target sheet is present.',
|
|
385
380
|
}),
|
|
386
|
-
entry(
|
|
387
|
-
scope:
|
|
388
|
-
prerequisites: [
|
|
389
|
-
notes:
|
|
381
|
+
entry('arithmetic:cross-sheet-empty-cell-zero', 'arithmetic', '=Sheet2!B1*3', 'implemented-wasm-production', {
|
|
382
|
+
scope: 'extended',
|
|
383
|
+
prerequisites: ['core:value-model', 'core:reference-model'],
|
|
384
|
+
notes: 'Existing blank cells on another sheet coerce through the usual arithmetic empty-cell semantics.',
|
|
390
385
|
}),
|
|
391
|
-
entry(
|
|
392
|
-
scope:
|
|
393
|
-
prerequisites: [
|
|
394
|
-
notes:
|
|
386
|
+
entry('arithmetic:missing-sheet-ref-error', 'arithmetic', '=Sheet2!B1*3', 'implemented-wasm-production', {
|
|
387
|
+
scope: 'extended',
|
|
388
|
+
prerequisites: ['core:value-model', 'core:reference-model'],
|
|
389
|
+
notes: 'Unresolved qualified cells now stay on the native path via explicit unresolved-ref operands that emit #REF! until rebinding can occur.',
|
|
395
390
|
}),
|
|
396
|
-
entry(
|
|
397
|
-
prerequisites: [
|
|
398
|
-
notes:
|
|
391
|
+
entry('date-time:now-volatile', 'date-time', '=NOW()', 'implemented-wasm-production', {
|
|
392
|
+
prerequisites: ['core:value-model', 'core:date-serial-model', 'core:volatile-context'],
|
|
393
|
+
notes: 'NOW now captures a single recalc-epoch serial on the host and executes on the AssemblyScript path.',
|
|
399
394
|
}),
|
|
400
|
-
entry(
|
|
401
|
-
entry(
|
|
402
|
-
entry(
|
|
403
|
-
entry(
|
|
404
|
-
entry(
|
|
405
|
-
entry(
|
|
406
|
-
entry(
|
|
407
|
-
entry(
|
|
408
|
-
entry(
|
|
409
|
-
entry(
|
|
410
|
-
entry(
|
|
411
|
-
entry(
|
|
412
|
-
entry(
|
|
413
|
-
entry(
|
|
414
|
-
entry(
|
|
415
|
-
entry(
|
|
416
|
-
entry(
|
|
417
|
-
entry(
|
|
418
|
-
entry(
|
|
419
|
-
entry(
|
|
420
|
-
entry(
|
|
421
|
-
entry(
|
|
422
|
-
entry(
|
|
423
|
-
entry(
|
|
424
|
-
entry(
|
|
425
|
-
entry(
|
|
426
|
-
entry(
|
|
427
|
-
entry(
|
|
428
|
-
entry(
|
|
429
|
-
entry(
|
|
430
|
-
entry(
|
|
431
|
-
entry(
|
|
432
|
-
entry(
|
|
433
|
-
entry(
|
|
434
|
-
entry(
|
|
435
|
-
entry(
|
|
436
|
-
entry(
|
|
437
|
-
entry(
|
|
438
|
-
entry(
|
|
439
|
-
entry(
|
|
440
|
-
entry(
|
|
441
|
-
entry(
|
|
442
|
-
entry(
|
|
443
|
-
entry(
|
|
444
|
-
entry(
|
|
445
|
-
entry(
|
|
446
|
-
entry(
|
|
447
|
-
entry(
|
|
448
|
-
entry(
|
|
449
|
-
entry(
|
|
450
|
-
entry(
|
|
451
|
-
entry(
|
|
452
|
-
entry(
|
|
453
|
-
entry(
|
|
454
|
-
entry(
|
|
455
|
-
entry(
|
|
456
|
-
entry(
|
|
457
|
-
entry(
|
|
458
|
-
entry(
|
|
459
|
-
entry(
|
|
460
|
-
entry(
|
|
461
|
-
entry(
|
|
462
|
-
scope:
|
|
463
|
-
prerequisites: [
|
|
464
|
-
notes:
|
|
395
|
+
entry('date-time:time-basic', 'date-time', '=TIME(12,30,0)', 'implemented-wasm-production'),
|
|
396
|
+
entry('date-time:hour-basic', 'date-time', '=HOUR(A1)', 'implemented-wasm-production'),
|
|
397
|
+
entry('date-time:minute-basic', 'date-time', '=MINUTE(A1)', 'implemented-wasm-production'),
|
|
398
|
+
entry('date-time:second-basic', 'date-time', '=SECOND(A1)', 'implemented-wasm-production'),
|
|
399
|
+
entry('date-time:datedif-ym', 'date-time', '=DATEDIF(DATE(2020,1,15),DATE(2021,3,20),"YM")', 'implemented-wasm-production'),
|
|
400
|
+
entry('date-time:days360-basic', 'date-time', '=DAYS360(DATE(2024,1,29),DATE(2024,3,31))', 'implemented-wasm-production'),
|
|
401
|
+
entry('date-time:isoweeknum-basic', 'date-time', '=ISOWEEKNUM(DATE(2024,1,1))', 'implemented-wasm-production'),
|
|
402
|
+
entry('date-time:workday-intl-basic', 'date-time', '=WORKDAY.INTL(A1,2,7,B1)', 'implemented-wasm-production'),
|
|
403
|
+
entry('date-time:timevalue-basic', 'date-time', '=TIMEVALUE("1:30 PM")', 'implemented-wasm-production'),
|
|
404
|
+
entry('date-time:yearfrac-basic', 'date-time', '=YEARFRAC(DATE(2024,1,1),DATE(2024,7,1),3)', 'implemented-wasm-production'),
|
|
405
|
+
entry('date-time:fvschedule-basic', 'date-time', '=FVSCHEDULE(1000,0.09,0.11,0.1)', 'implemented-wasm-production'),
|
|
406
|
+
entry('date-time:effect-basic', 'date-time', '=EFFECT(12%,12)', 'implemented-wasm-production'),
|
|
407
|
+
entry('date-time:nominal-basic', 'date-time', '=NOMINAL(0.12682503013196977,12)', 'implemented-wasm-production'),
|
|
408
|
+
entry('date-time:pduration-basic', 'date-time', '=PDURATION(10%,100,121)', 'implemented-wasm-production'),
|
|
409
|
+
entry('date-time:rri-basic', 'date-time', '=RRI(2,100,121)', 'implemented-wasm-production'),
|
|
410
|
+
entry('date-time:fv-basic', 'date-time', '=FV(10%,2,-100,-1000)', 'implemented-wasm-production'),
|
|
411
|
+
entry('date-time:pv-basic', 'date-time', '=PV(10%,2,-576.1904761904761)', 'implemented-wasm-production'),
|
|
412
|
+
entry('date-time:pmt-basic', 'date-time', '=PMT(10%,2,1000)', 'implemented-wasm-production'),
|
|
413
|
+
entry('date-time:nper-basic', 'date-time', '=NPER(10%,-576.1904761904761,1000)', 'implemented-wasm-production'),
|
|
414
|
+
entry('date-time:npv-basic', 'date-time', '=NPV(10%,100,200,300)', 'implemented-wasm-production'),
|
|
415
|
+
entry('date-time:rate-basic', 'date-time', '=RATE(48,-200,8000)', 'implemented-wasm-production'),
|
|
416
|
+
entry('date-time:irr-basic', 'date-time', '=IRR(A1:A6)', 'implemented-wasm-production'),
|
|
417
|
+
entry('date-time:mirr-basic', 'date-time', '=MIRR(A1:A6,10%,12%)', 'implemented-wasm-production'),
|
|
418
|
+
entry('date-time:xnpv-basic', 'date-time', '=XNPV(0.09,A1:A5,B1:B5)', 'implemented-wasm-production'),
|
|
419
|
+
entry('date-time:xirr-basic', 'date-time', '=XIRR(A1:A5,B1:B5)', 'implemented-wasm-production'),
|
|
420
|
+
entry('date-time:ipmt-basic', 'date-time', '=IPMT(10%,1,2,1000)', 'implemented-wasm-production'),
|
|
421
|
+
entry('date-time:ppmt-basic', 'date-time', '=PPMT(10%,1,2,1000)', 'implemented-wasm-production'),
|
|
422
|
+
entry('date-time:ispmt-basic', 'date-time', '=ISPMT(10%,1,2,1000)', 'implemented-wasm-production'),
|
|
423
|
+
entry('date-time:cumipmt-basic', 'date-time', '=CUMIPMT(9%/12,30*12,125000,13,24,0)', 'implemented-wasm-production'),
|
|
424
|
+
entry('date-time:cumprinc-basic', 'date-time', '=CUMPRINC(9%/12,30*12,125000,13,24,0)', 'implemented-wasm-production'),
|
|
425
|
+
entry('date-time:db-basic', 'date-time', '=DB(10000,1000,5,1)', 'implemented-wasm-production'),
|
|
426
|
+
entry('date-time:ddb-basic', 'date-time', '=DDB(2400,300,10,2)', 'implemented-wasm-production'),
|
|
427
|
+
entry('date-time:vdb-basic', 'date-time', '=VDB(2400,300,10,1,3)', 'implemented-wasm-production'),
|
|
428
|
+
entry('date-time:sln-basic', 'date-time', '=SLN(10000,1000,9)', 'implemented-wasm-production'),
|
|
429
|
+
entry('date-time:syd-basic', 'date-time', '=SYD(10000,1000,9,1)', 'implemented-wasm-production'),
|
|
430
|
+
entry('date-time:disc-basic', 'date-time', '=DISC(DATE(2023,1,1),DATE(2023,4,1),97,100,2)', 'implemented-wasm-production'),
|
|
431
|
+
entry('date-time:intrate-basic', 'date-time', '=INTRATE(DATE(2023,1,1),DATE(2023,4,1),1000,1030,2)', 'implemented-wasm-production'),
|
|
432
|
+
entry('date-time:received-basic', 'date-time', '=RECEIVED(DATE(2023,1,1),DATE(2023,4,1),1000,0.12,2)', 'implemented-wasm-production'),
|
|
433
|
+
entry('date-time:pricedisc-basic', 'date-time', '=PRICEDISC(DATE(2008,2,16),DATE(2008,3,1),0.0525,100,2)', 'implemented-wasm-production'),
|
|
434
|
+
entry('date-time:yielddisc-basic', 'date-time', '=YIELDDISC(DATE(2008,2,16),DATE(2008,3,1),99.795,100,2)', 'implemented-wasm-production'),
|
|
435
|
+
entry('date-time:pricemat-basic', 'date-time', '=PRICEMAT(DATE(2008,2,15),DATE(2008,4,13),DATE(2007,11,11),0.061,0.061,0)', 'implemented-wasm-production'),
|
|
436
|
+
entry('date-time:yieldmat-basic', 'date-time', '=YIELDMAT(DATE(2008,3,15),DATE(2008,11,3),DATE(2007,11,8),0.0625,100.0123,0)', 'implemented-wasm-production'),
|
|
437
|
+
entry('date-time:oddfprice-basic', 'date-time', '=ODDFPRICE(DATE(2008,11,11),DATE(2021,3,1),DATE(2008,10,15),DATE(2009,3,1),0.0785,0.0625,100,2,1)', 'implemented-wasm-production'),
|
|
438
|
+
entry('date-time:oddfyield-basic', 'date-time', '=ODDFYIELD(DATE(2008,11,11),DATE(2021,3,1),DATE(2008,10,15),DATE(2009,3,1),0.0575,84.5,100,2,0)', 'implemented-wasm-production'),
|
|
439
|
+
entry('date-time:oddlprice-basic', 'date-time', '=ODDLPRICE(DATE(2008,2,7),DATE(2008,6,15),DATE(2007,10,15),0.0375,0.0405,100,2,0)', 'implemented-wasm-production'),
|
|
440
|
+
entry('date-time:oddlyield-basic', 'date-time', '=ODDLYIELD(DATE(2008,4,20),DATE(2008,6,15),DATE(2007,12,24),0.0375,99.875,100,2,0)', 'implemented-wasm-production'),
|
|
441
|
+
entry('date-time:coupdaybs-basic', 'date-time', '=COUPDAYBS(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
442
|
+
entry('date-time:coupdays-basic', 'date-time', '=COUPDAYS(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
443
|
+
entry('date-time:coupdaysnc-basic', 'date-time', '=COUPDAYSNC(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
444
|
+
entry('date-time:coupncd-basic', 'date-time', '=COUPNCD(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
445
|
+
entry('date-time:coupnum-basic', 'date-time', '=COUPNUM(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
446
|
+
entry('date-time:couppcd-basic', 'date-time', '=COUPPCD(DATE(2007,1,25),DATE(2009,11,15),2,4)', 'implemented-wasm-production'),
|
|
447
|
+
entry('date-time:price-basic', 'date-time', '=PRICE(DATE(2008,2,15),DATE(2017,11,15),0.0575,0.065,100,2,0)', 'implemented-wasm-production'),
|
|
448
|
+
entry('date-time:yield-basic', 'date-time', '=YIELD(DATE(2008,2,15),DATE(2016,11,15),0.0575,95.04287,100,2,0)', 'implemented-wasm-production'),
|
|
449
|
+
entry('date-time:duration-basic', 'date-time', '=DURATION(DATE(2018,7,1),DATE(2048,1,1),0.08,0.09,2,1)', 'implemented-wasm-production'),
|
|
450
|
+
entry('date-time:mduration-basic', 'date-time', '=MDURATION(DATE(2008,1,1),DATE(2016,1,1),0.08,0.09,2,1)', 'implemented-wasm-production'),
|
|
451
|
+
entry('date-time:tbillprice-basic', 'date-time', '=TBILLPRICE(DATE(2008,3,31),DATE(2008,6,1),0.09)', 'implemented-wasm-production'),
|
|
452
|
+
entry('date-time:tbillyield-basic', 'date-time', '=TBILLYIELD(DATE(2008,3,31),DATE(2008,6,1),98.45)', 'implemented-wasm-production'),
|
|
453
|
+
entry('date-time:tbilleq-basic', 'date-time', '=TBILLEQ(DATE(2008,3,31),DATE(2008,6,1),0.0914)', 'implemented-wasm-production'),
|
|
454
|
+
entry('date-time:networkdays-intl-basic', 'date-time', '=NETWORKDAYS.INTL(A1,A2,7,B1)', 'implemented-wasm-production'),
|
|
455
|
+
entry('date-time:weekday-basic', 'date-time', '=WEEKDAY(DATE(2026,3,15))', 'implemented-wasm-production'),
|
|
456
|
+
entry('aggregation:cross-sheet-range-sum', 'aggregation', '=SUM(Sheet2!A1:A2)', 'implemented-wasm-production', {
|
|
457
|
+
scope: 'extended',
|
|
458
|
+
prerequisites: ['core:value-model', 'core:range-iterators', 'core:reference-model'],
|
|
459
|
+
notes: 'Resolved qualified ranges now stay on the native aggregation path.',
|
|
465
460
|
}),
|
|
466
|
-
entry(
|
|
467
|
-
scope:
|
|
468
|
-
prerequisites: [
|
|
469
|
-
notes:
|
|
461
|
+
entry('aggregation:cross-sheet-empty-range-zero', 'aggregation', '=SUM(Sheet2!A1:A2)', 'implemented-wasm-production', {
|
|
462
|
+
scope: 'extended',
|
|
463
|
+
prerequisites: ['core:value-model', 'core:range-iterators', 'core:reference-model'],
|
|
464
|
+
notes: 'Existing blank ranges on another sheet aggregate as zero once the referenced sheet exists.',
|
|
470
465
|
}),
|
|
471
|
-
entry(
|
|
472
|
-
scope:
|
|
473
|
-
prerequisites: [
|
|
474
|
-
notes:
|
|
466
|
+
entry('aggregation:missing-sheet-range-ref-error', 'aggregation', '=SUM(Sheet2!A1:A2)', 'implemented-wasm-production', {
|
|
467
|
+
scope: 'extended',
|
|
468
|
+
prerequisites: ['core:value-model', 'core:range-iterators', 'core:reference-model'],
|
|
469
|
+
notes: 'Missing qualified ranges now stay on the native path via explicit unresolved-range operands that emit #REF! until later rebinding.',
|
|
475
470
|
}),
|
|
476
|
-
entry(
|
|
477
|
-
entry(
|
|
478
|
-
entry(
|
|
479
|
-
entry(
|
|
480
|
-
entry(
|
|
481
|
-
entry(
|
|
482
|
-
entry(
|
|
483
|
-
notes:
|
|
471
|
+
entry('dynamic-array:sort-basic', 'dynamic-array', '=SORT(A1:A4)', 'implemented-wasm-production'),
|
|
472
|
+
entry('dynamic-array:sortby-basic', 'dynamic-array', '=SORTBY(A1:A3,B1:B3)', 'implemented-wasm-production'),
|
|
473
|
+
entry('dynamic-array:tocol-basic', 'dynamic-array', '=TOCOL(A1:B2)', 'implemented-wasm-production'),
|
|
474
|
+
entry('dynamic-array:torow-basic', 'dynamic-array', '=TOROW(A1:B2)', 'implemented-wasm-production'),
|
|
475
|
+
entry('dynamic-array:wraprows-basic', 'dynamic-array', '=WRAPROWS(A1:A4,2)', 'implemented-wasm-production'),
|
|
476
|
+
entry('dynamic-array:wrapcols-basic', 'dynamic-array', '=WRAPCOLS(A1:A4,2)', 'implemented-wasm-production'),
|
|
477
|
+
entry('names:defined-name-range', 'names', '=SUM(MyRange)', 'implemented-wasm-production', {
|
|
478
|
+
notes: 'Range-valued workbook names now compile through metadata substitution and route onto the native aggregate path once the name resolves.',
|
|
484
479
|
}),
|
|
485
|
-
entry(
|
|
486
|
-
notes:
|
|
480
|
+
entry('lambda:byrow-basic', 'lambda', '=BYROW(A1:B2,LAMBDA(r,SUM(r)))', 'implemented-wasm-production', {
|
|
481
|
+
notes: 'BYROW aggregate lambdas in the canonical SUM form now lower onto an internal native row-sum builtin, so the canonical spill case executes on the wasm path.',
|
|
487
482
|
}),
|
|
488
483
|
];
|
|
489
484
|
export function getCompatibilityEntry(id) {
|