X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=fibonacci.js;h=75476bf93ca9dfb853ebede4f09beec5b061c7e6;hb=52d07fb863422041a24874efb893c711bf0b9cd4;hp=b5a7fbbdfc53912767a954ede90c4ec5e3b22f21;hpb=a9c78d5d3394dce4eccd9f244c88879666cba677;p=benchmarks-js.git diff --git a/fibonacci.js b/fibonacci.js index b5a7fbb..75476bf 100644 --- a/fibonacci.js +++ b/fibonacci.js @@ -1,70 +1,62 @@ -const Benchmark = require('benchmark') -const { LIST_FORMATTER } = require('./benchmark-utils') - -const suite = new Benchmark.Suite() +const Benchmark = require('benny') const number = 30 /** * @param num + * @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] } /** * @param num + * @returns */ function fibonacciRecursion (num) { - if (num <= 1) return 1 - + if (num <= 1) return num return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2) } /** * @param num * @param memo + * @returns */ 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', function () { +Benchmark.suite( + `Fibonacci number ${number}`, + Benchmark.add('fibonacciLoop', () => { fibonacciLoop(number) - }) - .add('fibonacciRecursion', function () { + }), + Benchmark.add('fibonacciRecursion', () => { fibonacciRecursion(number) - }) - .add('fibonacciRecursionMemoization', function () { + }), + Benchmark.add('fibonacciRecursionMemoization', () => { fibonacciRecursionMemoization(number) - }) - .on('cycle', function (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 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) +})