| 'use strict'; |
| const common = require('../common.js'); |
| |
| const types = [ |
| 'Uint8', |
| 'Uint16LE', |
| 'Uint16BE', |
| 'Uint32LE', |
| 'Uint32BE', |
| 'Int8', |
| 'Int16LE', |
| 'Int16BE', |
| 'Int32LE', |
| 'Int32BE', |
| 'Float32LE', |
| 'Float32BE', |
| 'Float64LE', |
| 'Float64BE', |
| ]; |
| |
| const bench = common.createBenchmark(main, { |
| type: types, |
| n: [1e6] |
| }); |
| |
| const INT8 = 0x7f; |
| const INT16 = 0x7fff; |
| const INT32 = 0x7fffffff; |
| const UINT8 = INT8 * 2; |
| const UINT16 = INT16 * 2; |
| const UINT32 = INT32 * 2; |
| |
| const mod = { |
| setInt8: INT8, |
| setInt16: INT16, |
| setInt32: INT32, |
| setUint8: UINT8, |
| setUint16: UINT16, |
| setUint32: UINT32 |
| }; |
| |
| function main({ n, type }) { |
| type = type || 'Uint8'; |
| const ab = new ArrayBuffer(8); |
| const dv = new DataView(ab, 0, 8); |
| const le = /LE$/.test(type); |
| const fn = `set${type.replace(/[LB]E$/, '')}`; |
| |
| if (/int/i.test(fn)) |
| benchInt(dv, fn, n, le); |
| else |
| benchFloat(dv, fn, n, le); |
| } |
| |
| function benchInt(dv, fn, len, le) { |
| const m = mod[fn]; |
| const method = dv[fn]; |
| bench.start(); |
| for (let i = 0; i < len; i++) { |
| method.call(dv, 0, i % m, le); |
| } |
| bench.end(len); |
| } |
| |
| function benchFloat(dv, fn, len, le) { |
| const method = dv[fn]; |
| bench.start(); |
| for (let i = 0; i < len; i++) { |
| method.call(dv, 0, i * 0.1, le); |
| } |
| bench.end(len); |
| } |