Commit bab4b3b2 authored by ager@chromium.org's avatar ager@chromium.org

Simplify the map collection regression test. This test is the minimal

example that would trigger the bug.
Review URL: http://codereview.chromium.org/43004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1467 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 96c6a020
// Copyright 2008 the V8 project authors. All rights reserved. // Copyright 2009 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are // modification, are permitted provided that the following conditions are
// met: // met:
...@@ -25,62 +25,28 @@ ...@@ -25,62 +25,28 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Test for collection of abandoned maps // Test collection of abandoned maps. Tests that deleted map
// transitions do not show up as properties in for in.
// This test makes a wide, shallow tree of map transitions and maps // Flags: --expose-gc --collect-maps
// by adding the properties "a" through "j" in a pseudorandom order
// to a new A() object. This should create map transitions forming
// a partial denary tree. These objects only stick around for about
// 1000 iterations, with each iteration creating a new object. Therefore,
// some of the maps going to leaves will become abandoned.
// There are still map transitions going to them though, so
// only the new map-collection code will remove them.
// Every 101 object creations, the object is created again, and tested function C() {}
// after each property addition to make sure that no map transitions
// are visible as properties. This is a regression test for a bug.
// Flags: --expose-gc --collect-maps
function dotest() { // Create an instance of C. Add a property to the instance and then
function A() { // remove all references to instances of C.
} var o = new C();
o.x = 42;
o = null;
function B() { // Force a global GC. This will collect the maps starting from C and
this.x = 3; // delete map transitions.
} gc();
var a_B = new B(); // Create a new instance of C.
var r = 1; o = new C();
var i = 0;
var holder = new Array();
while (i++ < 2001) {
if (i == 1400) {
gc();
}
var s = r % 100000000;
var obj = new A();
holder[i % 1000] = obj;
while (s > 0) {
var property_name = String.fromCharCode(s % 10 + 97);
obj[property_name] = a_B;
s = s / 10;
}
if (i % 101 == 0) {
// Check that all object maps have no undefined properties
s = r % 100000000;
obj = new A();
while (s > 0) {
for (var p in obj) {
assertEquals(a_B, obj[p] );
}
property_name = String.fromCharCode(s % 10 + 97);
obj[property_name] = a_B;
s = s / 10;
}
}
r = r * 7 % 100000000;
}
}
dotest(); // Test that the deleted map transitions do not show up in for in.
for (var p in o) {
assertTrue(false);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment