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