Sha256: f9291f42ff3557ebc31cbea760df1b192166818713f6617bceb9bb43be1f8c85

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

require "spec_helper"

describe Stellar::Price, "#from_f" do
  subject{ Stellar::Price }
  let(:seed){ 225571644875421139403973254661022579608 } #generated using Random.new
  let(:random){ Random.new(seed) } 
  let(:iterations){ ENV["SMOKE_ITERATIONS"].present? ? ENV["SMOKE_ITERATIONS"].to_i : 2000}

  it "withstands a random smoke test" do
    iterations.times do |i|
      expected = random.rand
      actual_p = subject.from_f(expected)
      actual = actual_p.to_f

      expect(actual).to be_within(0.000000001).of(actual)
      expect(actual_p.n).to be <= Stellar::Price::MAX_PRECISION
      expect(actual_p.d).to be <= Stellar::Price::MAX_PRECISION
    end
  end

  it "works with bigdecimal" do
      whole      = random.rand(1_000_000)
      fractional = random.rand(10_000_000) # seven significant digits available for fractional
      
      expected = BigDecimal("#{whole}.#{fractional}")
      actual_p = subject.from_f(expected)
      actual = BigDecimal(actual_p.n) / BigDecimal(actual_p.d)

      expect(actual).to be_within(BigDecimal("0.000000001")).of(actual)
      expect(actual_p.n).to be <= Stellar::Price::MAX_PRECISION
      expect(actual_p.d).to be <= Stellar::Price::MAX_PRECISION
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
stellar-base-0.22.0 spec/lib/stellar/price_spec.rb
stellar-base-0.21.0 spec/lib/stellar/price_spec.rb
stellar-base-0.20.0 spec/lib/stellar/price_spec.rb