Index: runtime/vm/object_graph_test.cc |
=================================================================== |
--- runtime/vm/object_graph_test.cc (revision 37949) |
+++ runtime/vm/object_graph_test.cc (working copy) |
@@ -45,14 +45,14 @@ |
// + + |
// | v |
// +-->d |
- Array& a = Array::Handle(Array::New(2, Heap::kNew)); |
+ Array& a = Array::Handle(Array::New(12, Heap::kNew)); |
Array& b = Array::Handle(Array::New(2, Heap::kOld)); |
Array& c = Array::Handle(Array::New(0, Heap::kOld)); |
Array& d = Array::Handle(Array::New(0, Heap::kOld)); |
- a.SetAt(0, b); |
+ a.SetAt(10, b); |
b.SetAt(0, c); |
b.SetAt(1, d); |
- a.SetAt(1, d); |
+ a.SetAt(11, d); |
intptr_t a_size = a.raw()->Size(); |
intptr_t b_size = b.raw()->Size(); |
intptr_t c_size = c.raw()->Size(); |
@@ -93,7 +93,7 @@ |
} |
{ |
// Get hold of c again. |
- b ^= a.At(0); |
+ b ^= a.At(10); |
c ^= b.At(0); |
b = Array::null(); |
ObjectGraph graph(isolate); |
@@ -111,17 +111,26 @@ |
} |
{ |
HANDLESCOPE(isolate); |
- Array& path = Array::Handle(Array::New(3, Heap::kNew)); |
+ Array& path = Array::Handle(Array::New(6, Heap::kNew)); |
intptr_t length = graph.RetainingPath(&c, path); |
EXPECT_LE(3, length); |
Array& expected_c = Array::Handle(); |
expected_c ^= path.At(0); |
+ // c is the first element in b. |
+ Smi& offset_from_parent = Smi::Handle(); |
+ offset_from_parent ^= path.At(1); |
+ EXPECT_EQ(Array::element_offset(0), |
+ offset_from_parent.Value() * kWordSize); |
Array& expected_b = Array::Handle(); |
- expected_b ^= path.At(1); |
+ expected_b ^= path.At(2); |
+ // b is the element with index 10 in a. |
+ offset_from_parent ^= path.At(3); |
+ EXPECT_EQ(Array::element_offset(10), |
+ offset_from_parent.Value() * kWordSize); |
Array& expected_a = Array::Handle(); |
- expected_a ^= path.At(2); |
+ expected_a ^= path.At(4); |
EXPECT(expected_c.raw() == c.raw()); |
- EXPECT(expected_b.raw() == a.At(0)); |
+ EXPECT(expected_b.raw() == a.At(10)); |
EXPECT(expected_a.raw() == a.raw()); |
} |
} |