/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
benchmark/error/system-error-instantiation.js
64 строки
1 KB
uzlopak
errors: fix stacktrace of SystemError
23 дек 2023, 20:04
23 дек 2023, 20:04
c74c514
Код
Авторство
О чём код?
'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'); } }