Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / jit-test / tests / basic / testChangingObjectWithLength.js
1 function testChangingObjectWithLength()
2 {
3   var obj = { length: 10 };
4   var dense = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
5   var slow = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; slow.slow = 5;
6
7   /*
8    * The elements of objs constitute a De Bruijn sequence repeated 4x to trace
9    * and run native code for every object and transition.
10    */
11   var objs = [obj, obj, obj, obj,
12               obj, obj, obj, obj,
13               dense, dense, dense, dense,
14               obj, obj, obj, obj,
15               slow, slow, slow, slow,
16               dense, dense, dense, dense,
17               dense, dense, dense, dense,
18               slow, slow, slow, slow,
19               slow, slow, slow, slow,
20               obj, obj, obj, obj];
21
22   var counter = 0;
23
24   for (var i = 0, sz = objs.length; i < sz; i++)
25   {
26     var o = objs[i];
27     for (var j = 0; j < o.length; j++)
28       counter++;
29   }
30
31   return counter;
32 }
33 assertEq(testChangingObjectWithLength(), 400);
34 checkStats({
35   recorderAborted: 0,
36   sideExitIntoInterpreter: 15 // empirically determined
37 });