import { excelRound } from '../utils/excelRound'

describe('DC Validator - excelRound', () => {
  it('should round to the given number of decimal places', () => {
    expect(excelRound(1.23456, 2)).toEqual(1.23)
    expect(excelRound(1.236, 2)).toEqual(1.24)
    expect(excelRound(2.5, 0)).toEqual(3)
  })

  it('should round half away from zero for negative values', () => {
    expect(excelRound(-0.5, 0)).toEqual(-1)
    expect(excelRound(-2.5, 0)).toEqual(-3)
    expect(excelRound(-1.23456, 2)).toEqual(-1.23)
  })

  it('should support negative digits (round to tens/hundreds)', () => {
    expect(excelRound(25, -1)).toEqual(30)
    expect(excelRound(24, -1)).toEqual(20)
    expect(excelRound(150, -2)).toEqual(200)
  })

  // Examples from Microsoft's ROUND documentation:
  // https://support.microsoft.com/en-us/office/round-function-c018c5d8-40fb-4053-90b1-b3e7f61a213c
  it('should match the Microsoft ROUND examples', () => {
    expect(excelRound(2.15, 1)).toEqual(2.2)
    expect(excelRound(2.149, 1)).toEqual(2.1)
    expect(excelRound(-1.475, 2)).toEqual(-1.48)
    expect(excelRound(21.5, -1)).toEqual(20)
    expect(excelRound(626.3, -3)).toEqual(1000)
    expect(excelRound(1.98, -1)).toEqual(0)
    expect(excelRound(-50.55, -2)).toEqual(-100)
  })

  it('should return the original value when not finite', () => {
    expect(excelRound(NaN, 2)).toBeNaN()
    expect(excelRound(Infinity, 2)).toEqual(Infinity)
    expect(excelRound(5, NaN)).toEqual(5)
  })
})
