Skip to content

errors: improve performance of determineSpecificType

This PR improves the function determineSpecificType in errors.js.

Also fixes a bug, where a string would be sliced without the single tick at the end of the string.

Added unit tests. Added benchmarks based on unit tests.

main:

error/determine-specific-type.js v="() => 1n" n=1000000: 6,843,920.840090735
error/determine-specific-type.js v="() => true" n=1000000: 9,456,016.191725645
error/determine-specific-type.js v="() => false" n=1000000: 8,851,588.609212818
error/determine-specific-type.js v="() => 2" n=1000000: 9,901,905.486054687
error/determine-specific-type.js v="() => +0" n=1000000: 8,973,347.793105612
error/determine-specific-type.js v="() => -0" n=1000000: 10,751,000.496169424
error/determine-specific-type.js v="() => NaN" n=1000000: 10,215,963.841045486
error/determine-specific-type.js v="() => Infinity" n=1000000: 10,320,438.148834981
error/determine-specific-type.js v="() => \"\"" n=1000000: 6,254,431.929555482
error/determine-specific-type.js v="() => Symbol(\"foo\")" n=1000000: 5,327,156.757878972
error/determine-specific-type.js v="() => function foo() {}" n=1000000: 28,370,147.240213074
error/determine-specific-type.js v="() => null" n=1000000: 84,447,833.61750029
error/determine-specific-type.js v="() => undefined" n=1000000: 143,308,256.7768683
error/determine-specific-type.js v="() => new Array()" n=1000000: 17,252,357.461324573
error/determine-specific-type.js v="() => new BigInt64Array()" n=1000000: 21,056,043.101214882
error/determine-specific-type.js v="() => new BigUint64Array()" n=1000000: 22,987,115.95138041
error/determine-specific-type.js v="() => new Int8Array()" n=1000000: 22,238,571.03126347
error/determine-specific-type.js v="() => new Int16Array()" n=1000000: 20,920,369.479666267
error/determine-specific-type.js v="() => new Int32Array()" n=1000000: 22,552,915.624017186
error/determine-specific-type.js v="() => new Float32Array()" n=1000000: 22,731,474.433672026
error/determine-specific-type.js v="() => new Float64Array()" n=1000000: 21,389,880.191003073
error/determine-specific-type.js v="() => new Uint8Array()" n=1000000: 22,209,250.046039775
error/determine-specific-type.js v="() => new Uint8ClampedArray()" n=1000000: 21,585,063.757529628
error/determine-specific-type.js v="() => new Uint16Array()" n=1000000: 22,708,905.351735055
error/determine-specific-type.js v="() => new Uint32Array()" n=1000000: 22,544,499.855568662
error/determine-specific-type.js v="() => new Date()" n=1000000: 27,342,526.528744582
error/determine-specific-type.js v="() => new Map()" n=1000000: 26,338,839.423816815
error/determine-specific-type.js v="() => new WeakMap()" n=1000000: 25,778,798.114064377
error/determine-specific-type.js v="() => new Object()" n=1000000: 20,142,102.12766866
error/determine-specific-type.js v="() => Promise.resolve(\"foo\")" n=1000000: 26,109,976.21198397
error/determine-specific-type.js v="() => new Set()" n=1000000: 25,905,614.964326676
error/determine-specific-type.js v="() => new WeakSet()" n=1000000: 25,752,138.193596177
error/determine-specific-type.js v="() => ({ __proto__: null })" n=1000000: 1,271,014.61081246

PR:

error/determine-specific-type.js v="() => 1n" n=1000000: 20,725,839.6296707
error/determine-specific-type.js v="() => true" n=1000000: 140,278,463.97326404
error/determine-specific-type.js v="() => false" n=1000000: 146,549,885.94755125
error/determine-specific-type.js v="() => 2" n=1000000: 49,945,631.68263187
error/determine-specific-type.js v="() => +0" n=1000000: 127,743,303.4086129
error/determine-specific-type.js v="() => -0" n=1000000: 123,600,395.47182535
error/determine-specific-type.js v="() => NaN" n=1000000: 153,607,424.2769161
error/determine-specific-type.js v="() => Infinity" n=1000000: 137,883,393.39304143
error/determine-specific-type.js v="() => \"\"" n=1000000: 47,073,709.89790654
error/determine-specific-type.js v="() => \"'\"" n=1000000: 8,823,294.789975893
error/determine-specific-type.js v="() => Symbol(\"foo\")" n=1000000: 11,643,085.227570156
error/determine-specific-type.js v="() => function foo() {}" n=1000000: 24,384,259.05368641
error/determine-specific-type.js v="() => null" n=1000000: 223,003,179.3563281
error/determine-specific-type.js v="() => undefined" n=1000000: 203,319,433.73911148
error/determine-specific-type.js v="() => new Array()" n=1000000: 35,201,357.92758342
error/determine-specific-type.js v="() => new BigInt64Array()" n=1000000: 21,667,733.83867111
error/determine-specific-type.js v="() => new BigUint64Array()" n=1000000: 17,649,319.59755033
error/determine-specific-type.js v="() => new Int8Array()" n=1000000: 22,205,003.47563817
error/determine-specific-type.js v="() => new Int16Array()" n=1000000: 21,894,023.991121184
error/determine-specific-type.js v="() => new Int32Array()" n=1000000: 21,752,199.72382537
error/determine-specific-type.js v="() => new Float32Array()" n=1000000: 20,549,685.59494782
error/determine-specific-type.js v="() => new Float64Array()" n=1000000: 21,237,781.66528292
error/determine-specific-type.js v="() => new Uint8Array()" n=1000000: 21,616,408.912246525
error/determine-specific-type.js v="() => new Uint8ClampedArray()" n=1000000: 20,134,607.096901342
error/determine-specific-type.js v="() => new Uint16Array()" n=1000000: 18,759,458.753596798
error/determine-specific-type.js v="() => new Uint32Array()" n=1000000: 21,513,774.5814237
error/determine-specific-type.js v="() => new Date()" n=1000000: 34,218,765.56419165
error/determine-specific-type.js v="() => new Map()" n=1000000: 31,749,019.17755055
error/determine-specific-type.js v="() => new WeakMap()" n=1000000: 23,849,589.985003855
error/determine-specific-type.js v="() => new Object()" n=1000000: 34,675,541.47851863
error/determine-specific-type.js v="() => Promise.resolve(\"foo\")" n=1000000: 34,478,485.66629363
error/determine-specific-type.js v="() => new Set()" n=1000000: 31,878,517.854217436
error/determine-specific-type.js v="() => new WeakSet()" n=1000000: 34,144,917.037412174
error/determine-specific-type.js v="() => ({ __proto__: null })" n=1000000: 1,280,069.176986435

Merge request reports

Loading