OLD | NEW |
| (Empty) |
1 // Copyright (c) 2015, 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=--error_on_bad_type --error_on_bad_override | |
5 | |
6 import 'package:observatory/heap_snapshot.dart'; | |
7 import 'package:observatory/service_io.dart'; | |
8 import 'package:unittest/unittest.dart'; | |
9 import 'test_helper.dart'; | |
10 | |
11 // small example from [Lenguaer & Tarjan 1979] | |
12 class R { var x; var y; var z; } | |
13 class A { var x; } | |
14 class B { var x; var y; var z; } | |
15 class C { var x; var y; } | |
16 class D { var x; } | |
17 class E { var x; } | |
18 class F { var x; } | |
19 class G { var x; var y; } | |
20 class H { var x; var y; } | |
21 class I { var x; } | |
22 class J { var x; } | |
23 class K { var x; var y; } | |
24 class L { var x; } | |
25 | |
26 var r; | |
27 | |
28 buildGraph() { | |
29 r = new R(); | |
30 var a = new A(); | |
31 var b = new B(); | |
32 var c = new C(); | |
33 var d = new D(); | |
34 var e = new E(); | |
35 var f = new F(); | |
36 var g = new G(); | |
37 var h = new H(); | |
38 var i = new I(); | |
39 var j = new J(); | |
40 var k = new K(); | |
41 var l = new L(); | |
42 | |
43 r.x = a; r.y = b; r.z = c; | |
44 a.x = d; | |
45 b.x = a; b.y = d; b.z = e; | |
46 c.x = f; c.y = g; | |
47 d.x = l; | |
48 e.x = h; | |
49 f.x = i; | |
50 g.x = i; g.y = j; | |
51 h.x = e; h.y = k; | |
52 i.x = k; | |
53 j.x = i; | |
54 k.x = i; k.y = r; | |
55 l.x = h; | |
56 } | |
57 | |
58 var tests = [ | |
59 (Isolate isolate) async { | |
60 final rootLib = await isolate.rootLibrary.load(); | |
61 final raw = await isolate.fetchHeapSnapshot(false).last; | |
62 final snapshot = new HeapSnapshot(); | |
63 await snapshot.loadProgress(isolate, raw).last; | |
64 | |
65 node(String className) { | |
66 var cls = rootLib.classes.singleWhere((cls) => cls.name == className); | |
67 return snapshot.graph.vertices.singleWhere((v) => v.vmCid == cls.vmCid); | |
68 } | |
69 | |
70 expect(node('I').dominator, equals(node('R'))); | |
71 expect(node('K').dominator, equals(node('R'))); | |
72 expect(node('C').dominator, equals(node('R'))); | |
73 expect(node('H').dominator, equals(node('R'))); | |
74 expect(node('E').dominator, equals(node('R'))); | |
75 expect(node('A').dominator, equals(node('R'))); | |
76 expect(node('D').dominator, equals(node('R'))); | |
77 expect(node('B').dominator, equals(node('R'))); | |
78 | |
79 expect(node('F').dominator, equals(node('C'))); | |
80 expect(node('G').dominator, equals(node('C'))); | |
81 expect(node('J').dominator, equals(node('G'))); | |
82 expect(node('L').dominator, equals(node('D'))); | |
83 | |
84 expect(node('R'), isNotNull); // The field. | |
85 }, | |
86 ]; | |
87 | |
88 main(args) => runIsolateTests(args, tests, testeeBefore: buildGraph); | |
OLD | NEW |