require 'rails_helper'

RSpec.describe UnitConversion::ParsedNumber do

  it 'converts integers' do
    expect(UnitConversion::ParsedNumber.new('1').value).to eq 1
    expect(UnitConversion::ParsedNumber.new('-1').value).to eq -1
    expect(UnitConversion::ParsedNumber.new('0').value).to eq 0
    expect(UnitConversion::ParsedNumber.new('20').value).to eq 20
    expect(UnitConversion::ParsedNumber.new('103').value).to eq 103
  end

  it 'converts decimal numbers' do
    expect(UnitConversion::ParsedNumber.new('1.0').value).to eq BigDecimal("1")
    expect(UnitConversion::ParsedNumber.new('-1.0').value).to eq BigDecimal("-1")
    expect(UnitConversion::ParsedNumber.new('54.33').value).to eq BigDecimal("54.33")
    expect(UnitConversion::ParsedNumber.new('-54.33').value).to eq BigDecimal("-54.33")
    expect(UnitConversion::ParsedNumber.new('.33').value).to eq BigDecimal("0.33")
  end

  it 'converts simple fractions' do
    expect(UnitConversion::ParsedNumber.new('1/2').value).to eq Rational(1, 2)
    expect(UnitConversion::ParsedNumber.new('-1/2').value).to eq Rational(-1, 2)
    expect(UnitConversion::ParsedNumber.new('3/16').value).to eq Rational(3, 16)
  end

  it 'converts fractions with whole numbers' do
    expect(UnitConversion::ParsedNumber.new('1 1/2').value).to eq Rational(3, 2)
    expect(UnitConversion::ParsedNumber.new('-1 1/2').value).to eq Rational(-3, 2)
    expect(UnitConversion::ParsedNumber.new('4 3/4').value).to eq Rational(19, 4)
    expect(UnitConversion::ParsedNumber.new('18 9/10').value).to eq Rational(189, 10)
  end

end