eyeling 1.23.5 → 1.24.0
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/README.md +1 -0
- package/dist/browser/eyeling.browser.js +11876 -11928
- package/package.json +7 -5
- package/see/README.md +146 -0
- package/see/examples/_see.js +218 -0
- package/see/examples/age.js +1433 -0
- package/see/examples/annotation.js +1294 -0
- package/see/examples/backward.js +1379 -0
- package/see/examples/backward_recursion.js +1478 -0
- package/see/examples/bayes_diagnosis.js +2857 -0
- package/see/examples/bayes_therapy.js +4126 -0
- package/see/examples/bmi.js +3012 -0
- package/see/examples/builtin_coverage.js +2498 -0
- package/see/examples/collection.js +1294 -0
- package/see/examples/complex.js +3736 -0
- package/see/examples/complex_matrix_stability.js +2947 -0
- package/see/examples/composition_of_injective_functions_is_injective.js +2144 -0
- package/see/examples/control_system.js +1892 -0
- package/see/examples/crypto_builtins_tests.js +1463 -0
- package/see/examples/delfour.js +3148 -0
- package/see/examples/digital_product_passport.js +2830 -0
- package/see/examples/dijkstra.js +2044 -0
- package/see/examples/dijkstra_risk_path.js +1848 -0
- package/see/examples/doc/age.md +27 -0
- package/see/examples/doc/annotation.md +24 -0
- package/see/examples/doc/backward.md +26 -0
- package/see/examples/doc/backward_recursion.md +26 -0
- package/see/examples/doc/bayes_diagnosis.md +41 -0
- package/see/examples/doc/bayes_therapy.md +40 -0
- package/see/examples/doc/bmi.md +38 -0
- package/see/examples/doc/builtin_coverage.md +53 -0
- package/see/examples/doc/collection.md +24 -0
- package/see/examples/doc/complex.md +38 -0
- package/see/examples/doc/complex_matrix_stability.md +35 -0
- package/see/examples/doc/composition_of_injective_functions_is_injective.md +24 -0
- package/see/examples/doc/control_system.md +32 -0
- package/see/examples/doc/crypto_builtins_tests.md +27 -0
- package/see/examples/doc/delfour.md +37 -0
- package/see/examples/doc/digital_product_passport.md +36 -0
- package/see/examples/doc/dijkstra.md +28 -0
- package/see/examples/doc/dijkstra_risk_path.md +30 -0
- package/see/examples/doc/dog.md +28 -0
- package/see/examples/doc/eco_route_insight.md +33 -0
- package/see/examples/doc/equals.md +26 -0
- package/see/examples/doc/equivalence_classes_overlap_implies_same_class.md +24 -0
- package/see/examples/doc/euler_identity.md +39 -0
- package/see/examples/doc/ev_roundtrip_planner.md +32 -0
- package/see/examples/doc/existential_rule.md +24 -0
- package/see/examples/doc/expression_eval.md +26 -0
- package/see/examples/doc/family_cousins.md +24 -0
- package/see/examples/doc/fastpow.md +29 -0
- package/see/examples/doc/fibonacci.md +28 -0
- package/see/examples/doc/french_cities.md +28 -0
- package/see/examples/doc/fundamental_theorem_arithmetic.md +36 -0
- package/see/examples/doc/genetic_knapsack_selection.md +29 -0
- package/see/examples/doc/goldbach_1000.md +31 -0
- package/see/examples/doc/good_cobbler.md +27 -0
- package/see/examples/doc/gps.md +35 -0
- package/see/examples/doc/gray_code_counter.md +31 -0
- package/see/examples/doc/greatest_lower_bound_uniqueness.md +24 -0
- package/see/examples/doc/group_inverse_uniqueness.md +24 -0
- package/see/examples/doc/hadamard_approx.md +32 -0
- package/see/examples/doc/hanoi.md +26 -0
- package/see/examples/doc/odrl_dpv_risk_ranked.md +57 -0
- package/see/examples/doc/path_discovery.md +33 -0
- package/see/examples/doc/rc_discharge_envelope.md +33 -0
- package/see/examples/doc/rdf_message_flow.md +35 -0
- package/see/examples/doc/rdf_messages.md +37 -0
- package/see/examples/doc/school_placement_audit.md +31 -0
- package/see/examples/doc/smoke_arithmetic.md +31 -0
- package/see/examples/doc/socrates.md +24 -0
- package/see/examples/doc/wind_turbine.md +37 -0
- package/see/examples/doc/witch.md +28 -0
- package/see/examples/dog.js +1410 -0
- package/see/examples/eco_route_insight.js +2084 -0
- package/see/examples/equals.js +1337 -0
- package/see/examples/equivalence_classes_overlap_implies_same_class.js +1766 -0
- package/see/examples/euler_identity.js +2012 -0
- package/see/examples/ev_roundtrip_planner.js +2536 -0
- package/see/examples/existential_rule.js +1337 -0
- package/see/examples/expression_eval.js +1772 -0
- package/see/examples/family_cousins.js +1560 -0
- package/see/examples/fastpow.js +2181 -0
- package/see/examples/fibonacci.js +1568 -0
- package/see/examples/french_cities.js +1466 -0
- package/see/examples/fundamental_theorem_arithmetic.js +2080 -0
- package/see/examples/genetic_knapsack_selection.js +1717 -0
- package/see/examples/goldbach_1000.js +1772 -0
- package/see/examples/good_cobbler.js +1370 -0
- package/see/examples/gps.js +2787 -0
- package/see/examples/gray_code_counter.js +1615 -0
- package/see/examples/greatest_lower_bound_uniqueness.js +1892 -0
- package/see/examples/group_inverse_uniqueness.js +1871 -0
- package/see/examples/hadamard_approx.js +4391 -0
- package/see/examples/hanoi.js +1599 -0
- package/see/examples/input/age.trig +27 -0
- package/see/examples/input/annotation.trig +31 -0
- package/see/examples/input/backward.trig +25 -0
- package/see/examples/input/backward_recursion.trig +25 -0
- package/see/examples/input/bayes_diagnosis.trig +111 -0
- package/see/examples/input/bayes_therapy.trig +130 -0
- package/see/examples/input/bmi.trig +28 -0
- package/see/examples/input/builtin_coverage.trig +24 -0
- package/see/examples/input/collection.trig +25 -0
- package/see/examples/input/complex.trig +26 -0
- package/see/examples/input/complex_matrix_stability.trig +65 -0
- package/see/examples/input/composition_of_injective_functions_is_injective.trig +35 -0
- package/see/examples/input/control_system.trig +31 -0
- package/see/examples/input/crypto_builtins_tests.trig +25 -0
- package/see/examples/input/delfour.trig +90 -0
- package/see/examples/input/digital_product_passport.trig +116 -0
- package/see/examples/input/dijkstra.trig +34 -0
- package/see/examples/input/dijkstra_risk_path.trig +46 -0
- package/see/examples/input/dog.trig +31 -0
- package/see/examples/input/eco_route_insight.trig +58 -0
- package/see/examples/input/equals.trig +25 -0
- package/see/examples/input/equivalence_classes_overlap_implies_same_class.trig +28 -0
- package/see/examples/input/euler_identity.trig +34 -0
- package/see/examples/input/ev_roundtrip_planner.trig +90 -0
- package/see/examples/input/existential_rule.trig +26 -0
- package/see/examples/input/expression_eval.trig +41 -0
- package/see/examples/input/family_cousins.trig +39 -0
- package/see/examples/input/fastpow.trig +25 -0
- package/see/examples/input/fibonacci.trig +51 -0
- package/see/examples/input/french_cities.trig +38 -0
- package/see/examples/input/fundamental_theorem_arithmetic.trig +42 -0
- package/see/examples/input/genetic_knapsack_selection.trig +39 -0
- package/see/examples/input/goldbach_1000.trig +53 -0
- package/see/examples/input/good_cobbler.trig +24 -0
- package/see/examples/input/gps.trig +35 -0
- package/see/examples/input/gray_code_counter.trig +33 -0
- package/see/examples/input/greatest_lower_bound_uniqueness.trig +29 -0
- package/see/examples/input/group_inverse_uniqueness.trig +29 -0
- package/see/examples/input/hadamard_approx.trig +32 -0
- package/see/examples/input/hanoi.trig +26 -0
- package/see/examples/input/odrl_dpv_risk_ranked.trig +107 -0
- package/see/examples/input/path-discovery.trig +96448 -0
- package/see/examples/input/path_discovery.trig +29 -0
- package/see/examples/input/rc_discharge_envelope.trig +37 -0
- package/see/examples/input/rdf_message_flow.trig +100 -0
- package/see/examples/input/rdf_messages.trig +69 -0
- package/see/examples/input/school_placement_audit.trig +51 -0
- package/see/examples/input/smoke_arithmetic.trig +27 -0
- package/see/examples/input/socrates.trig +26 -0
- package/see/examples/input/wind_turbine.trig +48 -0
- package/see/examples/input/witch.trig +26 -0
- package/see/examples/n3/age.n3 +28 -0
- package/see/examples/n3/annotation.n3 +7 -0
- package/see/examples/n3/backward.n3 +22 -0
- package/see/examples/n3/backward_recursion.n3 +12 -0
- package/see/examples/n3/bayes_diagnosis.n3 +122 -0
- package/see/examples/n3/bayes_therapy.n3 +149 -0
- package/see/examples/n3/bmi.n3 +145 -0
- package/see/examples/n3/builtin_coverage.n3 +68 -0
- package/see/examples/n3/collection.n3 +3 -0
- package/see/examples/n3/complex.n3 +140 -0
- package/see/examples/n3/complex_matrix_stability.n3 +113 -0
- package/see/examples/n3/composition_of_injective_functions_is_injective.n3 +27 -0
- package/see/examples/n3/control_system.n3 +59 -0
- package/see/examples/n3/crypto_builtins_tests.n3 +18 -0
- package/see/examples/n3/delfour.n3 +167 -0
- package/see/examples/n3/digital_product_passport.n3 +156 -0
- package/see/examples/n3/dijkstra.n3 +46 -0
- package/see/examples/n3/dijkstra_risk_path.n3 +67 -0
- package/see/examples/n3/dog.n3 +20 -0
- package/see/examples/n3/eco_route_insight.n3 +88 -0
- package/see/examples/n3/equals.n3 +11 -0
- package/see/examples/n3/equivalence_classes_overlap_implies_same_class.n3 +19 -0
- package/see/examples/n3/euler_identity.n3 +41 -0
- package/see/examples/n3/ev_roundtrip_planner.n3 +82 -0
- package/see/examples/n3/existential_rule.n3 +10 -0
- package/see/examples/n3/expression_eval.n3 +21 -0
- package/see/examples/n3/family_cousins.n3 +62 -0
- package/see/examples/n3/fastpow.n3 +56 -0
- package/see/examples/n3/fibonacci.n3 +44 -0
- package/see/examples/n3/french_cities.n3 +28 -0
- package/see/examples/n3/fundamental_theorem_arithmetic.n3 +84 -0
- package/see/examples/n3/genetic_knapsack_selection.n3 +54 -0
- package/see/examples/n3/goldbach_1000.n3 +66 -0
- package/see/examples/n3/good_cobbler.n3 +10 -0
- package/see/examples/n3/gps.n3 +70 -0
- package/see/examples/n3/gray_code_counter.n3 +53 -0
- package/see/examples/n3/greatest_lower_bound_uniqueness.n3 +20 -0
- package/see/examples/n3/group_inverse_uniqueness.n3 +19 -0
- package/see/examples/n3/hadamard_approx.n3 +43 -0
- package/see/examples/n3/hanoi.n3 +16 -0
- package/see/examples/n3/odrl_dpv_risk_ranked.n3 +460 -0
- package/see/examples/n3/path_discovery.n3 +43 -0
- package/see/examples/n3/rc_discharge_envelope.n3 +61 -0
- package/see/examples/n3/rdf_message_flow.n3 +209 -0
- package/see/examples/n3/rdf_messages.n3 +143 -0
- package/see/examples/n3/school_placement_audit.n3 +63 -0
- package/see/examples/n3/smoke_arithmetic.n3 +22 -0
- package/see/examples/n3/socrates.n3 +21 -0
- package/see/examples/n3/wind_turbine.n3 +85 -0
- package/see/examples/n3/witch.n3 +30 -0
- package/see/examples/odrl_dpv_risk_ranked.js +5102 -0
- package/see/examples/output/age.md +48 -0
- package/see/examples/output/annotation.md +43 -0
- package/see/examples/output/backward.md +50 -0
- package/see/examples/output/backward_recursion.md +54 -0
- package/see/examples/output/bayes_diagnosis.md +103 -0
- package/see/examples/output/bayes_therapy.md +84 -0
- package/see/examples/output/bmi.md +164 -0
- package/see/examples/output/builtin_coverage.md +99 -0
- package/see/examples/output/collection.md +44 -0
- package/see/examples/output/complex.md +61 -0
- package/see/examples/output/complex_matrix_stability.md +55 -0
- package/see/examples/output/composition_of_injective_functions_is_injective.md +62 -0
- package/see/examples/output/control_system.md +61 -0
- package/see/examples/output/crypto_builtins_tests.md +68 -0
- package/see/examples/output/delfour.md +100 -0
- package/see/examples/output/digital_product_passport.md +100 -0
- package/see/examples/output/dijkstra.md +74 -0
- package/see/examples/output/dijkstra_risk_path.md +76 -0
- package/see/examples/output/dog.md +50 -0
- package/see/examples/output/eco_route_insight.md +88 -0
- package/see/examples/output/equals.md +50 -0
- package/see/examples/output/equivalence_classes_overlap_implies_same_class.md +86 -0
- package/see/examples/output/euler_identity.md +73 -0
- package/see/examples/output/ev_roundtrip_planner.md +79 -0
- package/see/examples/output/existential_rule.md +54 -0
- package/see/examples/output/expression_eval.md +50 -0
- package/see/examples/output/family_cousins.md +187 -0
- package/see/examples/output/fastpow.md +36 -0
- package/see/examples/output/fibonacci.md +53 -0
- package/see/examples/output/french_cities.md +70 -0
- package/see/examples/output/fundamental_theorem_arithmetic.md +101 -0
- package/see/examples/output/genetic_knapsack_selection.md +66 -0
- package/see/examples/output/goldbach_1000.md +58 -0
- package/see/examples/output/good_cobbler.md +54 -0
- package/see/examples/output/gps.md +102 -0
- package/see/examples/output/gray_code_counter.md +68 -0
- package/see/examples/output/greatest_lower_bound_uniqueness.md +60 -0
- package/see/examples/output/group_inverse_uniqueness.md +60 -0
- package/see/examples/output/hadamard_approx.md +510 -0
- package/see/examples/output/hanoi.md +51 -0
- package/see/examples/output/odrl_dpv_risk_ranked.md +139 -0
- package/see/examples/output/path_discovery.md +65 -0
- package/see/examples/output/rc_discharge_envelope.md +102 -0
- package/see/examples/output/rdf_message_flow.md +198 -0
- package/see/examples/output/rdf_messages.md +134 -0
- package/see/examples/output/school_placement_audit.md +99 -0
- package/see/examples/output/smoke_arithmetic.md +54 -0
- package/see/examples/output/socrates.md +55 -0
- package/see/examples/output/wind_turbine.md +108 -0
- package/see/examples/output/witch.md +87 -0
- package/see/examples/path_discovery.js +1748 -0
- package/see/examples/rc_discharge_envelope.js +1967 -0
- package/see/examples/rdf_message_flow.js +2554 -0
- package/see/examples/rdf_messages.js +2150 -0
- package/see/examples/school_placement_audit.js +1841 -0
- package/see/examples/smoke_arithmetic.js +1457 -0
- package/see/examples/socrates.js +1394 -0
- package/see/examples/wind_turbine.js +2827 -0
- package/see/examples/witch.js +1493 -0
- package/see/see.js +1794 -0
- package/test/see.test.js +159 -0
- package/tools/n3gen.js +1 -1
package/test/see.test.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const os = require('node:os');
|
|
6
|
+
const path = require('node:path');
|
|
7
|
+
const cp = require('node:child_process');
|
|
8
|
+
|
|
9
|
+
const TTY = process.stdout.isTTY;
|
|
10
|
+
const C = TTY
|
|
11
|
+
? { g: '\x1b[32m', r: '\x1b[31m', y: '\x1b[33m', dim: '\x1b[2m', n: '\x1b[0m' }
|
|
12
|
+
: { g: '', r: '', y: '', dim: '', n: '' };
|
|
13
|
+
const msTag = (ms) => `${C.dim}(${ms} ms)${C.n}`;
|
|
14
|
+
|
|
15
|
+
function ok(msg) {
|
|
16
|
+
console.log(`${C.g}OK${C.n} ${msg}`);
|
|
17
|
+
}
|
|
18
|
+
function fail(msg) {
|
|
19
|
+
console.error(`${C.r}FAIL${C.n} ${msg}`);
|
|
20
|
+
}
|
|
21
|
+
function info(msg) {
|
|
22
|
+
console.log(`${C.y}==${C.n} ${msg}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function run(cmd, args, opts = {}) {
|
|
26
|
+
return cp.spawnSync(cmd, args, {
|
|
27
|
+
encoding: 'utf8',
|
|
28
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
29
|
+
...opts,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getEyelingVersion(nodePath, eyelingJsPath, cwd) {
|
|
34
|
+
const r = run(nodePath, [eyelingJsPath, '-v'], { cwd });
|
|
35
|
+
const s = (r.stdout || r.stderr || '').trim();
|
|
36
|
+
return s || 'eyeling (unknown version)';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function mkTmpDir() {
|
|
40
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), 'eyeling-see-'));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function rmrf(p) {
|
|
44
|
+
try {
|
|
45
|
+
fs.rmSync(p, { recursive: true, force: true });
|
|
46
|
+
} catch {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function showDiff(expectedPath, generatedPath) {
|
|
50
|
+
const d = run('diff', ['-u', expectedPath, generatedPath]);
|
|
51
|
+
if (d.stdout) process.stdout.write(d.stdout);
|
|
52
|
+
if (d.stderr) process.stderr.write(d.stderr);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function main() {
|
|
56
|
+
const suiteStart = Date.now();
|
|
57
|
+
|
|
58
|
+
// test/see.test.js -> repo root is one level up
|
|
59
|
+
const root = path.resolve(__dirname, '..');
|
|
60
|
+
const seeDir = path.join(root, 'see');
|
|
61
|
+
const examplesDir = path.join(seeDir, 'examples');
|
|
62
|
+
const outputDir = path.join(examplesDir, 'output');
|
|
63
|
+
const eyelingJsPath = path.join(root, 'eyeling.js');
|
|
64
|
+
const nodePath = process.execPath;
|
|
65
|
+
|
|
66
|
+
if (!fs.existsSync(examplesDir)) {
|
|
67
|
+
fail(`Cannot find SEE examples directory: ${examplesDir}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
if (!fs.existsSync(outputDir)) {
|
|
71
|
+
fail(`Cannot find SEE expected output directory: ${outputDir}`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const files = fs
|
|
76
|
+
.readdirSync(examplesDir)
|
|
77
|
+
.filter((file) => file.endsWith('.js') && !file.startsWith('_'))
|
|
78
|
+
.sort((a, b) => a.localeCompare(b));
|
|
79
|
+
|
|
80
|
+
info(`Running ${files.length} SEE examples tests`);
|
|
81
|
+
console.log(`${C.dim}${getEyelingVersion(nodePath, eyelingJsPath, root)}; node ${process.version}${C.n}`);
|
|
82
|
+
|
|
83
|
+
if (files.length === 0) {
|
|
84
|
+
ok('No SEE example .js files found in see/examples/');
|
|
85
|
+
process.exit(0);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let passed = 0;
|
|
89
|
+
let failed = 0;
|
|
90
|
+
const idxWidth = String(files.length).length;
|
|
91
|
+
|
|
92
|
+
for (let i = 0; i < files.length; i++) {
|
|
93
|
+
const idx = String(i + 1).padStart(idxWidth, '0');
|
|
94
|
+
const file = files[i];
|
|
95
|
+
const name = path.basename(file, '.js');
|
|
96
|
+
const start = Date.now();
|
|
97
|
+
|
|
98
|
+
const examplePath = path.join(examplesDir, file);
|
|
99
|
+
const expectedPath = path.join(outputDir, `${name}.md`);
|
|
100
|
+
if (!fs.existsSync(expectedPath)) {
|
|
101
|
+
fail(`${idx} ${file} ${msTag(Date.now() - start)}`);
|
|
102
|
+
fail(`Missing expected output: ${path.relative(root, expectedPath)}`);
|
|
103
|
+
failed++;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const tmpDir = mkTmpDir();
|
|
108
|
+
const generatedPath = path.join(tmpDir, `${name}.md`);
|
|
109
|
+
const outFd = fs.openSync(generatedPath, 'w');
|
|
110
|
+
let r;
|
|
111
|
+
try {
|
|
112
|
+
r = cp.spawnSync(nodePath, [examplePath], {
|
|
113
|
+
cwd: seeDir,
|
|
114
|
+
stdio: ['ignore', outFd, 'pipe'],
|
|
115
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
116
|
+
encoding: 'utf8',
|
|
117
|
+
});
|
|
118
|
+
} finally {
|
|
119
|
+
fs.closeSync(outFd);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const ms = Date.now() - start;
|
|
123
|
+
const rc = r.status == null ? 1 : r.status;
|
|
124
|
+
|
|
125
|
+
let outputOk = false;
|
|
126
|
+
try {
|
|
127
|
+
outputOk = fs.readFileSync(generatedPath, 'utf8') === fs.readFileSync(expectedPath, 'utf8');
|
|
128
|
+
} catch {
|
|
129
|
+
outputOk = false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (rc === 0 && outputOk) {
|
|
133
|
+
ok(`${idx} ${file} ${msTag(ms)}`);
|
|
134
|
+
passed++;
|
|
135
|
+
} else {
|
|
136
|
+
fail(`${idx} ${file} ${msTag(ms)}`);
|
|
137
|
+
if (rc !== 0) fail(`Exit code ${rc}, expected 0`);
|
|
138
|
+
if (r.stderr) process.stderr.write(r.stderr);
|
|
139
|
+
if (!outputOk) {
|
|
140
|
+
fail('Output differs');
|
|
141
|
+
showDiff(expectedPath, generatedPath);
|
|
142
|
+
}
|
|
143
|
+
failed++;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
rmrf(tmpDir);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
console.log('');
|
|
150
|
+
info(`Total elapsed: ${Date.now() - suiteStart} ms`);
|
|
151
|
+
if (failed === 0) {
|
|
152
|
+
ok(`All SEE examples tests passed (${passed}/${files.length})`);
|
|
153
|
+
process.exit(0);
|
|
154
|
+
}
|
|
155
|
+
fail(`Some SEE examples tests failed (${passed}/${files.length})`);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
main();
|