hclang 0.1.0 → 0.5.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/README.md +25 -3
- package/lib/src/cli/bin.js +4 -0
- package/lib/src/cli/hc.js +45 -0
- package/lib/src/execute/eval-pipe.js +15 -0
- package/lib/src/execute/evaluate.js +10 -0
- package/lib/src/execute/execute.js +18 -0
- package/lib/src/execute/frame-space.js +17 -0
- package/lib/src/execute/hc-eval.js +105 -0
- package/lib/src/execute/hc-log.js +39 -0
- package/lib/src/execute/hc-test.js +43 -0
- package/lib/src/execute/lex-bytes.js +42 -0
- package/lib/src/execute/lex-pipe.js +56 -0
- package/lib/src/execute/lex.js +110 -0
- package/lib/src/execute/lexer.js +24 -0
- package/lib/src/execute/parse-pipe.js +52 -0
- package/lib/src/execute/syntax.js +36 -0
- package/lib/src/execute/terminals.js +54 -0
- package/lib/src/execute.js +3 -0
- package/lib/src/frames/frame-alias.js +45 -0
- package/lib/src/frames/frame-arg.js +62 -0
- package/lib/src/frames/frame-array.js +47 -0
- package/lib/src/frames/frame-atom.js +41 -0
- package/lib/src/frames/frame-blob.js +104 -0
- package/lib/src/frames/frame-bytes.js +31 -0
- package/lib/src/frames/frame-comment.js +28 -0
- package/lib/src/frames/frame-doc.js +19 -0
- package/lib/src/frames/frame-expr.js +34 -0
- package/lib/src/frames/frame-group.js +31 -0
- package/lib/src/frames/frame-lazy.js +39 -0
- package/lib/src/frames/frame-list.js +58 -0
- package/lib/src/frames/frame-name.js +29 -0
- package/lib/src/frames/frame-note.js +104 -0
- package/lib/src/frames/frame-number.js +28 -0
- package/lib/src/frames/frame-schema.js +47 -0
- package/lib/src/frames/frame-string.js +41 -0
- package/lib/src/frames/frame-symbol.js +75 -0
- package/lib/src/frames/frame.js +75 -0
- package/lib/src/frames/meta-frame.js +99 -0
- package/lib/src/frames.js +24 -0
- package/lib/src/index.js +5 -0
- package/lib/src/maml/tag.js +17 -0
- package/lib/src/maml.js +26 -0
- package/lib/src/ops/conditionals.js +14 -0
- package/lib/src/ops/frame-curry.js +17 -0
- package/lib/src/ops/frame-ops.js +24 -0
- package/lib/src/ops/iterators.js +28 -0
- package/lib/src/ops.js +12 -0
- package/lib/src/version.js +3 -0
- package/lib/test/execute/eval-pipe-spec.js +45 -0
- package/lib/test/execute/evaluate-spec.js +76 -0
- package/lib/test/execute/execute-spec.js +115 -0
- package/lib/test/execute/hc-eval-spec.js +68 -0
- package/lib/test/execute/hc-test-spec.js +47 -0
- package/lib/test/execute/lex-pipe-spec.js +25 -0
- package/lib/test/execute/parse-spec.js +67 -0
- package/lib/test/execute/script-spec.js +29 -0
- package/lib/test/frames/frame-alias-spec.js +36 -0
- package/lib/test/frames/frame-arg-spec.js +57 -0
- package/lib/test/frames/frame-array-spec.js +54 -0
- package/lib/test/frames/frame-blob-spec.js +56 -0
- package/lib/test/frames/frame-bytes-spec.js +16 -0
- package/lib/test/frames/frame-comment-spec.js +17 -0
- package/lib/test/frames/frame-expr-spec.js +60 -0
- package/lib/test/frames/frame-group-spec.js +27 -0
- package/lib/test/frames/frame-lazy-spec.js +49 -0
- package/lib/test/frames/frame-name-spec.js +26 -0
- package/lib/test/frames/frame-note-spec.js +48 -0
- package/lib/test/frames/frame-number-spec.js +17 -0
- package/lib/test/frames/frame-schema-spec.js +54 -0
- package/lib/test/frames/frame-spec.js +31 -0
- package/lib/test/frames/frame-string-spec.js +43 -0
- package/lib/test/frames/frame-symbol-spec.js +64 -0
- package/lib/test/frames/meta-frame-spec.js +75 -0
- package/lib/test/maml/maml-spec.js +42 -0
- package/lib/test/maml/tag-spec.js +53 -0
- package/lib/test/ops/iterators-spec.js +70 -0
- package/package.json +61 -34
- package/lib/bin.d.ts +0 -0
- package/lib/bin.js +0 -6
- package/lib/execute/actions.d.ts +0 -13
- package/lib/execute/actions.js +0 -48
- package/lib/execute/eval-pipe.d.ts +0 -5
- package/lib/execute/eval-pipe.js +0 -32
- package/lib/execute/evaluate.d.ts +0 -2
- package/lib/execute/evaluate.js +0 -20
- package/lib/execute/frame-space.d.ts +0 -7
- package/lib/execute/frame-space.js +0 -32
- package/lib/execute/group-pipe.d.ts +0 -6
- package/lib/execute/group-pipe.js +0 -27
- package/lib/execute/lex-pipe.d.ts +0 -12
- package/lib/execute/lex-pipe.js +0 -55
- package/lib/execute/lex.d.ts +0 -26
- package/lib/execute/lex.js +0 -94
- package/lib/execute/lexer.d.ts +0 -9
- package/lib/execute/lexer.js +0 -55
- package/lib/execute/parse-pipe.d.ts +0 -8
- package/lib/execute/parse-pipe.js +0 -49
- package/lib/execute/parser.d.ts +0 -8
- package/lib/execute/parser.js +0 -49
- package/lib/execute/syntax.d.ts +0 -2
- package/lib/execute/syntax.js +0 -23
- package/lib/execute/terminals.d.ts +0 -10
- package/lib/execute/terminals.js +0 -48
- package/lib/execute.d.ts +0 -1
- package/lib/execute.js +0 -9
- package/lib/frames/frame-arg.d.ts +0 -24
- package/lib/frames/frame-arg.js +0 -81
- package/lib/frames/frame-array.d.ts +0 -15
- package/lib/frames/frame-array.js +0 -50
- package/lib/frames/frame-atom.d.ts +0 -17
- package/lib/frames/frame-atom.js +0 -52
- package/lib/frames/frame-comment.d.ts +0 -12
- package/lib/frames/frame-comment.js +0 -36
- package/lib/frames/frame-doc.d.ts +0 -9
- package/lib/frames/frame-doc.js +0 -31
- package/lib/frames/frame-expr.d.ts +0 -9
- package/lib/frames/frame-expr.js +0 -48
- package/lib/frames/frame-group.d.ts +0 -7
- package/lib/frames/frame-group.js +0 -39
- package/lib/frames/frame-lazy.d.ts +0 -13
- package/lib/frames/frame-lazy.js +0 -54
- package/lib/frames/frame-list.d.ts +0 -15
- package/lib/frames/frame-list.js +0 -51
- package/lib/frames/frame-name.d.ts +0 -12
- package/lib/frames/frame-name.js +0 -37
- package/lib/frames/frame-number.d.ts +0 -9
- package/lib/frames/frame-number.js +0 -31
- package/lib/frames/frame-string.d.ts +0 -14
- package/lib/frames/frame-string.js +0 -47
- package/lib/frames/frame-symbol.d.ts +0 -18
- package/lib/frames/frame-symbol.js +0 -64
- package/lib/frames/frame.d.ts +0 -22
- package/lib/frames/frame.js +0 -73
- package/lib/frames/meta-frame.d.ts +0 -26
- package/lib/frames/meta-frame.js +0 -85
- package/lib/frames.d.ts +0 -15
- package/lib/frames.js +0 -36
- package/lib/hc.d.ts +0 -0
- package/lib/hc.js +0 -13
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -9
- package/lib/maml/tag.d.ts +0 -2
- package/lib/maml/tag.js +0 -19
- package/lib/maml.d.ts +0 -2
- package/lib/maml.js +0 -30
- package/lib/ops/frame-curry.d.ts +0 -9
- package/lib/ops/frame-curry.js +0 -31
- package/lib/ops/frame-ops.d.ts +0 -12
- package/lib/ops/frame-ops.js +0 -41
- package/lib/ops/iterators.d.ts +0 -2
- package/lib/ops/iterators.js +0 -12
- package/lib/ops.d.ts +0 -3
- package/lib/ops.js +0 -8
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it, beforeEach } from 'mocha';
|
|
3
|
+
import { Token } from '../../src/execute/lex.js';
|
|
4
|
+
import { ParsePipe } from '../../src/execute/parse-pipe.js';
|
|
5
|
+
import * as frame from '../../src/frames.js';
|
|
6
|
+
describe('Parse', () => {
|
|
7
|
+
const content = new frame.FrameString('content');
|
|
8
|
+
const token = new Token(content);
|
|
9
|
+
const symbol = frame.FrameSymbol.for(',');
|
|
10
|
+
let out;
|
|
11
|
+
let pipe;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
out = new frame.FrameArray([]);
|
|
14
|
+
pipe = new ParsePipe(out, frame.FrameGroup);
|
|
15
|
+
});
|
|
16
|
+
describe('Token', () => {
|
|
17
|
+
it('is exported', () => {
|
|
18
|
+
expect(Token).to.be.ok;
|
|
19
|
+
});
|
|
20
|
+
it('is constructed from a Frame', () => {
|
|
21
|
+
expect(token).to.be.ok;
|
|
22
|
+
});
|
|
23
|
+
it('calls callee with content when called', () => {
|
|
24
|
+
const result = out.call(token);
|
|
25
|
+
expect(out.asArray().length).to.equal(1);
|
|
26
|
+
expect(out.at(0)).to.equal(content);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('ParsePipe', () => {
|
|
30
|
+
it('is exported', () => {
|
|
31
|
+
expect(ParsePipe).to.be.ok;
|
|
32
|
+
});
|
|
33
|
+
it('is constructed from an out parameter', () => {
|
|
34
|
+
expect(pipe).to.be.ok;
|
|
35
|
+
});
|
|
36
|
+
it('emits empty Group on end', () => {
|
|
37
|
+
pipe.call(frame.FrameSymbol.end());
|
|
38
|
+
expect(out.size()).to.equal(1);
|
|
39
|
+
const result = out.at(0);
|
|
40
|
+
expect(result).to.be.instanceOf(frame.FrameGroup);
|
|
41
|
+
});
|
|
42
|
+
it('adds token contents on `call`', () => {
|
|
43
|
+
expect(pipe.length()).to.equal(0);
|
|
44
|
+
pipe.call(token);
|
|
45
|
+
expect(pipe.length()).to.equal(1);
|
|
46
|
+
pipe.call(token);
|
|
47
|
+
expect(pipe.length()).to.equal(2);
|
|
48
|
+
});
|
|
49
|
+
it('collects contents on `next`', () => {
|
|
50
|
+
pipe.call(token);
|
|
51
|
+
expect(pipe.length()).to.equal(1);
|
|
52
|
+
pipe.next(false);
|
|
53
|
+
expect(pipe.length()).to.equal(0);
|
|
54
|
+
const collector = pipe.collector;
|
|
55
|
+
expect(collector.length).to.equal(1);
|
|
56
|
+
});
|
|
57
|
+
it('emits Grouped expr on `finish`', () => {
|
|
58
|
+
pipe.call(token);
|
|
59
|
+
pipe.call(frame.FrameSymbol.end());
|
|
60
|
+
expect(out.size()).to.equal(1);
|
|
61
|
+
const expr = out.at(0);
|
|
62
|
+
expect(expr).to.be.instanceOf(frame.FrameGroup);
|
|
63
|
+
expect(expr.toString()).to.equal(`((${content}))`);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Utc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZXhlY3V0ZS9wYXJzZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRWhELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDM0QsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQTtBQUc1QyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFekMsSUFBSSxHQUFxQixDQUFBO0lBQ3pCLElBQUksSUFBZSxDQUFBO0lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlCLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0lBRUYsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDckIsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFB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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { execFileSync } from 'child_process';
|
|
3
|
+
import { describe, it, beforeEach } from 'mocha';
|
|
4
|
+
describe('script', () => {
|
|
5
|
+
const hc_bin = 'lib/src/cli/hc.js';
|
|
6
|
+
let title;
|
|
7
|
+
beforeEach(function () {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
title = (_b = (_a = this.currentTest) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : 'n/a';
|
|
10
|
+
});
|
|
11
|
+
const script = (args) => {
|
|
12
|
+
const result = execFileSync(hc_bin, args);
|
|
13
|
+
return result.toString().split('\n');
|
|
14
|
+
};
|
|
15
|
+
it('=', () => {
|
|
16
|
+
const result = script(['-e', title]);
|
|
17
|
+
expect(result[0]).to.include(title);
|
|
18
|
+
// Frame is a language with no equal
|
|
19
|
+
});
|
|
20
|
+
it('123', () => {
|
|
21
|
+
const result = script(['-e', title]);
|
|
22
|
+
expect(result[0]).to.equal(title);
|
|
23
|
+
});
|
|
24
|
+
it('“Hello, Quine!”', () => {
|
|
25
|
+
const result = script(['-e', title]);
|
|
26
|
+
expect(result[0]).to.equal(title);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LXNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2V4ZWN1dGUvc2NyaXB0LXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVoRCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QixNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQTtJQUNsQyxJQUFJLEtBQWEsQ0FBQTtJQUVqQixVQUFVLENBQUM7O1FBQ1QsS0FBSyxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxLQUFLLG1DQUFJLEtBQUssQ0FBQTtJQUMxQyxDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBYyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsQ0FBQyxDQUFBO0lBRUQsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQyxvQ0FBb0M7SUFDdEMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ25DLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameAlias, FrameExpr, FrameString, FrameSymbol } from '../../src/frames.js';
|
|
4
|
+
describe('FrameAlias', () => {
|
|
5
|
+
const key = 'atom';
|
|
6
|
+
const frame_alias = new FrameAlias(key);
|
|
7
|
+
const value_1 = new FrameString('neutron');
|
|
8
|
+
const value_2 = new FrameString('proton');
|
|
9
|
+
const parent = new FrameString('parent', { atom: value_1 });
|
|
10
|
+
const child = new FrameString('child');
|
|
11
|
+
child.up = parent;
|
|
12
|
+
it('is created from a string', () => {
|
|
13
|
+
expect(frame_alias).to.be.instanceOf(FrameAlias);
|
|
14
|
+
});
|
|
15
|
+
it('stringifies with @ prefix', () => {
|
|
16
|
+
expect(frame_alias.toString()).to.equal(`@${key}`);
|
|
17
|
+
});
|
|
18
|
+
it('evaluates to a setter for ancestor', () => {
|
|
19
|
+
const frame_key = FrameSymbol.for(key);
|
|
20
|
+
const result = frame_alias.in([child]);
|
|
21
|
+
expect(result.toString()).to.include(frame_key.toString());
|
|
22
|
+
const out = result.get(FrameAlias.kOUT);
|
|
23
|
+
expect(out).to.equal(parent);
|
|
24
|
+
});
|
|
25
|
+
it('sets properties in ancestor', () => {
|
|
26
|
+
const result_1 = child.get(key);
|
|
27
|
+
expect(result_1.toString()).to.include('neutron');
|
|
28
|
+
const frame_expr = new FrameExpr([frame_alias, value_2]);
|
|
29
|
+
frame_expr.in([child]);
|
|
30
|
+
const result_2 = child.get(key);
|
|
31
|
+
expect(result_2.toString()).to.include('proton');
|
|
32
|
+
const result_3 = parent.get(key);
|
|
33
|
+
expect(result_3.toString()).to.include('proton');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYWxpYXMtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZnJhbWVzL2ZyYW1lLWFsaWFzLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFZLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFL0YsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFBO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzNELE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLEtBQUssQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFBO0lBRWpCLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2xELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1FBQzVDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUN4RCxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUV0QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameArg, FrameParam, FrameString } from '../../src/frames.js';
|
|
4
|
+
describe('FrameArg', () => {
|
|
5
|
+
const frame_arg = FrameArg.here();
|
|
6
|
+
describe('here', () => {
|
|
7
|
+
it('is created from \'here\'', () => {
|
|
8
|
+
expect(frame_arg).to.be.instanceOf(FrameArg);
|
|
9
|
+
});
|
|
10
|
+
it('stringifies to underscore', () => {
|
|
11
|
+
expect(frame_arg.toString()).to.equal('_');
|
|
12
|
+
});
|
|
13
|
+
it('evaluates to the context', () => {
|
|
14
|
+
const context = new FrameString('context', { atom: frame_arg });
|
|
15
|
+
expect(FrameArg.here().in([context])).to.equal(context);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('level', () => {
|
|
19
|
+
it('returns \'here\' at level 1', () => {
|
|
20
|
+
const frame_level = FrameArg.level();
|
|
21
|
+
expect(frame_level).to.equal(frame_arg);
|
|
22
|
+
});
|
|
23
|
+
it('returns the same object at each level', () => {
|
|
24
|
+
const level_2 = FrameArg.level(2);
|
|
25
|
+
expect(FrameArg.level(2)).to.equal(level_2);
|
|
26
|
+
});
|
|
27
|
+
it('evaluates to a lower level', () => {
|
|
28
|
+
const context = new FrameString('context', { atom: frame_arg });
|
|
29
|
+
const level_3 = FrameArg.level(3);
|
|
30
|
+
const level_2 = FrameArg.level(2);
|
|
31
|
+
expect(level_3.in([context])).to.equal(level_2);
|
|
32
|
+
expect(level_2.in([context])).to.equal(frame_arg);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('FrameParam', () => {
|
|
36
|
+
const frame_param = FrameParam.there();
|
|
37
|
+
const context = new FrameString('context');
|
|
38
|
+
const param = new FrameString('param');
|
|
39
|
+
it('is created from \'there\'', () => {
|
|
40
|
+
expect(frame_param).to.be.instanceOf(FrameParam);
|
|
41
|
+
});
|
|
42
|
+
it('stringifies to _^', () => {
|
|
43
|
+
expect(frame_param.toString()).to.equal('_^');
|
|
44
|
+
});
|
|
45
|
+
it('evaluates to the parameter', () => {
|
|
46
|
+
expect(frame_param.in([context, param])).to.equal(param);
|
|
47
|
+
});
|
|
48
|
+
it('evaluates to higher-level parameters', () => {
|
|
49
|
+
const frame_param_2 = FrameParam.level(2);
|
|
50
|
+
const param2 = new FrameString('param level 2');
|
|
51
|
+
const stack = [context, param, param2];
|
|
52
|
+
expect(frame_param_2.toString()).to.equal('_^^');
|
|
53
|
+
expect(frame_param_2.in(stack)).to.equal(param2);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYXJnLXNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ZyYW1lcy9mcmFtZS1hcmctc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRXBDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXZFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUVqQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNwQixFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7WUFDbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQy9ELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FB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
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { Frame, FrameArray, FrameExpr, FrameString } from '../../src/frames.js';
|
|
4
|
+
describe('FrameArray', () => {
|
|
5
|
+
const a_frame = new FrameString('a');
|
|
6
|
+
const b_frame = new FrameString('b');
|
|
7
|
+
const frame_array = new FrameArray([a_frame, b_frame]);
|
|
8
|
+
it('is constructed from an array of frames', () => {
|
|
9
|
+
expect(frame_array).to.be.instanceOf(FrameArray);
|
|
10
|
+
});
|
|
11
|
+
it('stringifies with brackets', () => {
|
|
12
|
+
expect(frame_array.toString()).to.equal('[“a”, “b”]');
|
|
13
|
+
});
|
|
14
|
+
it('uses \'at\' to access elements by index', () => {
|
|
15
|
+
const first_element = frame_array.at(0);
|
|
16
|
+
expect(first_element).to.be.ok;
|
|
17
|
+
expect(first_element).to.equal(a_frame);
|
|
18
|
+
});
|
|
19
|
+
it('uses -1 to access last element', () => {
|
|
20
|
+
const last_element = frame_array.at(-1);
|
|
21
|
+
expect(last_element).to.be.ok;
|
|
22
|
+
expect(last_element).to.equal(b_frame);
|
|
23
|
+
});
|
|
24
|
+
it('appends when called', () => {
|
|
25
|
+
const array = new FrameArray([]);
|
|
26
|
+
array.call(a_frame);
|
|
27
|
+
array.call(b_frame);
|
|
28
|
+
expect(array.toString()).to.equal('[“a”, “b”]');
|
|
29
|
+
});
|
|
30
|
+
it('appends when non-nil', () => {
|
|
31
|
+
const array = new FrameArray([]);
|
|
32
|
+
array.call(a_frame);
|
|
33
|
+
array.call(Frame.nil);
|
|
34
|
+
expect(array.toString()).to.equal('[“a”]');
|
|
35
|
+
});
|
|
36
|
+
it('evaluates its components into an array', () => {
|
|
37
|
+
const string = new FrameString('string');
|
|
38
|
+
const array_of_expr = new FrameArray([
|
|
39
|
+
Frame.nil,
|
|
40
|
+
string,
|
|
41
|
+
new FrameExpr([
|
|
42
|
+
new FrameString('prefix-'),
|
|
43
|
+
new FrameString('-suffix')
|
|
44
|
+
])
|
|
45
|
+
]);
|
|
46
|
+
const result = array_of_expr.in();
|
|
47
|
+
const expr_result = result.at(2);
|
|
48
|
+
expect(result).to.be.instanceOf(FrameArray);
|
|
49
|
+
expect(result.at(0)).to.equal(Frame.nil);
|
|
50
|
+
expect(result.at(1)).to.equal(string);
|
|
51
|
+
expect(expr_result.toString()).to.include('prefix--suffix');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYXJyYXktc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZnJhbWVzL2ZyYW1lLWFycmF5LXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFL0UsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUV0RCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7UUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDakQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ25DLEtBQUssQ0FBQyxHQUFHO1lBQ1QsTUFBTTtZQUNOLElBQUksU0FBUyxDQUFDO2dCQUNaLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDO2FBQzNCLENBQUM7U0FDSCxDQUFDLENBQUE7UUFDRixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUE7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVoQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUM3RCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameBlob } from '../../src/frames.js';
|
|
4
|
+
describe('FrameBlob', () => {
|
|
5
|
+
const source = '0b10100101';
|
|
6
|
+
const frame_blob = new FrameBlob(source);
|
|
7
|
+
it('is exported', () => {
|
|
8
|
+
expect(FrameBlob).to.be.ok;
|
|
9
|
+
});
|
|
10
|
+
it('finds base from string', () => {
|
|
11
|
+
const x = FrameBlob.find_base('0x00abc');
|
|
12
|
+
expect(x).to.equal(16);
|
|
13
|
+
const b = FrameBlob.find_base('0b01');
|
|
14
|
+
expect(b).to.equal(2);
|
|
15
|
+
});
|
|
16
|
+
it('is created from a string', () => {
|
|
17
|
+
expect(frame_blob).to.be.instanceOf(FrameBlob);
|
|
18
|
+
});
|
|
19
|
+
it('stringifies back to that string', () => {
|
|
20
|
+
expect(frame_blob.toString()).to.equal(source);
|
|
21
|
+
});
|
|
22
|
+
it('defaults to hexadecimal', () => {
|
|
23
|
+
const empty_blob = new FrameBlob('');
|
|
24
|
+
expect(empty_blob.toString()).to.equal('0x0');
|
|
25
|
+
expect(empty_blob.canInclude('F')).to.be.true;
|
|
26
|
+
});
|
|
27
|
+
it('can include anything in base64', () => {
|
|
28
|
+
expect(frame_blob.canInclude('F')).to.be.true;
|
|
29
|
+
});
|
|
30
|
+
it('remembers leading zeros', () => {
|
|
31
|
+
const fourZeros = '0b00001';
|
|
32
|
+
const padded = new FrameBlob(fourZeros);
|
|
33
|
+
expect(padded.toString()).to.equal(fourZeros);
|
|
34
|
+
});
|
|
35
|
+
it('handles all zeros correctly', () => {
|
|
36
|
+
const fourZeros = '0b0000';
|
|
37
|
+
const padded = new FrameBlob(fourZeros);
|
|
38
|
+
expect(padded.toString()).to.equal(fourZeros);
|
|
39
|
+
});
|
|
40
|
+
it('appends blobs on a common base', () => {
|
|
41
|
+
const fifteen = '0xf';
|
|
42
|
+
const left = new FrameBlob(fifteen);
|
|
43
|
+
const result = left.call(frame_blob);
|
|
44
|
+
expect(result.toString()).to.equal('0xfa5');
|
|
45
|
+
});
|
|
46
|
+
it('append tracks length properly', () => {
|
|
47
|
+
const fifteen = '0xf';
|
|
48
|
+
const one_l2 = '0b01';
|
|
49
|
+
const right = new FrameBlob(fifteen);
|
|
50
|
+
const left = new FrameBlob(one_l2);
|
|
51
|
+
right.call(frame_blob);
|
|
52
|
+
left.call(right);
|
|
53
|
+
expect(left.toString()).to.equal('0b01111110100101');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYmxvYi1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtYmxvYi1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRS9DLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQTtJQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUV4QyxFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUNyQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdEIsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxD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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameBytes } from '../../src/frames.js';
|
|
4
|
+
describe('FrameBytes', () => {
|
|
5
|
+
const js_string = 'Hello World!';
|
|
6
|
+
const hello_world = [0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21];
|
|
7
|
+
const bytes = new FrameBytes(hello_world);
|
|
8
|
+
it('is created from a number array', () => {
|
|
9
|
+
expect(bytes).to.be.instanceOf(FrameBytes);
|
|
10
|
+
});
|
|
11
|
+
it('stringifies as a bytestring', () => {
|
|
12
|
+
const n = js_string.length;
|
|
13
|
+
expect(bytes.toString()).to.equal(`\\${n}\\${js_string}`);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtYnl0ZXMtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZnJhbWVzL2ZyYW1lLWJ5dGVzLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFaEQsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFBO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUM1RixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUV6QyxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM1QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7UUFDckMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQTtRQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzNELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameComment } from '../../src/frames.js';
|
|
4
|
+
describe('FrameComment', () => {
|
|
5
|
+
const source = 'Frankly, my dear';
|
|
6
|
+
const frame_comment = new FrameComment(source);
|
|
7
|
+
it('is exported', () => {
|
|
8
|
+
expect(FrameComment).to.be.ok;
|
|
9
|
+
});
|
|
10
|
+
it('is created from a string', () => {
|
|
11
|
+
expect(frame_comment).to.be.instanceOf(FrameComment);
|
|
12
|
+
});
|
|
13
|
+
it('stringifies with `#`', () => {
|
|
14
|
+
expect(frame_comment.toString()).to.equal(`#${source}#`);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtY29tbWVudC1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtY29tbWVudC1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWxELFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFBO0lBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTlDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUMvQixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3RELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUM5QixNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDMUQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { Frame, FrameArg, FrameExpr, FrameName, FrameString, FrameSymbol } from '../../src/frames.js';
|
|
4
|
+
describe('FrameExpr', () => {
|
|
5
|
+
const frame = new Frame();
|
|
6
|
+
const js_string = 'Hello';
|
|
7
|
+
const frame_string = new FrameString(js_string);
|
|
8
|
+
const context = new FrameString('context', { key: frame_string });
|
|
9
|
+
it('stringifies with parentheses', () => {
|
|
10
|
+
const frame_expr = new FrameExpr([frame, frame_string], { context });
|
|
11
|
+
expect(frame_expr.toString()).to.equal(`(() “${js_string}”, .context (“context”, .key “Hello”;);)`);
|
|
12
|
+
});
|
|
13
|
+
it('replaces nil when evaluated', () => {
|
|
14
|
+
const frame_expr = new FrameExpr([frame, frame_string], { context });
|
|
15
|
+
const result = frame_expr.in([frame]);
|
|
16
|
+
expect(result).to.equal(frame_string);
|
|
17
|
+
});
|
|
18
|
+
it('concatenates string expressions when called', () => {
|
|
19
|
+
const js_string_2 = ', MAML!';
|
|
20
|
+
const frame_string_2 = new FrameString(js_string_2);
|
|
21
|
+
const frame_expr = new FrameExpr([frame_string, frame_string_2]);
|
|
22
|
+
const result = frame_expr.in([frame]);
|
|
23
|
+
expect(result.toString()).to.equal(`“${js_string}${js_string_2}”`);
|
|
24
|
+
});
|
|
25
|
+
it('returns context for FrameArg.here', () => {
|
|
26
|
+
const frame_expr = new FrameExpr([FrameArg.here()]);
|
|
27
|
+
const result = frame_expr.in([context]);
|
|
28
|
+
expect(result).to.equal(context);
|
|
29
|
+
});
|
|
30
|
+
it('evaluates in context when called', () => {
|
|
31
|
+
const frame_expr = new FrameExpr([
|
|
32
|
+
FrameArg.here(),
|
|
33
|
+
new FrameName('key')
|
|
34
|
+
]);
|
|
35
|
+
const result = frame_expr.call(context);
|
|
36
|
+
expect(result).to.equal(frame_string);
|
|
37
|
+
});
|
|
38
|
+
describe('with Properties, when called', () => {
|
|
39
|
+
const slow = new FrameString('slow');
|
|
40
|
+
const space = new FrameString(' ');
|
|
41
|
+
const turtle = new FrameString('turtle');
|
|
42
|
+
const s_speed = new FrameSymbol('speed');
|
|
43
|
+
const s_gap = new FrameSymbol('gap');
|
|
44
|
+
const expr_array = [s_speed, s_gap, FrameArg.here()];
|
|
45
|
+
it('evaluates properties in its local context', () => {
|
|
46
|
+
const frame_expr = new FrameExpr([s_speed], { speed: slow, gap: space });
|
|
47
|
+
expect(frame_expr.call(Frame.nil).toString()).to.equal('“slow”');
|
|
48
|
+
});
|
|
49
|
+
it('evaluates a sequence of properties', () => {
|
|
50
|
+
const frame_expr = new FrameExpr(expr_array, { speed: slow, gap: space });
|
|
51
|
+
expect(frame_expr.call(turtle).toString()).to.equal('“slow turtle”');
|
|
52
|
+
});
|
|
53
|
+
it('evaluates recursively', () => {
|
|
54
|
+
const sub_expr = new FrameExpr(expr_array);
|
|
55
|
+
const frame_expr = new FrameExpr([sub_expr], { speed: slow, gap: space });
|
|
56
|
+
expect(frame_expr.call(turtle).toString()).to.equal('“slow turtle”');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtZXhwci1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtZXhwci1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFckcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7SUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtJQUN6QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUE7SUFDekIsTUFBTSxZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFFakUsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDcEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxTQUFTLDBDQUEwQyxDQUFDLENBQUE7SUFDckcsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxF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
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import * as frame from '../../src/frames.js';
|
|
4
|
+
describe('FrameGroup', () => {
|
|
5
|
+
const a_frame = new frame.FrameString('a');
|
|
6
|
+
const b_frame = new frame.FrameString('b');
|
|
7
|
+
const c_frame = new frame.FrameString('c');
|
|
8
|
+
const frame_group = new frame.FrameGroup([a_frame], { c: c_frame });
|
|
9
|
+
const multi_group = new frame.FrameGroup([a_frame, b_frame], { c: c_frame });
|
|
10
|
+
const value = frame_group.in();
|
|
11
|
+
it('is constructed from an array of frames', () => {
|
|
12
|
+
expect(frame_group).to.be.instanceOf(frame.FrameGroup);
|
|
13
|
+
});
|
|
14
|
+
it('with multiple arguments, evaluates to FrameGroup', () => {
|
|
15
|
+
const result = multi_group.in();
|
|
16
|
+
expect(result).to.be.instanceOf(frame.FrameGroup);
|
|
17
|
+
});
|
|
18
|
+
it('with single argument, evaluates that', () => {
|
|
19
|
+
expect(value).to.be.instanceOf(frame.FrameString);
|
|
20
|
+
});
|
|
21
|
+
it('includes meta in result', () => {
|
|
22
|
+
const result = value.get('c');
|
|
23
|
+
expect(result).to.be.ok;
|
|
24
|
+
expect(result).to.equal(c_frame);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtZ3JvdXAtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZnJhbWVzL2ZyYW1lLWdyb3VwLXNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEtBQUssS0FBSyxNQUFNLHFCQUFxQixDQUFBO0FBRTVDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDNUUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBRTlCLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN4RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import * as frame from '../../src/frames.js';
|
|
4
|
+
describe('FrameLazy', () => {
|
|
5
|
+
const slow = new frame.FrameString('slow');
|
|
6
|
+
const space = new frame.FrameString(' ');
|
|
7
|
+
const turtle = new frame.FrameString('turtle');
|
|
8
|
+
const lazy_array = [new frame.FrameSymbol('speed'), new frame.FrameSymbol('gap'), frame.FrameArg.here()];
|
|
9
|
+
const lazy = new frame.FrameLazy(lazy_array, { speed: slow });
|
|
10
|
+
const context = new frame.FrameString('context', { gap: space });
|
|
11
|
+
it('takes an Array<Frame>', () => {
|
|
12
|
+
expect(lazy).to.be.instanceof(frame.FrameLazy);
|
|
13
|
+
});
|
|
14
|
+
it('stringifies to {expr, meta}', () => {
|
|
15
|
+
const result = lazy.toString();
|
|
16
|
+
expect(result).to.include('{speed gap _, ');
|
|
17
|
+
});
|
|
18
|
+
it('evalutes to an Expr with merged context', () => {
|
|
19
|
+
const expr = lazy.in([context]);
|
|
20
|
+
expect(expr).to.be.instanceof(frame.FrameExpr);
|
|
21
|
+
expect(expr.toString()).to.equal('(speed gap _, .speed “slow”; .gap “ ”;)');
|
|
22
|
+
expect(expr.get('speed')).to.equal(slow);
|
|
23
|
+
expect(expr.get('gap')).to.equal(space);
|
|
24
|
+
expect(expr.call(turtle).toString()).to.equal('“slow turtle”');
|
|
25
|
+
});
|
|
26
|
+
describe('Codify', () => {
|
|
27
|
+
const codify = new frame.FrameLazy([]);
|
|
28
|
+
const fast = new frame.FrameString('fast');
|
|
29
|
+
it('is created with an empty Array', () => {
|
|
30
|
+
expect(codify.toString()).to.equal('{}');
|
|
31
|
+
});
|
|
32
|
+
it('returns itself when Frame is nil', () => {
|
|
33
|
+
expect(codify.in([context])).to.equal(codify);
|
|
34
|
+
});
|
|
35
|
+
it('converts Array to Expr when called', () => {
|
|
36
|
+
const array = new frame.FrameArray(lazy_array, { speed: fast, gap: space });
|
|
37
|
+
const codified = codify.call(array);
|
|
38
|
+
expect(codified).to.be.instanceof(frame.FrameExpr);
|
|
39
|
+
expect(codified.toString()).to.include('(speed gap _');
|
|
40
|
+
expect(codified.call(turtle).toString()).to.equal('“fast turtle”');
|
|
41
|
+
});
|
|
42
|
+
it('treats other Frames as Arrays when called', () => {
|
|
43
|
+
const wrap = codify.call(turtle);
|
|
44
|
+
expect(wrap).to.be.instanceof(frame.FrameExpr);
|
|
45
|
+
expect(wrap.call(frame.Frame.nil).toString()).to.equal('“turtle”');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbGF6eS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtbGF6eS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQTtBQUU1QyxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUU5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3hHLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFFaEUsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxV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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { FrameArg, FrameExpr, FrameName, FrameString, FrameSymbol } from '../../src/frames.js';
|
|
4
|
+
describe('FrameName', () => {
|
|
5
|
+
const symbol = 'atom';
|
|
6
|
+
const frame_name = new FrameName(symbol);
|
|
7
|
+
it('is created from a string', () => {
|
|
8
|
+
expect(frame_name).to.be.instanceOf(FrameName);
|
|
9
|
+
});
|
|
10
|
+
it('stringifies with a dot prefix', () => {
|
|
11
|
+
expect(frame_name.toString()).to.equal(`.${symbol}`);
|
|
12
|
+
});
|
|
13
|
+
it('evaluates to a setter', () => {
|
|
14
|
+
const frame_symbol = FrameSymbol.for(symbol);
|
|
15
|
+
const result = frame_name.in();
|
|
16
|
+
expect(result.toString()).to.equal(frame_symbol.toString());
|
|
17
|
+
});
|
|
18
|
+
it('extracts properties in an expression', () => {
|
|
19
|
+
const value = FrameSymbol.for('smasher');
|
|
20
|
+
const context = new FrameString('context', { atom: value });
|
|
21
|
+
const frame_expr = new FrameExpr([FrameArg.here(), frame_name]);
|
|
22
|
+
const result = frame_expr.in([context]);
|
|
23
|
+
expect(result).to.equal(value);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbmFtZS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtbmFtZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUU5RixRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFeEMsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDaEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM1QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUE7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDN0QsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1FBQzlDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUV2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { describe, it } from 'mocha';
|
|
3
|
+
import { Frame, FrameArray, FrameNote, FrameString, FrameSymbol } from '../../src/frames.js';
|
|
4
|
+
describe('FrameNote', () => {
|
|
5
|
+
const key = 'key';
|
|
6
|
+
const frame_note = FrameNote.key(key, Frame.nil);
|
|
7
|
+
it('is created from a string', () => {
|
|
8
|
+
expect(frame_note).to.be.instanceOf(FrameNote);
|
|
9
|
+
});
|
|
10
|
+
it('stringifies with a dollar prefix', () => {
|
|
11
|
+
expect(frame_note.toString()).to.equal('$!.name-missing “key”;');
|
|
12
|
+
});
|
|
13
|
+
it('evaluates to itself', () => {
|
|
14
|
+
const result = frame_note.in();
|
|
15
|
+
expect(result.toString()).to.equal(frame_note.toString());
|
|
16
|
+
});
|
|
17
|
+
it('captures extras when called', () => {
|
|
18
|
+
const extra1 = new FrameString('x');
|
|
19
|
+
const extra2 = new FrameString('tra');
|
|
20
|
+
frame_note.call(extra1);
|
|
21
|
+
let extra = frame_note.get(FrameNote.NOTE_EXTRAS);
|
|
22
|
+
expect(extra.toString()).to.include('x');
|
|
23
|
+
frame_note.call(extra2);
|
|
24
|
+
extra = frame_note.get(FrameNote.NOTE_EXTRAS);
|
|
25
|
+
expect(extra.toString()).to.include('x');
|
|
26
|
+
expect(extra.toString()).to.include('tra');
|
|
27
|
+
});
|
|
28
|
+
it('is returned by unbound symbols', () => {
|
|
29
|
+
const context = new FrameString('context');
|
|
30
|
+
const symbol = FrameSymbol.for(key);
|
|
31
|
+
const result = symbol.in([context]);
|
|
32
|
+
expect(result).to.be.instanceOf(FrameNote);
|
|
33
|
+
const resultString = result.toString();
|
|
34
|
+
expect(resultString).to.include(key);
|
|
35
|
+
expect(resultString).to.include(context.id);
|
|
36
|
+
});
|
|
37
|
+
it('sends to kOUT on kEND', () => {
|
|
38
|
+
const out = new FrameArray([]);
|
|
39
|
+
out.set(Frame.kOUT, out);
|
|
40
|
+
const note = FrameNote.key(key, out);
|
|
41
|
+
expect(note.get(Frame.kOUT)).to.equal(out);
|
|
42
|
+
note.call(FrameSymbol.end());
|
|
43
|
+
expect(out.length()).to.equal(1);
|
|
44
|
+
const result = out.at(0);
|
|
45
|
+
expect(result).to.equal(note);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbm90ZS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9mcmFtZXMvZnJhbWUtbm90ZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUU1RixRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUE7SUFDakIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWhELEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2hELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQ2xFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUM3QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUE7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFD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
|