Index: test/graph_test.dart |
diff --git a/test/graph_test.dart b/test/graph_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4934adfeeb88124ad6cee45e25ca59e97f689494 |
--- /dev/null |
+++ b/test/graph_test.dart |
@@ -0,0 +1,73 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+import 'package:dart2js_info/src/graph.dart'; |
+import 'package:test/test.dart'; |
+ |
+main() { |
+ var graph = makeTestGraph(); |
+ |
+ test('preorder traversal', () { |
+ expect(graph.preOrder('A').toList(), equals(['A', 'E', 'D', 'C', 'B'])); |
+ }); |
+ |
+ test('postorder traversal', () { |
+ expect(graph.postOrder('A').toList(), equals(['C', 'E', 'D', 'B', 'A'])); |
+ }); |
+ |
+ test('topological sort', () { |
+ expect( |
+ graph.computeTopologicalSort(), |
+ equals([ |
+ ['C'], |
+ ['E'], |
+ ['D', 'B', 'A'] |
+ ])); |
+ }); |
+ |
+ test('contains path', () { |
+ expect(graph.containsPath('A', 'C'), isTrue); |
+ expect(graph.containsPath('B', 'E'), isTrue); |
+ expect(graph.containsPath('C', 'A'), isFalse); |
+ expect(graph.containsPath('E', 'B'), isFalse); |
+ }); |
+ |
+ test('dominator tree', () { |
+ // A dominates all other nodes in the graph, the resulting tree looks like |
+ // A |
+ // / / | | |
+ // B C D E |
+ var dom = graph.dominatorTree('A'); |
+ expect(dom.targetsOf('A').length, equals(4)); |
+ }); |
+ |
+ test('cycle finding', () { |
+ expect(graph.findCycleContaining('B'), equals(['A', 'D', 'B'])); |
+ expect(graph.findCycleContaining('C'), equals(['C'])); |
+ }); |
+} |
+ |
+/// Creates a simple test graph with the following structure: |
+/// ``` |
+/// A -> E |
+/// / ^ ^ |
+/// / \ / |
+/// v v / |
+/// B -> D |
+/// \ / |
+/// v v |
+/// C |
+/// ``` |
+Graph<String> makeTestGraph() { |
+ var graph = new EdgeListGraph<String>(); |
+ graph.addEdge('A', 'B'); |
+ graph.addEdge('A', 'D'); |
+ graph.addEdge('A', 'E'); |
+ graph.addEdge('B', 'C'); |
+ graph.addEdge('B', 'D'); |
+ graph.addEdge('D', 'A'); |
+ graph.addEdge('D', 'C'); |
+ graph.addEdge('D', 'E'); |
+ return graph; |
+} |