]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/stress/put-by-val-out-of-bounds-basics.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / put-by-val-out-of-bounds-basics.js
CommitLineData
ed1e77d3
A
1// Put early out-of-bound data.
2function opaquePutByValOnInt32ArrayEarlyOutOfBounds(array, index, value)
3{
4 array[index] = value;
5}
6noInline(opaquePutByValOnInt32ArrayEarlyOutOfBounds);
7
8function testInt32ArrayEarlyOutOfBounds()
9{
10 // Warm up with an immediate out of bounds.
11 var int32Array = new Array(10);
12 for (var i = 0; i < 10; ++i) {
13 opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, i, i);
14 var value = int32Array[i];
15 if (value !== i)
16 throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, i, i) warmup with i = " + i + " value = " + value;
17 }
18 opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, 1042, 1);
19 var value = int32Array[1042];
20 if (value !== 1)
21 throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, 1042, 1) value = " + value;
22
23 var length = int32Array.length;
24 if (int32Array.length !== 1043)
25 throw "Incorrect int32Array.length, length = " + length;
26
27
28 // We then do plenty of in-bounds accesses.
29 for (var i = 0; i < 1e4; ++i) {
30 for (var j = 0; j < 10; ++j) {
31 opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, j, i);
32 var value = int32Array[j];
33 if (value !== i)
34 throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value;
35 }
36 }
37}
38testInt32ArrayEarlyOutOfBounds();
39
40
41// Get out-of-bound data after a thousand run.
42function opaquePutByValOnStringArrayHotOutOfBounds(array, index, value)
43{
44 array[index] = value;
45}
46noInline(opaquePutByValOnStringArrayHotOutOfBounds);
47
48function testStringArrayHotOutOfBounds()
49{
50 // Warm up with in bounds access.
51 var stringArray = new Array(10);
52 for (var i = 0; i < 1e2; ++i) {
53 for (var j = 0; j < 10; ++j) {
54 opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + i);
55 var value = stringArray[j];
56 if (value !== "" + i)
57 throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value;
58 }
59 }
60
61 // Do a single out of bounds after warmup.
62 opaquePutByValOnStringArrayHotOutOfBounds(stringArray, 513, 42);
63 var value = stringArray[513];
64 if (value !== 42)
65 throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, 513, 42), value = " + value;
66
67 // We then do plenty of in-bounds accesses.
68 for (var i = 0; i < 1e3; ++i) {
69 for (var j = 0; j < 10; ++j) {
70 opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + i);
71 var value = stringArray[j];
72 if (value !== "" + i)
73 throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value;
74 }
75 }
76
77 // Followed by plenty of out-of-bounds accesses.
78 for (var j = 514; j <= 1025; ++j)
79 opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + j);
80
81 for (var j = 514; j <= 1025; ++j) {
82 var value = stringArray[j];
83 if (value !== "" + j)
84 throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, j) in-bounds with j = " + j + " value = " + value;
85 }
86}
87testStringArrayHotOutOfBounds();