| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| const bench = common.createBenchmark(main, { |
| n: [1e6], |
| code: [ |
| 'built-in', |
| 'ERR_FS_CP_DIR_TO_NON_DIR', |
| ], |
| stackTraceLimit: [0, 10], |
| }, { |
| flags: ['--expose-internals'], |
| }); |
| |
| function getErrorFactory(code) { |
| const { |
| ERR_FS_CP_DIR_TO_NON_DIR, |
| } = require('internal/errors').codes; |
| |
| switch (code) { |
| case 'built-in': |
| return (n) => new Error(); |
| case 'ERR_FS_CP_DIR_TO_NON_DIR': |
| return (n) => new ERR_FS_CP_DIR_TO_NON_DIR({ |
| message: 'cannot overwrite directory', |
| path: 'dest', |
| syscall: 'cp', |
| errno: 21, |
| code: 'EISDIR', |
| }); |
| default: |
| throw new Error(`${code} not supported`); |
| } |
| } |
| |
| function main({ n, code, stackTraceLimit }) { |
| const getError = getErrorFactory(code); |
| |
| Error.stackTraceLimit = stackTraceLimit; |
| |
| // Warm up. |
| const length = 1024; |
| const array = []; |
| for (let i = 0; i < length; ++i) { |
| array.push(getError(i)); |
| } |
| |
| bench.start(); |
| |
| for (let i = 0; i < n; ++i) { |
| const index = i % length; |
| array[index] = getError(index); |
| } |
| |
| bench.end(n); |
| |
| // Verify the entries to prevent dead code elimination from making |
| // the benchmark invalid. |
| for (let i = 0; i < length; ++i) { |
| assert.strictEqual(typeof array[i], 'object'); |
| } |
| } |