mirror of
https://github.com/tc39/test262.git
synced 2025-05-04 15:00:42 +02:00
76 lines
1.4 KiB
JavaScript
76 lines
1.4 KiB
JavaScript
"use strict";
|
|
|
|
function assert(b, m = "") {
|
|
if (!b)
|
|
throw new Error("Bad: " + m);
|
|
}
|
|
|
|
let getOps = {
|
|
getUint8: 1,
|
|
getUint16: 2,
|
|
getUint32: 4,
|
|
getInt8: 1,
|
|
getInt16: 2,
|
|
getInt32: 4,
|
|
getFloat32: 4,
|
|
getFloat64: 8,
|
|
};
|
|
|
|
let setOps = {
|
|
setUint8: 1,
|
|
setUint16: 2,
|
|
setUint32: 4,
|
|
setInt8: 1,
|
|
setInt16: 2,
|
|
setInt32: 4,
|
|
setFloat32: 4,
|
|
setFloat64: 8,
|
|
};
|
|
|
|
let getFuncs = [];
|
|
for (let p of Object.keys(getOps)) {
|
|
let endOfCall = getOps[p] === 1 ? ");" : ", true);";
|
|
let str = `
|
|
(function ${p}(dv, index) {
|
|
return dv.${p}(index${endOfCall}
|
|
})
|
|
`;
|
|
|
|
let func = eval(str);
|
|
noInline(func);
|
|
getFuncs.push(func);
|
|
}
|
|
|
|
let setFuncs = [];
|
|
for (let p of Object.keys(setOps)) {
|
|
let endOfCall = setOps[p] === 1 ? ");" : ", true);";
|
|
let str = `
|
|
(function ${p}(dv, index, value) {
|
|
dv.${p}(index, value${endOfCall}
|
|
})
|
|
`;
|
|
|
|
let func = eval(str);
|
|
noInline(func);
|
|
setFuncs.push(func);
|
|
}
|
|
|
|
function test() {
|
|
const size = 16*1024;
|
|
let ab = new ArrayBuffer(size);
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 100000; ++i) {
|
|
let index = (Math.random() * size) >>> 0;
|
|
index = Math.max(index - 8, 0);
|
|
for (let f of getFuncs) {
|
|
f(dv, index);
|
|
}
|
|
|
|
for (let f of setFuncs) {
|
|
f(dv, index, 10);
|
|
}
|
|
}
|
|
|
|
}
|
|
test();
|