[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / dataview-jit-bounds-checks.js
1 "use strict";
2
3 function assert(b, m = "") {
4     if (!b)
5         throw new Error("Bad: " + m);
6 }
7
8 let getOps = {
9     getUint8: 1,
10     getUint16: 2,
11     getUint32: 4,
12     getInt8: 1,
13     getInt16: 2,
14     getInt32: 4,
15     getFloat32: 4,
16     getFloat64: 8,
17 };
18
19 let setOps = {
20     setUint8: 1,
21     setUint16: 2,
22     setUint32: 4,
23     setInt8: 1,
24     setInt16: 2,
25     setInt32: 4,
26     setFloat32: 4,
27     setFloat64: 8,
28 };
29
30 let getFuncs = [];
31 for (let p of Object.keys(getOps)) {
32     let endOfCall = getOps[p] === 1 ? ");" : ", true);";
33     let str = `
34         (function ${p}(dv, index) {
35             return dv.${p}(index${endOfCall}
36         })
37     `;
38        
39     let func = eval(str);
40     noInline(func);
41     getFuncs.push(func);
42 }
43
44 let setFuncs = [];
45 for (let p of Object.keys(setOps)) {
46     let endOfCall = setOps[p] === 1 ? ");" : ", true);";
47     let str = `
48         (function ${p}(dv, index, value) {
49             return dv.${p}(index, value${endOfCall}
50         })
51     `;
52
53     let func = eval(str);
54     noInline(func);
55     setFuncs.push(func);
56 }
57
58 function assertThrowsRangeError(f) {
59     let e = null;
60     try {
61         f();
62     } catch(err) {
63         e = err;
64     }
65     assert(e instanceof RangeError, e);
66 }
67
68 function test(warmup) {
69     const size = 16*1024;
70     let ab = new ArrayBuffer(size);
71     let dv = new DataView(ab);
72     for (let i = 0; i < warmup; ++i) {
73         for (let f of getFuncs) {
74             f(dv, 0);
75         }
76
77         for (let f of setFuncs) {
78             f(dv, 0, 10);
79         }
80     }
81
82     for (let f of getFuncs) {
83         assertThrowsRangeError(() => {
84             let index = size - getOps[f.name] + 1;
85             f(dv, index);
86         });
87         assertThrowsRangeError(() => {
88             let index = -1;
89             f(dv, index);
90         });
91         assertThrowsRangeError(() => {
92             let index = -2147483648;
93             f(dv, index);
94         });
95     } 
96
97     for (let f of setFuncs) {
98         assertThrowsRangeError(() => {
99             let index = size - setOps[f.name] + 1;
100             f(dv, index, 10);
101         });
102         assertThrowsRangeError(() => {
103             let index = -1;
104             f(dv, index, 10);
105         });
106         assertThrowsRangeError(() => {
107             let index = -2147483648;
108             f(dv, index, 10);
109         });
110     }
111 }
112
113 test(2000);
114 test(10000);