build(deps-dev): apply updates
[benchmarks-js.git] / fibonacci.js
index 729fe9260bc5b87e787f321f030139b93e4300d5..75476bf93ca9dfb853ebede4f09beec5b061c7e6 100644 (file)
@@ -1,7 +1,4 @@
-const Benchmark = require('benchmark')
-const { LIST_FORMATTER } = require('./benchmark-utils')
-
-const suite = new Benchmark.Suite()
+const Benchmark = require('benny')
 
 const number = 30
 
@@ -10,18 +7,13 @@ const number = 30
  * @returns
  */
 function fibonacciLoop (num) {
-  let a = 1
-  let b = 0
-  let temp
-
-  while (num >= 0) {
-    temp = a
-    a = a + b
-    b = temp
-    num--
+  const fib = []
+  fib[0] = 0
+  fib[1] = 1
+  for (let i = 2; i <= num; i++) {
+    fib[i] = fib[i - 2] + fib[i - 1]
   }
-
-  return b
+  return fib[num]
 }
 
 /**
@@ -29,8 +21,7 @@ function fibonacciLoop (num) {
  * @returns
  */
 function fibonacciRecursion (num) {
-  if (num <= 1) return 1
-
+  if (num <= 1) return num
   return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2)
 }
 
@@ -43,31 +34,29 @@ function fibonacciRecursionMemoization (num, memo) {
   memo = memo || {}
 
   if (memo[num]) return memo[num]
-  if (num <= 1) return 1
+  if (num <= 1) return num
 
   return (memo[num] =
     fibonacciRecursionMemoization(num - 1, memo) +
     fibonacciRecursionMemoization(num - 2, memo))
 }
 
-suite
-  .add('fibonacciLoop', () => {
+Benchmark.suite(
+  `Fibonacci number ${number}`,
+  Benchmark.add('fibonacciLoop', () => {
     fibonacciLoop(number)
-  })
-  .add('fibonacciRecursion', () => {
+  }),
+  Benchmark.add('fibonacciRecursion', () => {
     fibonacciRecursion(number)
-  })
-  .add('fibonacciRecursionMemoization', () => {
+  }),
+  Benchmark.add('fibonacciRecursionMemoization', () => {
     fibonacciRecursionMemoization(number)
-  })
-  .on('cycle', event => {
-    console.log(event.target.toString())
-  })
-  .on('complete', function () {
-    console.log(
-      'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
-    )
-    // eslint-disable-next-line n/no-process-exit
-    process.exit()
-  })
-  .run()
+  }),
+  Benchmark.cycle(),
+  Benchmark.complete(),
+  Benchmark.save({ file: 'fibonacci', format: 'json', details: true }),
+  Benchmark.save({ file: 'fibonacci', format: 'chart.html', details: true }),
+  Benchmark.save({ file: 'fibonacci', format: 'table.html', details: true })
+).catch(err => {
+  console.error(err)
+})