| 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 |