Cleanup object generation code
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 26 Dec 2022 12:09:37 +0000 (13:09 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 26 Dec 2022 12:09:37 +0000 (13:09 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
benchmark-utils.js
deep-clone-object.js
is-empty-object.js
shallow-clone-object.js

index 5694a9710aa81dadc94acab652900aa68f3a01ea..9c82d8438c1df329ceed3a4317ba2db9a3f0370f 100644 (file)
@@ -61,6 +61,26 @@ function generateRandomNumberArray (
   return array
 }
 
+/**
+ *
+ * @param sizeMax
+ * @param numberMax
+ * @param numberGenerator
+ * @returns
+ */
+function generateRandomObject (
+  sizeMax = 500,
+  numberMax = Number.MAX_VALUE,
+  numberGenerator = generateRandomFloat
+) {
+  const size = generateRandomInteger(sizeMax)
+  const object = {}
+  for (let i = 0; i < size; i++) {
+    object[i.toString()] = numberGenerator(numberMax)
+  }
+  return { object, size }
+}
+
 /**
  * @param ms
  * @returns
@@ -73,6 +93,7 @@ module.exports = {
   generateRandomInteger,
   generateRandomFloat,
   generateRandomNumberArray,
+  generateRandomObject,
   sleep,
   secureRandom
 }
index de345fcafd594693740809f1335ea530518c72bf..e1d8b1c61fac3860a09cc13d145fd58a250b7c24 100644 (file)
@@ -1,27 +1,23 @@
 /* eslint-disable no-unused-vars */
 const Benchmark = require('benny')
-const { generateRandomInteger } = require('./benchmark-utils')
+const { generateRandomObject } = require('./benchmark-utils')
 const _ = require('lodash')
 const clone = require('just-clone')
 
-const size = generateRandomInteger(500)
-const testObject = {}
-for (let i = 0; i < size; i++) {
-  testObject[i.toString()] = i
-}
+const { object, size } = generateRandomObject()
 
 Benchmark.suite(
   `Deep clone object with ${size} keys`,
-  Benchmark.add('JSON stringify/parse', (obj = testObject) => {
+  Benchmark.add('JSON stringify/parse', (obj = object) => {
     const objClone = JSON.parse(JSON.stringify(obj))
   }),
-  Benchmark.add('structuredClone', (obj = testObject) => {
+  Benchmark.add('structuredClone', (obj = object) => {
     const objClone = structuredClone(obj)
   }),
-  Benchmark.add('lodash cloneDeep', (obj = testObject) => {
+  Benchmark.add('lodash cloneDeep', (obj = object) => {
     const objClone = _.cloneDeep(obj)
   }),
-  Benchmark.add('just-clone', (obj = testObject) => {
+  Benchmark.add('just-clone', (obj = object) => {
     const objClone = clone(obj)
   }),
   Benchmark.cycle(),
index 43059bbd18e9dc262be4c402652bc56fa894ba3a..b1f4d762f53226ea4f083de8bcd8539ccf6b0254 100644 (file)
@@ -1,18 +1,14 @@
 const Benchmark = require('benny')
-const { generateRandomInteger } = require('./benchmark-utils')
+const { generateRandomObject } = require('./benchmark-utils')
 
-const size = generateRandomInteger(500)
-const testObject = {}
-for (let i = 0; i < size; i++) {
-  testObject[i.toString()] = i
-}
+const { object, size } = generateRandomObject()
 
 Benchmark.suite(
   `Is empty object with ${size} keys`,
-  Benchmark.add('Reflect keys', (obj = testObject) => {
+  Benchmark.add('Reflect keys', (obj = object) => {
     return obj?.constructor === Object && Reflect.ownKeys(obj).length === 0
   }),
-  Benchmark.add('Keys iteration', (obj = testObject) => {
+  Benchmark.add('Keys iteration', (obj = object) => {
     if (obj?.constructor !== Object) return false
     // Iterates over the keys of an object, if
     // any exist, return false.
@@ -20,7 +16,7 @@ Benchmark.suite(
     for (const _ in obj) return false
     return true
   }),
-  Benchmark.add('Object keys', (obj = testObject) => {
+  Benchmark.add('Object keys', (obj = object) => {
     return obj?.constructor === Object && Object.keys(obj).length === 0
   }),
   Benchmark.cycle(),
index 131b5e974842c7217657ebd409cd9f6d618a31ef..18c396dc4d72f9e348e3be108be4a44b3d4c52ea 100644 (file)
@@ -1,23 +1,19 @@
 /* eslint-disable no-unused-vars */
 const Benchmark = require('benny')
-const { generateRandomInteger } = require('./benchmark-utils')
+const { generateRandomObject } = require('./benchmark-utils')
 const _ = require('lodash')
 
-const size = generateRandomInteger(500)
-const testObject = {}
-for (let i = 0; i < size; i++) {
-  testObject[i.toString()] = i
-}
+const { object, size } = generateRandomObject()
 
 Benchmark.suite(
   `Shallow clone object with ${size} keys`,
-  Benchmark.add('Spread', (obj = testObject) => {
+  Benchmark.add('Spread', (obj = object) => {
     const objClone = { ...obj }
   }),
-  Benchmark.add('Object assign', (obj = testObject) => {
+  Benchmark.add('Object assign', (obj = object) => {
     const objClone = Object.assign({}, obj)
   }),
-  Benchmark.add('lodash clone', (obj = testObject) => {
+  Benchmark.add('lodash clone', (obj = object) => {
     const objClone = _.clone(obj)
   }),
   Benchmark.cycle(),