Files
JavaScript/Maths/test/Fibonacci.test.js
Madhurendra Nath Tiwari 268796b0e8 added fibonacci using formula along with test cases (#1358)
* added fibonacci using formula along with test cases

* updated the changes

* added jest's each in test cases

* added jest's each for testing

* returned inline value

* removed redundant comment

* hoisted the variables

* Use shorthand

* considered adding resource of the formula

---------

Co-authored-by: madhuredra <madhuredra.tiwari@zemosolabs.com>
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
2023-09-19 20:29:34 +05:30

107 lines
3.5 KiB
JavaScript

import {
FibonacciDpWithoutRecursion,
FibonacciRecursiveDP,
FibonacciIterative,
FibonacciGenerator,
FibonacciRecursive,
FibonacciMatrixExpo,
FibonacciUsingFormula
} from '../Fibonacci'
describe('Fibonacci', () => {
it('should return an array of numbers for FibonacciIterative', () => {
expect(FibonacciIterative(6)).toEqual(
expect.arrayContaining([0, 1, 1, 2, 3, 5, 8])
)
expect(FibonacciIterative(-6)).toEqual(
expect.arrayContaining([0, 1, -1, 2, -3, 5, -8])
)
})
it('should return number for FibonacciGenerator', () => {
const positive = FibonacciGenerator()
expect(positive.next().value).toBe(0)
expect(positive.next().value).toBe(1)
expect(positive.next().value).toBe(1)
expect(positive.next().value).toBe(2)
expect(positive.next().value).toBe(3)
expect(positive.next().value).toBe(5)
expect(positive.next().value).toBe(8)
const negative = FibonacciGenerator(true)
expect(negative.next().value).toBe(0)
expect(negative.next().value).toBe(1)
expect(negative.next().value).toBe(-1)
expect(negative.next().value).toBe(2)
expect(negative.next().value).toBe(-3)
expect(negative.next().value).toBe(5)
expect(negative.next().value).toBe(-8)
})
it('should return an array of numbers for FibonacciRecursive', () => {
expect(FibonacciRecursive(6)).toEqual(
expect.arrayContaining([0, 1, 1, 2, 3, 5, 8])
)
expect(FibonacciRecursive(-6)).toEqual(
expect.arrayContaining([-0, 1, -1, 2, -3, 5, -8])
)
})
it('should return number for FibonacciRecursiveDP', () => {
expect(FibonacciRecursiveDP(6)).toBe(8)
expect(FibonacciRecursiveDP(-6)).toBe(-8)
})
it('should return an array of numbers for FibonacciDpWithoutRecursion', () => {
expect(FibonacciDpWithoutRecursion(6)).toEqual(
expect.arrayContaining([0, 1, 1, 2, 3, 5, 8])
)
expect(FibonacciDpWithoutRecursion(-6)).toEqual(
expect.arrayContaining([0, 1, -1, 2, -3, 5, -8])
)
})
it('should return number for FibonacciMatrixExpo', () => {
expect(FibonacciMatrixExpo(0)).toBe(0)
expect(FibonacciMatrixExpo(1)).toBe(1)
expect(FibonacciMatrixExpo(2)).toBe(1)
expect(FibonacciMatrixExpo(3)).toBe(2)
expect(FibonacciMatrixExpo(4)).toBe(3)
expect(FibonacciMatrixExpo(5)).toBe(5)
expect(FibonacciMatrixExpo(6)).toBe(8)
expect(FibonacciMatrixExpo(-0)).toBe(-0)
expect(FibonacciMatrixExpo(-1)).toBe(1)
expect(FibonacciMatrixExpo(-2)).toBe(-1)
expect(FibonacciMatrixExpo(-3)).toBe(2)
expect(FibonacciMatrixExpo(-4)).toBe(-3)
expect(FibonacciMatrixExpo(-5)).toBe(5)
expect(FibonacciMatrixExpo(-6)).toBe(-8)
})
it('should return bigint for FibonacciMatrixExpo', () => {
expect(FibonacciMatrixExpo(0n)).toBe(0n)
expect(FibonacciMatrixExpo(1n)).toBe(1n)
expect(FibonacciMatrixExpo(2n)).toBe(1n)
expect(FibonacciMatrixExpo(3n)).toBe(2n)
expect(FibonacciMatrixExpo(4n)).toBe(3n)
expect(FibonacciMatrixExpo(5n)).toBe(5n)
expect(FibonacciMatrixExpo(6n)).toBe(8n)
expect(FibonacciMatrixExpo(-0n)).toBe(0n)
expect(FibonacciMatrixExpo(-1n)).toBe(1n)
expect(FibonacciMatrixExpo(-2n)).toBe(-1n)
expect(FibonacciMatrixExpo(-3n)).toBe(2n)
expect(FibonacciMatrixExpo(-4n)).toBe(-3n)
expect(FibonacciMatrixExpo(-5n)).toBe(5n)
expect(FibonacciMatrixExpo(-6n)).toBe(-8n)
})
it.each([
[0, 0],
[1, 1],
[15, 610]
])('should calculate the correct Fibonacci number for n = %i', (n, expected) => {
expect(FibonacciUsingFormula(n)).toBe(expected)
})
})