UNPKG

1.84 kBJavaScriptView Raw
1var assert = require('assert');
2var ssa = require('../');
3
4describe('SSA IR', function() {
5 it('should support example in README', function() {
6 var cfg = ssa.parse(function() {/*
7 block B1 -> B2, B3
8 arg1 = instr1 %"literal1", %42
9 id2 = instr2 arg1
10 block B2
11 ret id2
12 block B3
13 ret arg1
14 */});
15
16 assert.equal(cfg.length, 3);
17 assert.equal(cfg[0].id, 'B1');
18 assert.equal(cfg[1].id, 'B2');
19 assert.equal(cfg[2].id, 'B3');
20 assert.equal(cfg[0].instructions.length, 2);
21 assert.equal(cfg[1].instructions.length, 1);
22 assert.equal(cfg[2].instructions.length, 1);
23
24 var str = ssa.stringify(cfg);
25 assert.ok(/block B1 -> B2, B3/.test(str));
26 });
27
28 it('should support %undefined', function() {
29 var cfg = ssa.parse(function() {/*
30 block B1
31 literal %undefined
32 */});
33
34 assert.equal(cfg.length, 1);
35 assert.equal(cfg[0].id, 'B1');
36 assert.equal(cfg[0].instructions[0].inputs[0].type, 'js');
37 assert.equal(cfg[0].instructions[0].inputs[0].value, undefined);
38
39 var str = ssa.stringify(cfg);
40 assert.ok(/%undefined/.test(str));
41 });
42
43 it('should support \/ - and . in id', function() {
44 var cfg = ssa.parse(function() {/*
45 block B1
46 a/.-b = literal %undefined
47 */});
48
49 assert.equal(cfg.length, 1);
50 assert.equal(cfg[0].id, 'B1');
51 assert.equal(cfg[0].instructions[0].id, 'a/.-b');
52
53 var str = ssa.stringify(cfg);
54 assert.ok(/a\/.-b/.test(str));
55 });
56
57 it('should support astId', function() {
58 var cfg = ssa.parse(function() {/*
59 block B1
60 a/.-b = literal %undefined # abc
61 */});
62
63 assert.equal(cfg.length, 1);
64 assert.equal(cfg[0].id, 'B1');
65 assert.equal(cfg[0].instructions[0].astId, 'abc');
66
67 var str = ssa.stringify(cfg);
68 assert.ok(/# abc/.test(str));
69 });
70});