import { Polynomial } from '../Polynomial'

describe('Polynomial', () => {
  it('should not return a expression for zero', () => {
    const polynomial = new Polynomial([0])
    expect(polynomial.display()).toBe('')
  })
  it('should not return an expression for zero values', () => {
    const polynomial = new Polynomial([0, 0, 0, 0, 0])
    expect(polynomial.display()).toBe('')
  })
  it('should return an expression for single a non zero value', () => {
    const polynomial = new Polynomial([9])
    expect(polynomial.display()).toBe('(9)')
  })
  it('should return an expression for two values', () => {
    const polynomial = new Polynomial([3, 2])
    expect(polynomial.display()).toBe('(2x) + (3)')
  })
  it('should return an expression for values including zero', () => {
    const polynomial = new Polynomial([0, 2])
    expect(polynomial.display()).toBe('(2x)')
  })
  it('should return an expression and evaluate it', () => {
    const polynomial = new Polynomial([1, 2, 3, 4])
    expect(polynomial.display()).toBe('(4x^3) + (3x^2) + (2x) + (1)')
    expect(polynomial.evaluate(2)).toEqual(49)
  })
  it('should evaluate 0 for zero values', () => {
    const polynomial = new Polynomial([0, 0, 0, 0])
    expect(polynomial.evaluate(5)).toEqual(0)
  })
  it('should evaluate for negative values', () => {
    const polynomial = new Polynomial([-1, -3, -4, -7])
    expect(polynomial.evaluate(-5)).toBe(789)
  })
})

Polynomial