switch to ESM
[benchmarks-js.git] / is-empty-object.mjs
diff --git a/is-empty-object.mjs b/is-empty-object.mjs
new file mode 100644 (file)
index 0000000..17072a9
--- /dev/null
@@ -0,0 +1,41 @@
+import Benchmark from 'benny'
+import { generateRandomObject } from './benchmark-utils.js'
+
+const object = generateRandomObject()
+
+Benchmark.suite(
+  `Is empty object with ${Object.keys(object).length} keys`,
+  Benchmark.add('Reflect keys', (obj = object) => {
+    return obj?.constructor === Object && Reflect.ownKeys(obj).length === 0
+  }),
+  Benchmark.add('Keys iteration', (obj = object) => {
+    if (obj?.constructor !== Object) return false
+    // Iterates over the keys of an object, if
+    // any exist, return false.
+    // eslint-disable-next-line no-unreachable-loop
+    for (const _ in obj) return false
+    return true
+  }),
+  Benchmark.add('Object keys', (obj = object) => {
+    return obj?.constructor === Object && Object.keys(obj).length === 0
+  }),
+  Benchmark.cycle(),
+  Benchmark.complete(),
+  Benchmark.save({
+    file: 'is-empty-object',
+    format: 'json',
+    details: true
+  }),
+  Benchmark.save({
+    file: 'is-empty-object',
+    format: 'chart.html',
+    details: true
+  }),
+  Benchmark.save({
+    file: 'is-empty-object',
+    format: 'table.html',
+    details: true
+  })
+).catch(err => {
+  console.error(err)
+})