js/src/jit-test/tests/ion/ArrayLengthGetPropertyIC.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:abc588f5af4d
1 function intLength (a, l) {
2 var res = 0;
3 for (var i = 0; i < l; i++)
4 res += a.length;
5 return res / l;
6 }
7
8 function valueLength (a, l) {
9 var res = 0;
10 for (var i = 0; i < l; i++)
11 res += a.length;
12 return res / l;
13 }
14
15 var denseArray = [0,1,2,3,4,5,6,7,8,9];
16 var typedArray = new Uint8Array(10);
17 var hugeArray = new Array(4294967295);
18 var fakeArray1 = { length: 10 };
19 var fakeArray2 = { length: 10.5 };
20
21 // Check the interpreter result and play with TI type objects.
22 assertEq(intLength(denseArray, 10), 10);
23 assertEq(intLength(typedArray, 10), 10);
24 // assertEq(intLength(fakeArray1, 10), 10);
25
26 assertEq(valueLength(denseArray, 10), 10);
27 assertEq(valueLength(typedArray, 10), 10);
28 assertEq(valueLength(hugeArray , 10), 4294967295);
29 assertEq(valueLength(fakeArray2, 10), 10.5);
30
31 // Heat up to compile (either JM / Ion)
32 assertEq(intLength(denseArray, 100), 10);
33 assertEq(valueLength(denseArray, 100), 10);
34
35 // No bailout should occur during any of the following checks:
36
37 // Check get-property length IC with dense array.
38 assertEq(intLength(denseArray, 1), 10);
39 assertEq(valueLength(denseArray, 1), 10);
40
41 // Check get-property length IC with typed array.
42 assertEq(intLength(typedArray, 1), 10);
43 assertEq(valueLength(typedArray, 1), 10);
44
45 // Check length which do not fit on non-double value.
46 assertEq(valueLength(hugeArray, 1), 4294967295);
47
48 // Check object length property.
49 assertEq(intLength(fakeArray1, 1), 10);
50 assertEq(valueLength(fakeArray2, 1), 10.5);
51
52 // Cause invalidation of intLength by returning a double.
53 assertEq(intLength(hugeArray, 1), 4294967295);
54 assertEq(intLength(fakeArray2, 1), 10.5);

mercurial