UNPKG

3.12 kBJavaScriptView Raw
1'use strict';
2
3var assertText = require('assert-text');
4var pipeline = require('json-pipeline');
5
6var scheduler = require('../');
7var fixtures = require('./fixtures');
8
9assertText.options.trim = true;
10
11describe('JSON Pipeline Scheduler', function() {
12 fixtures.test('example from Click\'s thesis', function(p) {
13 var start = p.add('start');
14 var body = p.add('region');
15 var exit = p.add('region');
16
17 var i0 = p.add('literal').addLiteral(0);
18 var a = p.add('read()');
19
20 var phi = p.add('ssa:phi').addInput(i0).setControl(body);
21 var one = p.add('literal').addLiteral(1);
22 var addOne = p.add('add', [ a, one ]);
23 var i2 = p.add('add', [ phi, addOne ]);
24 phi.addInput(i2);
25
26 var ten = p.add('literal').addLiteral(10);
27 var cc = p.add('le', [ i2, ten ]);
28 var branch = p.add('if', cc).setControl(body);
29
30 body.setControl(start, branch);
31
32 var two = p.add('literal').addLiteral(2);
33 var mul = p.add('mul', [ i2, two ]);
34
35 exit.setControl(branch);
36 var ret = p.add('return', mul).setControl(exit);
37 }, function() {/*
38 pipeline {
39 b0 {
40 i0 = literal 0
41 i1 = read()
42 i2 = literal 1
43 i3 = add i1, i2
44 i4 = literal 10
45 i5 = jump ^b0
46 }
47 b0 -> b1
48 b0 => b1
49 b1 {
50 i6 = ssa:phi ^b1, i0, i7
51 i7 = add i6, i3
52 i8 = le i7, i4
53 i9 = if ^b1, i8
54 }
55 b1 -> b1, b2
56 b1 => b2
57 b1 ~> b1
58 b2 {
59 i10 = literal 2
60 i11 = mul i7, i10
61 i12 = return ^b2, i11
62 }
63 }
64 */});
65
66 fixtures.test('merge/branch', function(p) {
67 var start = p.add('start');
68 var t = p.add('literal').addLiteral(true);
69 var branch = p.add('if', t).setControl(start);
70
71 var left = p.add('region').setControl(branch);
72
73 var leftValue = p.add('literal').addLiteral('left');
74
75 var right = p.add('region').setControl(branch);
76
77 var rightValue = p.add('literal').addLiteral('right');
78
79 var merge = p.add('region').setControl(left, right);
80 var phi = p.add('ssa:phi', [ leftValue, rightValue ]).setControl(merge);
81 var ret = p.add('return', phi).setControl(merge);
82 }, function() {/*
83 pipeline {
84 b0 {
85 i0 = literal true
86 i1 = if ^b0, i0
87 }
88 b0 -> b1, b2
89 b0 => b3, b1, b2
90 b1 {
91 i2 = literal "right"
92 i3 = jump ^b1
93 }
94 b1 -> b3
95 b1 ~> b3
96 b2 {
97 i4 = literal "left"
98 i5 = jump ^b2
99 }
100 b2 -> b3
101 b2 ~> b3
102 b3 {
103 i6 = ssa:phi ^b3, i4, i2
104 i7 = return ^b3, i6
105 }
106 }
107 */});
108
109 fixtures.test('single block node order', function(p) {
110 var start = p.add('start');
111 var ret = p.add('return').setControl(start);
112 var one = p.add('literal').addLiteral(1);
113 var add = p.add('add').addInput(one);
114 var two = p.add('literal').addLiteral(2);
115 add.addInput(two);
116 ret.addInput(add);
117 }, function() {/*
118 pipeline {
119 b0 {
120 i0 = literal 1
121 i1 = literal 2
122 i2 = add i0, i1
123 i3 = return ^b0, i2
124 }
125 }
126 */});
127});