import { describe, it, expect, xit } from '@jest/globals'
import { steps } from './collatz-conjecture.ts'

describe('CollatzConjecture', () => {
  it('zero steps for one', () => {
    const expected = 0
    expect(steps(1)).toBe(expected)
  })

  it('divide if even', () => {
    const expected = 4
    expect(steps(16)).toBe(expected)
  })

  it('even and odd steps', () => {
    const expected = 9
    expect(steps(12)).toBe(expected)
  })

  it('Large number of even and odd steps', () => {
    const expected = 152
    expect(steps(1000000)).toBe(expected)
  })

  it('zero is an error', () => {
    const expected = 'Only positive integers are allowed'
    expect(() => {
      steps(0)
    }).toThrow(expected)
  })

  it('negative value is an error', () => {
    const expected = 'Only positive integers are allowed'
    expect(() => {
      steps(-15)
    }).toThrow(expected)
  })

  it('non-integer value is an error', () => {
    const expected = 'Only positive integers are allowed'
    expect(() => {
      steps(3.1415)
    }).toThrow(expected)
  })
})
