@divmain/jdm-asm 0.2.0 → 0.2.3
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/index.js +2227 -29
- package/dist/index.js.map +1 -1
- package/package.json +8 -2
- package/.github/workflows/ci.yml +0 -53
- package/.oxfmtrc.json +0 -16
- package/.oxlintrc.json +0 -183
- package/AGENTS.md +0 -81
- package/asconfig.json +0 -23
- package/benchmarks/fixtures.ts +0 -111
- package/benchmarks/input-fixtures.ts +0 -80
- package/benchmarks/run.ts +0 -913
- package/benchmarks/worker-pool.ts +0 -223
- package/benchmarks/worker.ts +0 -374
- package/scripts/run-all-tests.ts +0 -220
- package/src/compiler/EXPRESSION_SUBSETS.md +0 -228
- package/src/compiler/asc-compiler.ts +0 -315
- package/src/compiler/ast-types.ts +0 -215
- package/src/compiler/build.ts +0 -56
- package/src/compiler/cache.ts +0 -414
- package/src/compiler/code-generators.ts +0 -211
- package/src/compiler/codegen/index.ts +0 -15
- package/src/compiler/codegen/js-marshal.ts +0 -999
- package/src/compiler/codegen/js-validation.ts +0 -243
- package/src/compiler/codegen.ts +0 -19
- package/src/compiler/compile-time-validation.ts +0 -507
- package/src/compiler/cst-visitor.ts +0 -434
- package/src/compiler/errors.ts +0 -227
- package/src/compiler/expression-parser.ts +0 -536
- package/src/compiler/graph.ts +0 -197
- package/src/compiler/index.ts +0 -199
- package/src/compiler/input-validation.ts +0 -33
- package/src/compiler/marshal-gen.ts +0 -21
- package/src/compiler/nodes/context-resolvers.ts +0 -197
- package/src/compiler/nodes/decision-table.ts +0 -507
- package/src/compiler/nodes/decision.ts +0 -292
- package/src/compiler/nodes/expression-compiler.ts +0 -526
- package/src/compiler/nodes/expression.ts +0 -425
- package/src/compiler/nodes/function.ts +0 -316
- package/src/compiler/nodes/input.ts +0 -60
- package/src/compiler/nodes/switch.ts +0 -547
- package/src/compiler/optimizer.ts +0 -948
- package/src/compiler/orchestrator.ts +0 -352
- package/src/compiler/parser.ts +0 -115
- package/src/compiler/result-selection.ts +0 -161
- package/src/compiler/runtime/index.ts +0 -26
- package/src/compiler/runtime-codegen.ts +0 -211
- package/src/compiler/runtime-validation-codegen.ts +0 -294
- package/src/compiler/runtime.ts +0 -452
- package/src/compiler/schema.ts +0 -245
- package/src/compiler/switch-branch-detection.ts +0 -92
- package/src/compiler/types.ts +0 -136
- package/src/compiler/unary-ast-transforms.ts +0 -148
- package/src/compiler/unary-parser.ts +0 -301
- package/src/compiler/unary-transform.ts +0 -161
- package/src/compiler/utils.ts +0 -27
- package/src/compiler/virtual-fs.ts +0 -90
- package/src/compiler/wasm-instantiate.ts +0 -127
- package/src/index.ts +0 -1
- package/src/runtime/arrays.ts +0 -579
- package/src/runtime/context.ts +0 -189
- package/src/runtime/expressions.ts +0 -1811
- package/src/runtime/index.ts +0 -8
- package/src/runtime/memory.ts +0 -607
- package/src/runtime/strings.ts +0 -260
- package/src/runtime/tables.ts +0 -96
- package/src/runtime/tsconfig.json +0 -4
- package/src/runtime/values.ts +0 -209
- package/test-data/README.md +0 -83
- package/test-data/decision-tables/basic/8k.json +0 -87992
- package/test-data/decision-tables/basic/affiliate-commission-calculator.json +0 -228
- package/test-data/decision-tables/basic/airline-loyalty-points-calculations.json +0 -285
- package/test-data/decision-tables/basic/airline-upgrade-eligibility.json +0 -466
- package/test-data/decision-tables/basic/auto-insurance-premium-calculator.json +0 -412
- package/test-data/decision-tables/basic/booking-personalization-system.json +0 -553
- package/test-data/decision-tables/basic/care-team-assignment-system.json +0 -585
- package/test-data/decision-tables/basic/claim-validation-system.json +0 -307
- package/test-data/decision-tables/basic/clinical-lab-result-interpreter.json +0 -433
- package/test-data/decision-tables/basic/clinical-treatment-protocol.json +0 -474
- package/test-data/decision-tables/basic/credit-limit-adjustment.json +0 -479
- package/test-data/decision-tables/basic/customer-eligibility-engine.json +0 -551
- package/test-data/decision-tables/basic/customer-lifetime-value.json +0 -200
- package/test-data/decision-tables/basic/customer-onboarding-kyc-verification.json +0 -611
- package/test-data/decision-tables/basic/customer-service-escalation.json +0 -191
- package/test-data/decision-tables/basic/decision-table-discounts.json +0 -168
- package/test-data/decision-tables/basic/decision-table-shipping.json +0 -398
- package/test-data/decision-tables/basic/delivery-route-optimizer.json +0 -271
- package/test-data/decision-tables/basic/device-compatibility-checker.json +0 -303
- package/test-data/decision-tables/basic/disaster-relief-fund-allocation.json +0 -296
- package/test-data/decision-tables/basic/dynamic-fx-rate-pricing-system.json +0 -237
- package/test-data/decision-tables/basic/dynamic-marketplace-comission-calculator.json +0 -242
- package/test-data/decision-tables/basic/dynamic-shipping-cost-calculator.json +0 -378
- package/test-data/decision-tables/basic/dynamic-tarrif-engine.json +0 -289
- package/test-data/decision-tables/basic/dynamic-ticket-pricing.json +0 -325
- package/test-data/decision-tables/basic/empty-column-with-space.json +0 -100
- package/test-data/decision-tables/basic/empty-column-without-space.json +0 -100
- package/test-data/decision-tables/basic/environment-compliance-assessment.json +0 -386
- package/test-data/decision-tables/basic/expression-table-map.json +0 -313
- package/test-data/decision-tables/basic/flash-sale-eligibility.json +0 -366
- package/test-data/decision-tables/basic/flight-dispatch-decision-system.json +0 -455
- package/test-data/decision-tables/basic/flight-rebooking-fee-calculator.json +0 -406
- package/test-data/decision-tables/basic/government-assistance.json +0 -299
- package/test-data/decision-tables/basic/grant-funding-distribution.json +0 -307
- package/test-data/decision-tables/basic/hazardous-materials-management-system.json +0 -414
- package/test-data/decision-tables/basic/immigration-eligibility-evaluator.json +0 -765
- package/test-data/decision-tables/basic/import-duties-calculator.json +0 -318
- package/test-data/decision-tables/basic/insurance-agent-commission.json +0 -228
- package/test-data/decision-tables/basic/insurance-coverage-calculator.json +0 -362
- package/test-data/decision-tables/basic/insurance-underwriting-risk.json +0 -321
- package/test-data/decision-tables/basic/international-roaming-policy-manager.json +0 -199
- package/test-data/decision-tables/basic/legacy-plan-management.json +0 -434
- package/test-data/decision-tables/basic/marketplace-listing-verification-system.json +0 -334
- package/test-data/decision-tables/basic/medication-dosage-calculator.json +0 -318
- package/test-data/decision-tables/basic/merch-bags.json +0 -171
- package/test-data/decision-tables/basic/municipal-permit-evaluation-system.json +0 -364
- package/test-data/decision-tables/basic/mvno-partner-enablement.json +0 -313
- package/test-data/decision-tables/basic/partner-revenue-sharing.json +0 -244
- package/test-data/decision-tables/basic/payment-routing-and-fee-calculator.json +0 -475
- package/test-data/decision-tables/basic/policy-discount-calculator.json +0 -307
- package/test-data/decision-tables/basic/policy-eligibility-analyzer.json +0 -299
- package/test-data/decision-tables/basic/product-listing-scoring.json +0 -358
- package/test-data/decision-tables/basic/realtime-fraud-detection.json +0 -235
- package/test-data/decision-tables/basic/regional-compliance-manager.json +0 -278
- package/test-data/decision-tables/basic/returns-and-refund-policy.json +0 -366
- package/test-data/decision-tables/basic/returns-processing-system.json +0 -448
- package/test-data/decision-tables/basic/school-district-resource-allocation.json +0 -282
- package/test-data/decision-tables/basic/seat-map-optimization.json +0 -325
- package/test-data/decision-tables/basic/seller-fee-calculator.json +0 -307
- package/test-data/decision-tables/basic/service-level-agreement-enforcement.json +0 -575
- package/test-data/decision-tables/basic/smart-financial-product-matcher.json +0 -249
- package/test-data/decision-tables/basic/supply-chain-risk.json +0 -316
- package/test-data/decision-tables/basic/table-loop.json +0 -93
- package/test-data/decision-tables/basic/table.json +0 -76
- package/test-data/decision-tables/basic/traffic-violation-penalty-calculator.json +0 -436
- package/test-data/decision-tables/basic/transaction-compliance-classifier.json +0 -525
- package/test-data/decision-tables/basic/vehicle-claims-resolution.json +0 -310
- package/test-data/decision-tables/basic/warehouse-storage-location.json +0 -345
- package/test-data/decision-tables/hit-policy-collect/collect-multiple-matches.json +0 -127
- package/test-data/decision-tables/hit-policy-collect/collect-no-match.json +0 -95
- package/test-data/decision-tables/hit-policy-first/first-match.json +0 -103
- package/test-data/decision-tables/hit-policy-first/no-match.json +0 -95
- package/test-data/decision-tables/hit-policy-output-order/output-order-respected.json +0 -94
- package/test-data/decision-tables/hit-policy-output-order/string-output-order.json +0 -94
- package/test-data/decision-tables/hit-policy-priority/priority-respected.json +0 -86
- package/test-data/decision-tables/hit-policy-rule-order/rule-order-respected.json +0 -94
- package/test-data/decision-tables/hit-policy-unique/all-match-error.json +0 -89
- package/test-data/decision-tables/hit-policy-unique/multiple-match-error.json +0 -89
- package/test-data/decision-tables/hit-policy-unique/no-match.json +0 -88
- package/test-data/decision-tables/hit-policy-unique/unique-match.json +0 -99
- package/test-data/expressions/arithmetic/error-cyclic.json +0 -114
- package/test-data/expressions/arithmetic/error-missing-input.json +0 -54
- package/test-data/expressions/arithmetic/error-missing-output.json +0 -54
- package/test-data/expressions/arithmetic/expression-default.json +0 -93
- package/test-data/expressions/arithmetic/expression-fields.json +0 -94
- package/test-data/expressions/arithmetic/expression-loop.json +0 -94
- package/test-data/expressions/arithmetic/expression-passthrough.json +0 -108
- package/test-data/expressions/arithmetic/expression.json +0 -69
- package/test-data/expressions/arithmetic/nested-request.json +0 -125
- package/test-data/expressions/arithmetic/number-function.json +0 -58
- package/test-data/expressions/arithmetic/test-number-functions.json +0 -68
- package/test-data/expressions/functions/all.json +0 -149
- package/test-data/expressions/functions/avg.json +0 -89
- package/test-data/expressions/functions/filter.json +0 -109
- package/test-data/expressions/functions/flat.json +0 -167
- package/test-data/expressions/functions/map-strings.json +0 -65
- package/test-data/expressions/functions/map.json +0 -73
- package/test-data/expressions/functions/reduce.json +0 -49
- package/test-data/expressions/functions/some.json +0 -175
- package/test-data/expressions/functions/sort-strings.json +0 -97
- package/test-data/expressions/functions/sort.json +0 -97
- package/test-data/expressions/logical/logical-and.json +0 -116
- package/test-data/expressions/logical/logical-complex.json +0 -260
- package/test-data/expressions/logical/logical-not.json +0 -111
- package/test-data/expressions/logical/logical-or.json +0 -123
- package/test-data/expressions/string/string-comparison.json +0 -128
- package/test-data/expressions/string/string-concat.json +0 -106
- package/test-data/expressions/string/string-contains.json +0 -125
- package/test-data/expressions/string/string-endsWith.json +0 -113
- package/test-data/expressions/string/string-indexOf.json +0 -131
- package/test-data/expressions/string/string-join.json +0 -92
- package/test-data/expressions/string/string-lower.json +0 -94
- package/test-data/expressions/string/string-replace.json +0 -130
- package/test-data/expressions/string/string-split.json +0 -101
- package/test-data/expressions/string/string-startsWith.json +0 -113
- package/test-data/expressions/string/string-substring.json +0 -138
- package/test-data/expressions/string/string-trim.json +0 -100
- package/test-data/expressions/string/string-upper.json +0 -94
- package/test-data/other/custom.json +0 -51
- package/test-data/other/customer-input-schema.json +0 -34
- package/test-data/other/customer-output-schema.json +0 -34
- package/test-data/other/passthrough.json +0 -31
- package/test-data/sub-decisions/basic/$nodes-child.json +0 -31
- package/test-data/sub-decisions/basic/$nodes-parent.json +0 -49
- package/test-data/sub-decisions/basic/recursive-table1.json +0 -49
- package/test-data/sub-decisions/basic/recursive-table2.json +0 -49
- package/test-data/sub-decisions/complex-multi/approval-decision.json +0 -31
- package/test-data/sub-decisions/complex-multi/complex-dag.json +0 -175
- package/test-data/sub-decisions/complex-multi/credit-check.json +0 -31
- package/test-data/sub-decisions/complex-multi/customer-segmentation.json +0 -31
- package/test-data/sub-decisions/complex-multi/discount-eligibility.json +0 -31
- package/test-data/sub-decisions/complex-multi/eligibility-check.json +0 -31
- package/test-data/sub-decisions/complex-multi/final-offer.json +0 -31
- package/test-data/sub-decisions/complex-multi/income-verification.json +0 -31
- package/test-data/sub-decisions/complex-multi/linear-chain.json +0 -121
- package/test-data/sub-decisions/complex-multi/pricing-calculation.json +0 -31
- package/test-data/sub-decisions/complex-multi/product-eligibility.json +0 -31
- package/test-data/sub-decisions/complex-multi/risk-assessment.json +0 -31
- package/test-data/sub-decisions/complex-multi/shared-validation.json +0 -31
- package/test-data/sub-decisions/complex-multi/validation.json +0 -31
- package/test-data/sub-decisions/diamond/decision-a.json +0 -31
- package/test-data/sub-decisions/diamond/decision-b.json +0 -31
- package/test-data/sub-decisions/diamond/decision-c.json +0 -31
- package/test-data/sub-decisions/diamond/decision-shared.json +0 -31
- package/test-data/sub-decisions/diamond/diamond-pattern.json +0 -109
- package/test-data/sub-decisions/error-propagation/parent-calls-error.json +0 -44
- package/test-data/sub-decisions/error-propagation/sub-decision-with-error.json +0 -60
- package/test-data/switch-nodes/basic/account-dormancy-management.json +0 -245
- package/test-data/switch-nodes/basic/application-risk-assessment.json +0 -474
- package/test-data/switch-nodes/basic/cellular-data-rollover-system.json +0 -281
- package/test-data/switch-nodes/basic/clinical-pathway-selection.json +0 -454
- package/test-data/switch-nodes/basic/insurance-prior-authorization.json +0 -467
- package/test-data/switch-nodes/basic/last-mile-delivery-assignment.json +0 -373
- package/test-data/switch-nodes/basic/loan-approval.json +0 -469
- package/test-data/switch-nodes/basic/multi-switch.json +0 -498
- package/test-data/switch-nodes/basic/online-checkin-eligibility.json +0 -285
- package/test-data/switch-nodes/basic/order-consolidation-system.json +0 -493
- package/test-data/switch-nodes/basic/seller-approval-workflow.json +0 -383
- package/test-data/switch-nodes/basic/set-fee.json +0 -243
- package/test-data/switch-nodes/basic/shipping-carrier-selector.json +0 -379
- package/test-data/switch-nodes/basic/switch-node.json +0 -167
- package/test-data/switch-nodes/basic/switch-performance-2.json +0 -1307
- package/test-data/switch-nodes/basic/switch-performance.json +0 -691
- package/test-data/switch-nodes/basic/tax-exemption.json +0 -295
- package/test-data/switch-nodes/basic/warehouse-cross-docking.json +0 -313
- package/test-data/switch-nodes/default-cases/switch-with-default.json +0 -134
- package/test-data/zen-reference/$nodes-child.json +0 -69
- package/test-data/zen-reference/$nodes-parent.json +0 -34
- package/test-data/zen-reference/8k.json +0 -87992
- package/test-data/zen-reference/credit-analysis.json +0 -324
- package/test-data/zen-reference/custom.json +0 -51
- package/test-data/zen-reference/customer-input-schema.json +0 -34
- package/test-data/zen-reference/customer-output-schema.json +0 -34
- package/test-data/zen-reference/error-cyclic.json +0 -114
- package/test-data/zen-reference/error-missing-input.json +0 -54
- package/test-data/zen-reference/error-missing-output.json +0 -54
- package/test-data/zen-reference/expression.json +0 -69
- package/test-data/zen-reference/function-v2.json +0 -48
- package/test-data/zen-reference/function.json +0 -46
- package/test-data/zen-reference/graphs/account-dormancy-management.json +0 -245
- package/test-data/zen-reference/graphs/affiliate-commission-calculator.json +0 -228
- package/test-data/zen-reference/graphs/airline-loyalty-points-calculations.json +0 -285
- package/test-data/zen-reference/graphs/airline-upgrade-eligibility.json +0 -466
- package/test-data/zen-reference/graphs/aml.json +0 -537
- package/test-data/zen-reference/graphs/application-risk-assessment.json +0 -474
- package/test-data/zen-reference/graphs/auto-insurance-premium-calculator.json +0 -412
- package/test-data/zen-reference/graphs/booking-personalization-system.json +0 -553
- package/test-data/zen-reference/graphs/care-team-assignment-system.json +0 -585
- package/test-data/zen-reference/graphs/cellular-data-rollover-system.json +0 -281
- package/test-data/zen-reference/graphs/claim-validation-system.json +0 -307
- package/test-data/zen-reference/graphs/clinical-lab-result-interpreter.json +0 -433
- package/test-data/zen-reference/graphs/clinical-pathway-selection.json +0 -454
- package/test-data/zen-reference/graphs/clinical-treatment-protocol.json +0 -474
- package/test-data/zen-reference/graphs/company-analysis.json +0 -390
- package/test-data/zen-reference/graphs/credit-limit-adjustment.json +0 -479
- package/test-data/zen-reference/graphs/customer-eligibility-engine.json +0 -551
- package/test-data/zen-reference/graphs/customer-lifetime-value.json +0 -200
- package/test-data/zen-reference/graphs/customer-onboarding-kyc-verification.json +0 -611
- package/test-data/zen-reference/graphs/customer-service-escalation.json +0 -191
- package/test-data/zen-reference/graphs/decision-table-discounts.json +0 -168
- package/test-data/zen-reference/graphs/decision-table-shipping.json +0 -398
- package/test-data/zen-reference/graphs/delivery-route-optimizer.json +0 -271
- package/test-data/zen-reference/graphs/device-compatibility-checker.json +0 -303
- package/test-data/zen-reference/graphs/disaster-relief-fund-allocation.json +0 -296
- package/test-data/zen-reference/graphs/dynamic-fx-rate-pricing-system.json +0 -237
- package/test-data/zen-reference/graphs/dynamic-marketplace-comission-calculator.json +0 -242
- package/test-data/zen-reference/graphs/dynamic-shipping-cost-calculator.json +0 -378
- package/test-data/zen-reference/graphs/dynamic-tarrif-engine.json +0 -289
- package/test-data/zen-reference/graphs/dynamic-ticket-pricing.json +0 -325
- package/test-data/zen-reference/graphs/empty-column-with-space.json +0 -100
- package/test-data/zen-reference/graphs/empty-column-without-space.json +0 -100
- package/test-data/zen-reference/graphs/environment-compliance-assessment.json +0 -386
- package/test-data/zen-reference/graphs/expression-default.json +0 -93
- package/test-data/zen-reference/graphs/expression-fields.json +0 -94
- package/test-data/zen-reference/graphs/expression-loop.json +0 -94
- package/test-data/zen-reference/graphs/expression-passthrough.json +0 -108
- package/test-data/zen-reference/graphs/expression-table-map.json +0 -313
- package/test-data/zen-reference/graphs/flash-sale-eligibility.json +0 -366
- package/test-data/zen-reference/graphs/flight-dispatch-decision-system.json +0 -455
- package/test-data/zen-reference/graphs/flight-rebooking-fee-calculator.json +0 -406
- package/test-data/zen-reference/graphs/government-assistance.json +0 -299
- package/test-data/zen-reference/graphs/grant-funding-distribution.json +0 -307
- package/test-data/zen-reference/graphs/hazardous-materials-management-system.json +0 -414
- package/test-data/zen-reference/graphs/immigration-eligibility-evaluator.json +0 -765
- package/test-data/zen-reference/graphs/import-duties-calculator.json +0 -318
- package/test-data/zen-reference/graphs/insurance-agent-commission.json +0 -228
- package/test-data/zen-reference/graphs/insurance-breakdown.json +0 -421
- package/test-data/zen-reference/graphs/insurance-coverage-calculator.json +0 -362
- package/test-data/zen-reference/graphs/insurance-prior-authorization.json +0 -467
- package/test-data/zen-reference/graphs/insurance-underwriting-risk.json +0 -321
- package/test-data/zen-reference/graphs/international-roaming-policy-manager.json +0 -199
- package/test-data/zen-reference/graphs/last-mile-delivery-assignment.json +0 -373
- package/test-data/zen-reference/graphs/legacy-plan-management.json +0 -434
- package/test-data/zen-reference/graphs/loan-approval.json +0 -469
- package/test-data/zen-reference/graphs/marketplace-listing-verification-system.json +0 -334
- package/test-data/zen-reference/graphs/medication-dosage-calculator.json +0 -318
- package/test-data/zen-reference/graphs/merch-bags.json +0 -171
- package/test-data/zen-reference/graphs/multi-switch.json +0 -498
- package/test-data/zen-reference/graphs/municipal-permit-evaluation-system.json +0 -364
- package/test-data/zen-reference/graphs/mvno-partner-enablement.json +0 -313
- package/test-data/zen-reference/graphs/nested-request.json +0 -125
- package/test-data/zen-reference/graphs/online-checkin-eligibility.json +0 -285
- package/test-data/zen-reference/graphs/order-consolidation-system.json +0 -493
- package/test-data/zen-reference/graphs/partner-revenue-sharing.json +0 -244
- package/test-data/zen-reference/graphs/payment-routing-and-fee-calculator.json +0 -475
- package/test-data/zen-reference/graphs/policy-discount-calculator.json +0 -307
- package/test-data/zen-reference/graphs/policy-eligibility-analyzer.json +0 -299
- package/test-data/zen-reference/graphs/product-listing-scoring.json +0 -358
- package/test-data/zen-reference/graphs/realtime-fraud-detection.json +0 -235
- package/test-data/zen-reference/graphs/regional-compliance-manager.json +0 -278
- package/test-data/zen-reference/graphs/returns-and-refund-policy.json +0 -366
- package/test-data/zen-reference/graphs/returns-processing-system.json +0 -448
- package/test-data/zen-reference/graphs/school-district-resource-allocation.json +0 -282
- package/test-data/zen-reference/graphs/seat-map-optimization.json +0 -325
- package/test-data/zen-reference/graphs/seller-approval-workflow.json +0 -383
- package/test-data/zen-reference/graphs/seller-fee-calculator.json +0 -307
- package/test-data/zen-reference/graphs/service-level-agreement-enforcement.json +0 -575
- package/test-data/zen-reference/graphs/set-fee.json +0 -243
- package/test-data/zen-reference/graphs/shipping-carrier-selector.json +0 -379
- package/test-data/zen-reference/graphs/smart-financial-product-matcher.json +0 -249
- package/test-data/zen-reference/graphs/supply-chain-risk.json +0 -316
- package/test-data/zen-reference/graphs/table-loop.json +0 -93
- package/test-data/zen-reference/graphs/tax-exemption.json +0 -295
- package/test-data/zen-reference/graphs/traffic-violation-penalty-calculator.json +0 -436
- package/test-data/zen-reference/graphs/transaction-compliance-classifier.json +0 -525
- package/test-data/zen-reference/graphs/vehicle-claims-resolution.json +0 -310
- package/test-data/zen-reference/graphs/warehouse-cross-docking.json +0 -313
- package/test-data/zen-reference/graphs/warehouse-storage-location.json +0 -345
- package/test-data/zen-reference/http-function.json +0 -34
- package/test-data/zen-reference/infinite-function.json +0 -46
- package/test-data/zen-reference/js/imports.js +0 -25
- package/test-data/zen-reference/passthrough.json +0 -31
- package/test-data/zen-reference/recursive-table1.json +0 -49
- package/test-data/zen-reference/recursive-table2.json +0 -49
- package/test-data/zen-reference/sleep-function.json +0 -34
- package/test-data/zen-reference/switch-node.json +0 -167
- package/test-data/zen-reference/switch-performance-2.json +0 -1307
- package/test-data/zen-reference/switch-performance.json +0 -691
- package/test-data/zen-reference/table.json +0 -76
- package/tests/helpers/index.ts +0 -73
- package/tests/helpers/mock-context.ts +0 -231
- package/tests/helpers/round-trip.ts +0 -398
- package/tests/helpers/test-harness-comparison.ts +0 -325
- package/tests/helpers/test-harness-wasm.ts +0 -710
- package/tests/helpers/test-harness.ts +0 -28
- package/tests/helpers/wasm-test.ts +0 -659
- package/tests/integration/compilation-errors.test.ts +0 -864
- package/tests/integration/decision-tables.test.ts +0 -531
- package/tests/integration/edge-cases.test.ts +0 -787
- package/tests/integration/expressions.test.ts +0 -513
- package/tests/integration/function-node-integration.test.ts +0 -182
- package/tests/integration/sub-decisions.test.ts +0 -108
- package/tests/integration/switch-nodes.test.ts +0 -399
- package/tests/integration/unary-or-matching.test.ts +0 -53
- package/tests/integration/wasm-data-types.test.ts +0 -398
- package/tests/integration/wasm-errors.test.ts +0 -199
- package/tests/integration/wasm-execution.test.ts +0 -348
- package/tests/integration/wasm-memory.test.ts +0 -228
- package/tests/scripts/analyze-coverage.ts +0 -166
- package/tests/scripts/categorize-tests.ts +0 -396
- package/tests/scripts/coverage-analysis.ts +0 -836
- package/tests/unit/compiler/cache.test.ts +0 -238
- package/tests/unit/compiler/errors.test.ts +0 -316
- package/tests/unit/compiler/graph-scalability.test.ts +0 -510
- package/tests/unit/compiler/graph.test.ts +0 -878
- package/tests/unit/compiler/input-validation.test.ts +0 -447
- package/tests/unit/compiler/logical-and-parser.test.ts +0 -143
- package/tests/unit/compiler/logical-not-parser.test.ts +0 -107
- package/tests/unit/compiler/logical-or-parser.test.ts +0 -236
- package/tests/unit/compiler/marshal-gen/marshal-gen.test.ts +0 -97
- package/tests/unit/compiler/nodes/decision-table.test.ts +0 -103
- package/tests/unit/compiler/nodes/decision.test.ts +0 -182
- package/tests/unit/compiler/nodes/function-compile.test.ts +0 -204
- package/tests/unit/compiler/nodes/function.test.ts +0 -176
- package/tests/unit/compiler/nodes/input.test.ts +0 -30
- package/tests/unit/compiler/nodes/switch.test.ts +0 -127
- package/tests/unit/compiler/optimizer-cache.test.ts +0 -327
- package/tests/unit/compiler/optimizer-implementation.test.ts +0 -625
- package/tests/unit/compiler/parser.test.ts +0 -508
- package/tests/unit/compiler/runtime-error-cleanup.test.ts +0 -426
- package/tests/unit/compiler/runtime-validation.test.ts +0 -303
- package/tests/unit/compiler/runtime.test.ts +0 -221
- package/tests/unit/compiler/schema/schema.test.ts +0 -248
- package/tests/unit/compiler/unary-ast-transforms.test.ts +0 -245
- package/tsconfig.json +0 -27
- package/tsup.config.ts +0 -11
- package/vitest.config.ts +0 -12
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decision Table Node Tests
|
|
3
|
-
*
|
|
4
|
-
* Test suite for decision table node evaluation, organized by:
|
|
5
|
-
* - Basic decision tables
|
|
6
|
-
* - Hit policies (unique, first, collect, rule order, output order, priority)
|
|
7
|
-
* - Unary mode (literal values)
|
|
8
|
-
* - Expression mode (column expressions)
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { describe, it, expect } from 'vitest';
|
|
12
|
-
import { readFileSync } from 'fs';
|
|
13
|
-
import {
|
|
14
|
-
runSimpleCompatibilityTest,
|
|
15
|
-
type SimpleTestConfig,
|
|
16
|
-
matchers,
|
|
17
|
-
} from '../helpers/test-harness';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Load a test fixture from file
|
|
21
|
-
*/
|
|
22
|
-
function loadFixture(filePath: string): string {
|
|
23
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
24
|
-
return content;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Load a complete test configuration including input and expected values
|
|
29
|
-
* Note: expected can be an object or array (zen-engine returns raw arrays for COLLECT hit policies)
|
|
30
|
-
*/
|
|
31
|
-
function loadTestWithFixture(
|
|
32
|
-
fixturePath: string,
|
|
33
|
-
input?: Record<string, unknown>,
|
|
34
|
-
expected?: Record<string, unknown> | unknown[],
|
|
35
|
-
unsupported?: string[],
|
|
36
|
-
): SimpleTestConfig {
|
|
37
|
-
const jdm = loadFixture(fixturePath);
|
|
38
|
-
return {
|
|
39
|
-
name: fixturePath.split('/').pop() || 'unknown',
|
|
40
|
-
jdm,
|
|
41
|
-
input,
|
|
42
|
-
expected,
|
|
43
|
-
unsupported,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
describe('Decision Tables', () => {
|
|
48
|
-
// Basic Decision Tables
|
|
49
|
-
describe('Basic Decision Tables', () => {
|
|
50
|
-
const testDir = 'test-data/decision-tables/basic';
|
|
51
|
-
|
|
52
|
-
describe('Simple Rules', () => {
|
|
53
|
-
// These tests cover basic decision table functionality
|
|
54
|
-
|
|
55
|
-
it('should evaluate simple discount rules', async () => {
|
|
56
|
-
const test = loadTestWithFixture(
|
|
57
|
-
`${testDir}/decision-table-discounts.json`,
|
|
58
|
-
{
|
|
59
|
-
customerType: 'premium',
|
|
60
|
-
orderAmount: 100,
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
discount: 0.15,
|
|
64
|
-
},
|
|
65
|
-
);
|
|
66
|
-
await runSimpleCompatibilityTest(test);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should evaluate shipping rules', async () => {
|
|
70
|
-
const test = loadTestWithFixture(
|
|
71
|
-
`${testDir}/decision-table-shipping.json`,
|
|
72
|
-
{
|
|
73
|
-
weight: 15,
|
|
74
|
-
destination: 'domestic',
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
shippingMethod: 'standard',
|
|
78
|
-
shippingCost: 5.99,
|
|
79
|
-
},
|
|
80
|
-
);
|
|
81
|
-
await runSimpleCompatibilityTest(test);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('should evaluate eligibility rules', async () => {
|
|
85
|
-
const test = loadTestWithFixture(
|
|
86
|
-
`${testDir}/customer-eligibility-engine.json`,
|
|
87
|
-
{
|
|
88
|
-
age: 25,
|
|
89
|
-
hasAccount: true,
|
|
90
|
-
verified: true,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
eligible: true,
|
|
94
|
-
},
|
|
95
|
-
);
|
|
96
|
-
await runSimpleCompatibilityTest(test);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('should evaluate insurance premium calculation', async () => {
|
|
100
|
-
const test = loadTestWithFixture(
|
|
101
|
-
`${testDir}/auto-insurance-premium-calculator.json`,
|
|
102
|
-
{
|
|
103
|
-
age: 35,
|
|
104
|
-
vehicleType: 'sedan',
|
|
105
|
-
drivingHistory: 'clean',
|
|
106
|
-
coverageLevel: 'full',
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
basePremium: expect.any(Number),
|
|
110
|
-
},
|
|
111
|
-
);
|
|
112
|
-
await runSimpleCompatibilityTest(test);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
describe('Complex Rules with Multiple Inputs', () => {
|
|
117
|
-
// Tests with multiple input conditions
|
|
118
|
-
|
|
119
|
-
it('should evaluate airline loyalty points', async () => {
|
|
120
|
-
const test = loadTestWithFixture(
|
|
121
|
-
`${testDir}/airline-loyalty-points-calculations.json`,
|
|
122
|
-
{
|
|
123
|
-
membershipTier: 'gold',
|
|
124
|
-
flightDistance: 2500,
|
|
125
|
-
bookingClass: 'business',
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
pointsEarned: expect.any(Number),
|
|
129
|
-
},
|
|
130
|
-
);
|
|
131
|
-
await runSimpleCompatibilityTest(test);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('should evaluate upgrade eligibility', async () => {
|
|
135
|
-
const test = loadTestWithFixture(
|
|
136
|
-
`${testDir}/airline-upgrade-eligibility.json`,
|
|
137
|
-
{
|
|
138
|
-
membershipTier: 'platinum',
|
|
139
|
-
fareClass: 'economy',
|
|
140
|
-
availability: true,
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
upgradeEligible: true,
|
|
144
|
-
},
|
|
145
|
-
);
|
|
146
|
-
await runSimpleCompatibilityTest(test);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('should evaluate credit limit adjustment', async () => {
|
|
150
|
-
const test = loadTestWithFixture(
|
|
151
|
-
`${testDir}/credit-limit-adjustment.json`,
|
|
152
|
-
{
|
|
153
|
-
creditScore: 750,
|
|
154
|
-
income: 50000,
|
|
155
|
-
paymentHistory: 'excellent',
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
newCreditLimit: expect.any(Number),
|
|
159
|
-
},
|
|
160
|
-
);
|
|
161
|
-
await runSimpleCompatibilityTest(test);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('should evaluate customer lifetime value', async () => {
|
|
165
|
-
const test = loadTestWithFixture(
|
|
166
|
-
`${testDir}/customer-lifetime-value.json`,
|
|
167
|
-
{
|
|
168
|
-
totalPurchases: 15000,
|
|
169
|
-
purchaseFrequency: 12,
|
|
170
|
-
retention: 0.85,
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
lifetimeValue: expect.any(Number),
|
|
174
|
-
},
|
|
175
|
-
);
|
|
176
|
-
await runSimpleCompatibilityTest(test);
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
describe('Healthcare & Clinical Decision Tables', () => {
|
|
181
|
-
// Domain-specific decision tables for healthcare
|
|
182
|
-
|
|
183
|
-
it('should evaluate clinical lab results', async () => {
|
|
184
|
-
const test = loadTestWithFixture(
|
|
185
|
-
`${testDir}/clinical-lab-result-interpreter.json`,
|
|
186
|
-
undefined,
|
|
187
|
-
undefined,
|
|
188
|
-
['executionMode:loop'],
|
|
189
|
-
);
|
|
190
|
-
await runSimpleCompatibilityTest(test);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it('should evaluate clinical treatment protocol', async () => {
|
|
194
|
-
const test = loadTestWithFixture(
|
|
195
|
-
`${testDir}/clinical-treatment-protocol.json`,
|
|
196
|
-
{
|
|
197
|
-
patientAge: 45,
|
|
198
|
-
condition: 'hypertension',
|
|
199
|
-
severity: 'moderate',
|
|
200
|
-
comorbidities: [],
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
recommendedTreatment: expect.any(String),
|
|
204
|
-
},
|
|
205
|
-
);
|
|
206
|
-
await runSimpleCompatibilityTest(test);
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it('should evaluate care team assignment', async () => {
|
|
210
|
-
const test = loadTestWithFixture(
|
|
211
|
-
`${testDir}/care-team-assignment-system.json`,
|
|
212
|
-
{
|
|
213
|
-
patientAcuity: 'high',
|
|
214
|
-
requiredSpecialties: ['cardiology', 'nursing'],
|
|
215
|
-
department: 'ICU',
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
assignedTeam: expect.any(Array),
|
|
219
|
-
},
|
|
220
|
-
);
|
|
221
|
-
await runSimpleCompatibilityTest(test);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
describe('Business Logic Decision Tables', () => {
|
|
226
|
-
// Various business rule scenarios
|
|
227
|
-
|
|
228
|
-
it('should evaluate affiliate commission', async () => {
|
|
229
|
-
const test = loadTestWithFixture(
|
|
230
|
-
`${testDir}/affiliate-commission-calculator.json`,
|
|
231
|
-
{
|
|
232
|
-
productCategory: 'electronics',
|
|
233
|
-
saleAmount: 500,
|
|
234
|
-
affiliateTier: 'gold',
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
commissionRate: expect.any(Number),
|
|
238
|
-
commissionAmount: expect.any(Number),
|
|
239
|
-
},
|
|
240
|
-
);
|
|
241
|
-
await runSimpleCompatibilityTest(test);
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
it('should evaluate booking personalization', async () => {
|
|
245
|
-
const test = loadTestWithFixture(
|
|
246
|
-
`${testDir}/booking-personalization-system.json`,
|
|
247
|
-
{
|
|
248
|
-
customerPreferences: ['window', 'aisle'],
|
|
249
|
-
flightHistory: ['domestic', 'business'],
|
|
250
|
-
loyaltyStatus: 'platinum',
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
recommendedOptions: expect.any(Array),
|
|
254
|
-
},
|
|
255
|
-
);
|
|
256
|
-
await runSimpleCompatibilityTest(test);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
it('should evaluate delivery route optimization', async () => {
|
|
260
|
-
const test = loadTestWithFixture(
|
|
261
|
-
`${testDir}/delivery-route-optimizer.json`,
|
|
262
|
-
{
|
|
263
|
-
destinations: ['A', 'B', 'C'],
|
|
264
|
-
timeConstraints: ['morning', 'afternoon'],
|
|
265
|
-
vehicleType: 'van',
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
optimizedRoute: expect.any(Array),
|
|
269
|
-
},
|
|
270
|
-
);
|
|
271
|
-
await runSimpleCompatibilityTest(test);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
it('should evaluate customer service escalation', async () => {
|
|
275
|
-
const test = loadTestWithFixture(
|
|
276
|
-
`${testDir}/customer-service-escalation.json`,
|
|
277
|
-
{
|
|
278
|
-
issueType: 'billing',
|
|
279
|
-
severity: 'high',
|
|
280
|
-
timeOpen: 48,
|
|
281
|
-
previousAttempts: 3,
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
escalationLevel: expect.any(String),
|
|
285
|
-
assignedTo: expect.any(String),
|
|
286
|
-
},
|
|
287
|
-
);
|
|
288
|
-
await runSimpleCompatibilityTest(test);
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
describe('Device & System Compatibility', () => {
|
|
293
|
-
// Compatibility check scenarios
|
|
294
|
-
|
|
295
|
-
it('should evaluate device compatibility', async () => {
|
|
296
|
-
const test = loadTestWithFixture(
|
|
297
|
-
`${testDir}/device-compatibility-checker.json`,
|
|
298
|
-
{
|
|
299
|
-
deviceType: 'smartphone',
|
|
300
|
-
osVersion: 'iOS 15',
|
|
301
|
-
appVersion: '2.5.0',
|
|
302
|
-
screenWidth: 390,
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
compatible: true,
|
|
306
|
-
features: expect.any(Array),
|
|
307
|
-
},
|
|
308
|
-
);
|
|
309
|
-
await runSimpleCompatibilityTest(test);
|
|
310
|
-
});
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
describe('Decision Tables with Expressions', () => {
|
|
314
|
-
// Decision tables that use expressions in inputs/outputs
|
|
315
|
-
|
|
316
|
-
// Skip in CI: 8K decision table requires increased stack size (--stack-size=65536)
|
|
317
|
-
// which cannot be reliably propagated to vitest's forked child processes in CI.
|
|
318
|
-
// Run locally with: node --stack-size=65536 ./node_modules/.bin/vitest
|
|
319
|
-
it.skipIf(process.env.CI)('should evaluate numeric 8K calculations', async () => {
|
|
320
|
-
const test = loadTestWithFixture(
|
|
321
|
-
`${testDir}/8k.json`,
|
|
322
|
-
{
|
|
323
|
-
product: {
|
|
324
|
-
currency: 'GBP',
|
|
325
|
-
email: 'user@gmail.com',
|
|
326
|
-
price: 80,
|
|
327
|
-
},
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
result: matchers.any(Object),
|
|
331
|
-
},
|
|
332
|
-
);
|
|
333
|
-
await runSimpleCompatibilityTest(test);
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
// Hit Policy Tests (will be organized by hit policy when fixtures are available)
|
|
339
|
-
describe('Hit Policies', () => {
|
|
340
|
-
const testDir = 'test-data/decision-tables/hit-policy-unique';
|
|
341
|
-
|
|
342
|
-
// Tests will be added as fixtures with specific hit policies are organized
|
|
343
|
-
|
|
344
|
-
describe('UNIQUE Hit Policy', () => {
|
|
345
|
-
it('should enforce unique matches', async () => {
|
|
346
|
-
const test = loadTestWithFixture(
|
|
347
|
-
`${testDir}/unique-match.json`,
|
|
348
|
-
{
|
|
349
|
-
customerType: 'premium',
|
|
350
|
-
orderAmount: 100,
|
|
351
|
-
},
|
|
352
|
-
{
|
|
353
|
-
discount: 0.15,
|
|
354
|
-
},
|
|
355
|
-
);
|
|
356
|
-
// UNIQUE hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `unique`, expected `first` or `collect`")
|
|
357
|
-
test.skipZen = true;
|
|
358
|
-
await runSimpleCompatibilityTest(test);
|
|
359
|
-
});
|
|
360
|
-
|
|
361
|
-
it('should return null with no matching rules', async () => {
|
|
362
|
-
const test = loadTestWithFixture(
|
|
363
|
-
`${testDir}/no-match.json`,
|
|
364
|
-
{
|
|
365
|
-
customerType: 'vip',
|
|
366
|
-
orderAmount: 100,
|
|
367
|
-
},
|
|
368
|
-
undefined,
|
|
369
|
-
);
|
|
370
|
-
// UNIQUE hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `unique`, expected `first` or `collect`")
|
|
371
|
-
test.skipZen = true;
|
|
372
|
-
await runSimpleCompatibilityTest(test);
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
it('should throw error when multiple rules match', async () => {
|
|
376
|
-
const test = loadTestWithFixture(
|
|
377
|
-
`${testDir}/multiple-match-error.json`,
|
|
378
|
-
{
|
|
379
|
-
customerType: 'premium',
|
|
380
|
-
orderAmount: 500,
|
|
381
|
-
},
|
|
382
|
-
undefined,
|
|
383
|
-
);
|
|
384
|
-
// UNIQUE hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `unique`, expected `first` or `collect`")
|
|
385
|
-
test.skipZen = true;
|
|
386
|
-
// Test passes with null return (error handling in code, but compile() not implemented yet)
|
|
387
|
-
await runSimpleCompatibilityTest(test);
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
it('should throw error when all rules match', async () => {
|
|
391
|
-
const test = loadTestWithFixture(
|
|
392
|
-
`${testDir}/all-match-error.json`,
|
|
393
|
-
{
|
|
394
|
-
customerType: 'premium',
|
|
395
|
-
orderAmount: 500,
|
|
396
|
-
},
|
|
397
|
-
undefined,
|
|
398
|
-
);
|
|
399
|
-
// UNIQUE hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `unique`, expected `first` or `collect`")
|
|
400
|
-
test.skipZen = true;
|
|
401
|
-
// Test passes with null return (error handling in code, but compile() not implemented yet)
|
|
402
|
-
await runSimpleCompatibilityTest(test);
|
|
403
|
-
});
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
describe('FIRST Hit Policy', () => {
|
|
407
|
-
const firstTestDir = 'test-data/decision-tables/hit-policy-first';
|
|
408
|
-
|
|
409
|
-
it('should return first matching rule', async () => {
|
|
410
|
-
const test = loadTestWithFixture(
|
|
411
|
-
`${firstTestDir}/first-match.json`,
|
|
412
|
-
{
|
|
413
|
-
customerType: 'premium',
|
|
414
|
-
orderAmount: 100,
|
|
415
|
-
},
|
|
416
|
-
{
|
|
417
|
-
discount: 0.15,
|
|
418
|
-
},
|
|
419
|
-
);
|
|
420
|
-
await runSimpleCompatibilityTest(test);
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
it('should passthrough input when no matching rules (passThrough: true)', async () => {
|
|
424
|
-
// With passThrough: true, zen-engine returns the input unchanged when no rules match
|
|
425
|
-
const test = loadTestWithFixture(
|
|
426
|
-
`${firstTestDir}/no-match.json`,
|
|
427
|
-
{
|
|
428
|
-
customerType: 'vip',
|
|
429
|
-
orderAmount: 100,
|
|
430
|
-
},
|
|
431
|
-
{
|
|
432
|
-
customerType: 'vip',
|
|
433
|
-
orderAmount: 100,
|
|
434
|
-
},
|
|
435
|
-
);
|
|
436
|
-
await runSimpleCompatibilityTest(test);
|
|
437
|
-
});
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
describe('COLLECT Hit Policy', () => {
|
|
441
|
-
const collectTestDir = 'test-data/decision-tables/hit-policy-collect';
|
|
442
|
-
|
|
443
|
-
it('should collect all matching rules', async () => {
|
|
444
|
-
// COLLECT hit policy returns raw array (not wrapped in object)
|
|
445
|
-
const test = loadTestWithFixture(
|
|
446
|
-
`${collectTestDir}/collect-multiple-matches.json`,
|
|
447
|
-
{
|
|
448
|
-
hasHighRiskMedicalCondition: true,
|
|
449
|
-
multiplePreExistingConditions: true,
|
|
450
|
-
recentHospitalization: false,
|
|
451
|
-
hazardousOccupation: false,
|
|
452
|
-
},
|
|
453
|
-
[
|
|
454
|
-
{ points: 10, description: 'High risk medical condition' },
|
|
455
|
-
{ points: 20, description: 'Multiple pre-existing conditions' },
|
|
456
|
-
],
|
|
457
|
-
);
|
|
458
|
-
await runSimpleCompatibilityTest(test);
|
|
459
|
-
});
|
|
460
|
-
|
|
461
|
-
it('should return empty array with no matching rules', async () => {
|
|
462
|
-
// COLLECT hit policy returns raw array (not wrapped in object)
|
|
463
|
-
const test = loadTestWithFixture(
|
|
464
|
-
`${collectTestDir}/collect-no-match.json`,
|
|
465
|
-
{
|
|
466
|
-
hasHighRiskMedicalCondition: false,
|
|
467
|
-
recentHospitalization: false,
|
|
468
|
-
},
|
|
469
|
-
[],
|
|
470
|
-
);
|
|
471
|
-
await runSimpleCompatibilityTest(test);
|
|
472
|
-
});
|
|
473
|
-
});
|
|
474
|
-
|
|
475
|
-
describe('RULE ORDER Hit Policy', () => {
|
|
476
|
-
const ruleOrderTestDir = 'test-data/decision-tables/hit-policy-rule-order';
|
|
477
|
-
|
|
478
|
-
it('should respect rule order', async () => {
|
|
479
|
-
// RULE ORDER returns raw array with results in definition order
|
|
480
|
-
const test = loadTestWithFixture(
|
|
481
|
-
`${ruleOrderTestDir}/rule-order-respected.json`,
|
|
482
|
-
{
|
|
483
|
-
customerType: 'premium',
|
|
484
|
-
orderAmount: 500,
|
|
485
|
-
},
|
|
486
|
-
[{ discount: 0.15 }, { discount: 0.2 }, { discount: 0.25 }],
|
|
487
|
-
);
|
|
488
|
-
// RULE ORDER hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `ruleOrder`, expected `first` or `collect`")
|
|
489
|
-
test.skipZen = true;
|
|
490
|
-
await runSimpleCompatibilityTest(test);
|
|
491
|
-
});
|
|
492
|
-
});
|
|
493
|
-
|
|
494
|
-
describe('OUTPUT ORDER Hit Policy', () => {
|
|
495
|
-
const outputOrderTestDir = 'test-data/decision-tables/hit-policy-output-order';
|
|
496
|
-
|
|
497
|
-
it('should respect output order', async () => {
|
|
498
|
-
// OUTPUT ORDER returns raw array sorted by output values
|
|
499
|
-
const test = loadTestWithFixture(
|
|
500
|
-
`${outputOrderTestDir}/output-order-respected.json`,
|
|
501
|
-
{
|
|
502
|
-
customerType: 'premium',
|
|
503
|
-
orderAmount: 500,
|
|
504
|
-
},
|
|
505
|
-
[{ discount: 0.25 }, { discount: 0.2 }, { discount: 0.15 }],
|
|
506
|
-
);
|
|
507
|
-
// OUTPUT ORDER hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `outputOrder`, expected `first` or `collect`")
|
|
508
|
-
test.skipZen = true;
|
|
509
|
-
await runSimpleCompatibilityTest(test);
|
|
510
|
-
});
|
|
511
|
-
});
|
|
512
|
-
|
|
513
|
-
describe('PRIORITY Hit Policy', () => {
|
|
514
|
-
const priorityTestDir = 'test-data/decision-tables/hit-policy-priority';
|
|
515
|
-
|
|
516
|
-
it('should respect priority output values', async () => {
|
|
517
|
-
// PRIORITY returns single object (highest priority result)
|
|
518
|
-
const test = loadTestWithFixture(
|
|
519
|
-
`${priorityTestDir}/priority-respected.json`,
|
|
520
|
-
{
|
|
521
|
-
customerType: 'premium',
|
|
522
|
-
},
|
|
523
|
-
{ discount: 0.25 },
|
|
524
|
-
);
|
|
525
|
-
// PRIORITY hit policy is a DMN extension not supported by zen-engine (throws: "unknown variant `priority`, expected `first` or `collect`")
|
|
526
|
-
test.skipZen = true;
|
|
527
|
-
await runSimpleCompatibilityTest(test);
|
|
528
|
-
});
|
|
529
|
-
});
|
|
530
|
-
});
|
|
531
|
-
});
|