import 'mocha';
import { expect } from 'chai';
import {
  fibonacci,
  fibonacciIterative,
  fibonacciMemoization
} from '../../../src/js/others/fibonacci';

describe('Fibonacci', () => {
  it('Fibonacci Recursive', () => {
    expect(fibonacci(-1)).to.equal(0);
    expect(fibonacci(0)).to.equal(0);
    expect(fibonacci(1)).to.equal(1);
    expect(fibonacci(2)).to.equal(1);
    expect(fibonacci(3)).to.equal(2);
    expect(fibonacci(4)).to.equal(3);
  });

  it('Fibonacci Iterative', () => {
    expect(fibonacciIterative(-1)).to.equal(0);
    expect(fibonacciIterative(0)).to.equal(0);
    expect(fibonacciIterative(1)).to.equal(1);
    expect(fibonacciIterative(2)).to.equal(1);
    expect(fibonacciIterative(3)).to.equal(2);
    expect(fibonacciIterative(4)).to.equal(3);
  });

  it('Fibonacci with Memoization', () => {
    expect(fibonacciMemoization(-1)).to.equal(0);
    expect(fibonacciMemoization(0)).to.equal(0);
    expect(fibonacciMemoization(1)).to.equal(1);
    expect(fibonacciMemoization(2)).to.equal(1);
    expect(fibonacciMemoization(3)).to.equal(2);
    expect(fibonacciMemoization(4)).to.equal(3);
  });
});