feat: add min benchmark
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 2 Sep 2023 21:40:18 +0000 (23:40 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 2 Sep 2023 21:40:18 +0000 (23:40 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
min.mjs [new file with mode: 0644]
package.json

diff --git a/min.mjs b/min.mjs
new file mode 100644 (file)
index 0000000..3ea46c4
--- /dev/null
+++ b/min.mjs
@@ -0,0 +1,71 @@
+import Benchmark from 'benny'
+import { generateRandomNumberArray } from './benchmark-utils.mjs'
+
+const size = 10000
+const testArray = generateRandomNumberArray(size)
+
+/**
+ *
+ * @param values
+ * @returns
+ */
+function loopMin (values) {
+  let min = Infinity
+  for (const value of values) {
+    if (value < min) min = value
+  }
+  return min
+}
+
+/**
+ *
+ * @param values
+ * @returns
+ */
+function reduceTernaryMin (values) {
+  return values.reduce((a, b) => (a < b ? a : b), Infinity)
+}
+
+/**
+ *
+ * @param values
+ * @returns
+ */
+function reduceMathMin (values) {
+  return values.reduce((a, b) => Math.min(a, b), Infinity)
+}
+
+/**
+ *
+ * @param values
+ * @returns
+ */
+function sortMin (values) {
+  return values.sort((a, b) => a - b)[0]
+}
+
+Benchmark.suite(
+  `Min from ${size} numbers`,
+  Benchmark.add('Math.min', () => {
+    Math.min(...testArray)
+  }),
+  Benchmark.add('loopMin', () => {
+    loopMin(testArray)
+  }),
+  Benchmark.add('reduceTernaryMin', () => {
+    reduceTernaryMin(testArray)
+  }),
+  Benchmark.add('reduceMath.min', () => {
+    reduceMathMin(testArray)
+  }),
+  Benchmark.add('sortMin', () => {
+    sortMin(testArray)
+  }),
+  Benchmark.cycle(),
+  Benchmark.complete(),
+  Benchmark.save({ file: 'min', format: 'json', details: true }),
+  Benchmark.save({ file: 'min', format: 'chart.html', details: true }),
+  Benchmark.save({ file: 'min', format: 'table.html', details: true })
+).catch((err) => {
+  console.error(err)
+})
index 4c1eb7a5e7216ad1276df631257dbf9c5d9c9d7d..0795c08c8a22f04fad74e6b8c64814461552dcfa 100644 (file)
@@ -42,6 +42,7 @@
     "benchmark:is-undefined": "node is-undefined.mjs",
     "benchmark:quick-select": "node quick-select.mjs",
     "benchmark:max": "node max.mjs",
+    "benchmark:min": "node min.mjs",
     "benchmark:promise-handling": "node promise-handling.mjs",
     "benchmark:fibonacci": "node fibonacci.mjs",
     "benchmark:random": "node random.mjs",