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 // VMOptions=--compile-all --error_on_bad_type --error_on_bad_override --checked | |
5 | |
6 import 'package:observatory/dominator_tree.dart'; | |
7 import 'package:unittest/unittest.dart'; | |
8 | |
9 void main() { | |
10 test('small example from [Lenguaer & Tarjan 1979]', smallTest); | |
11 test('non-flowgraph', nonFlowgraph); | |
12 } | |
13 | |
14 void smallTest() { | |
15 var g = { | |
16 'R': ['A', 'B', 'C'], | |
17 'A': ['D'], | |
18 'B': ['A', 'D', 'E'], | |
19 'C': ['F', 'G'], | |
20 'D': ['L'], | |
21 'E': ['H'], | |
22 'F': ['I'], | |
23 'G': ['I', 'J'], | |
24 'H': ['E', 'K'], | |
25 'I': ['K'], | |
26 'J': ['I'], | |
27 'K': ['I', 'R'], | |
28 'L': ['H'], | |
29 }; | |
30 var d = new Dominator(); | |
31 for (String u in g.keys) { | |
32 d.addEdges(u, g[u]); | |
33 } | |
34 d.computeDominatorTree('R'); | |
35 expect(d.dominator('I'), equals('R')); | |
36 expect(d.dominator('K'), equals('R')); | |
37 expect(d.dominator('C'), equals('R')); | |
38 expect(d.dominator('H'), equals('R')); | |
39 expect(d.dominator('E'), equals('R')); | |
40 expect(d.dominator('A'), equals('R')); | |
41 expect(d.dominator('D'), equals('R')); | |
42 expect(d.dominator('B'), equals('R')); | |
43 | |
44 expect(d.dominator('F'), equals('C')); | |
45 expect(d.dominator('G'), equals('C')); | |
46 expect(d.dominator('J'), equals('G')); | |
47 expect(d.dominator('L'), equals('D')); | |
48 expect(d.dominator('R'), isNull); | |
49 } | |
50 | |
51 void nonFlowgraph() { | |
52 var d = new Dominator(); | |
53 d.addEdges('A', ['B']); | |
54 expect(() => d.computeDominatorTree('B'), throwsStateError); | |
55 } | |
OLD | NEW |