build: bump volta node version
[benchmarks-js.git] / min.mjs
CommitLineData
a6affe16 1import Benchmark from 'benny'
0c01f51c 2
a6affe16
JB
3import { generateRandomNumberArray } from './benchmark-utils.mjs'
4
5const size = 10000
6const testArray = generateRandomNumberArray(size)
7
8/**
9 *
10 * @param values
11 * @returns
12 */
13function loopMin (values) {
528db716 14 let minimum = Infinity
a6affe16 15 for (const value of values) {
528db716 16 if (value < minimum) minimum = value
a6affe16 17 }
528db716 18 return minimum
a6affe16
JB
19}
20
21/**
22 *
23 * @param values
24 * @returns
25 */
26function reduceTernaryMin (values) {
528db716
JB
27 return values.reduce(
28 (minimum, num) => (minimum < num ? minimum : num),
29 Infinity
30 )
a6affe16
JB
31}
32
33/**
34 *
35 * @param values
36 * @returns
37 */
38function reduceMathMin (values) {
528db716 39 return values.reduce((minimum, num) => Math.min(minimum, num), Infinity)
a6affe16
JB
40}
41
42/**
43 *
44 * @param values
45 * @returns
46 */
47function sortMin (values) {
48 return values.sort((a, b) => a - b)[0]
49}
50
51Benchmark.suite(
52 `Min from ${size} numbers`,
53 Benchmark.add('Math.min', () => {
54 Math.min(...testArray)
55 }),
56 Benchmark.add('loopMin', () => {
57 loopMin(testArray)
58 }),
59 Benchmark.add('reduceTernaryMin', () => {
60 reduceTernaryMin(testArray)
61 }),
62 Benchmark.add('reduceMath.min', () => {
63 reduceMathMin(testArray)
64 }),
65 Benchmark.add('sortMin', () => {
66 sortMin(testArray)
67 }),
68 Benchmark.cycle(),
69 Benchmark.complete(),
70 Benchmark.save({ file: 'min', format: 'json', details: true }),
71 Benchmark.save({ file: 'min', format: 'chart.html', details: true }),
72 Benchmark.save({ file: 'min', format: 'table.html', details: true })
4aa2893a 73).catch(console.error)