OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import 'package:observatory/dominator_tree.dart'; | |
6 import 'package:unittest/unittest.dart'; | |
7 | |
8 void main() { | |
9 test('small example from [Lenguaer & Tarjan 1979]', smallTest); | |
10 test('non-flowgraph', nonFlowgraph); | |
11 } | |
12 | |
13 void smallTest() { | |
14 var g = { | |
15 'R': ['A', 'B', 'C'], | |
16 'A': ['D'], | |
17 'B': ['A', 'D', 'E'], | |
18 'C': ['F', 'G'], | |
19 'D': ['L'], | |
20 'E': ['H'], | |
21 'F': ['I'], | |
22 'G': ['I', 'J'], | |
23 'H': ['E', 'K'], | |
24 'I': ['K'], | |
25 'J': ['I'], | |
26 'K': ['I', 'R'], | |
27 'L': ['H'], | |
28 }; | |
29 var d = new Dominator(); | |
30 for (String u in g.keys) { | |
31 d.addEdges(u, g[u]); | |
32 } | |
33 d.computeDominatorTree('R'); | |
34 expect(d.dominator('I'), equals('R')); | |
35 expect(d.dominator('K'), equals('R')); | |
36 expect(d.dominator('C'), equals('R')); | |
37 expect(d.dominator('H'), equals('R')); | |
38 expect(d.dominator('E'), equals('R')); | |
39 expect(d.dominator('A'), equals('R')); | |
40 expect(d.dominator('D'), equals('R')); | |
41 expect(d.dominator('B'), equals('R')); | |
42 | |
43 expect(d.dominator('F'), equals('C')); | |
44 expect(d.dominator('G'), equals('C')); | |
45 expect(d.dominator('J'), equals('G')); | |
46 expect(d.dominator('L'), equals('D')); | |
47 expect(d.dominator('R'), isNull); | |
48 } | |
49 | |
50 void nonFlowgraph() { | |
51 var d = new Dominator(); | |
52 d.addEdges('A', ['B']); | |
53 expect(() => d.computeDominatorTree('B'), throwsStateError); | |
54 } | |
OLD | NEW |