Sha256: 4e229713ef522f7559f5e321f7e2b00930dd5da2e9b386dcd0824ae87c4e3917

Contents?: true

Size: 1.9 KB

Versions: 6

Compression:

Stored size: 1.9 KB

Contents

require './test_helper'

class MPFR_TREC_SQRT < Test::Unit::TestCase
  def setup
    @rand_state = GMP::RandState.new
    @one = GMP::F(1)
    @zero = GMP::F(0)
    @inf = @one/@zero
    @nan = @inf - @inf
    @neg_zero = GMP::F("-0")
    @neg_one = GMP::F(-1)
    @neg_inf = @neg_one/@zero
  end

  # This really should be moved to be a method of GMP::F
  def integer_component(f)
    index_e = f.to_s.index('e')
    exp = f.to_s[(index_e+1)..-1].to_i
    return 0 if exp < 0
    f.to_s[2..(index_e-1)][0,exp]
  end
  
  def special
    x = @nan.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.nan?, "@nan.rec_sqrt should be NaN")
    x = @inf.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.zero?, "@inf.rec_sqrt should be +0")
    assert_true(x.hash != @neg_zero.hash, "@inf.rec_sqrt should be +0")
    x = @neg_inf.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.nan?, "@neg_inf.rec_sqrt should be NaN")
    x = @zero.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.infinite?, "@zero.rec_sqrt should be inf")
    x = @neg_zero.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.infinite?, "@neg_zero.rec_sqrt should be inf")
    x = @neg_one.rec_sqrt(GMP::GMP_RNDN)
    assert_true(x.nan?, "@neg_one.rec_sqrt should be NaN")
    x = @one.rec_sqrt(GMP::GMP_RNDN)
    assert_equal(@one, x, "@one.rec_sqrt should be 1")
    
    # Can't do 0b1e-1 yet
    #x = GMP::F("0b1.0001110110101001010100e-1", 23)
    #y = x.rec_sqrt(GMP::GMP_RNDU, 33)
    #x = GMP::F("0b1.01010110101110100100100101011", 33)
    #assert_equal(x, y, "something about precision...")
  end

  def bad_case1
    x = GMP::F("1.08310518720928b30e@-120", 72, 16, GMP::GMP_RNDN)
    z = GMP::F("f.8@59", 6, 16, GMP::GMP_RNDN)
    # z = rec_sqrt(x) rounded on 6 bits toward 0, the exact value being
    #  ~= f.bffffffffffffffffa11@59
    y = x.rec_sqrt(GMP::GMP_RNDZ, 6)
    assert_equal(y, z, "These should be equal...")
  end
  
  def test_prec
    special
    bad_case1
    #generic
    #bad_cases
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gmp-0.5.41 test/mpfr_trec_sqrt.rb
gmp-0.5.41-x86-mingw32 test/mpfr_trec_sqrt.rb
gmp-0.5.23 test/mpfr_trec_sqrt.rb
gmp-0.5.23-x86-mingw32 test/mpfr_trec_sqrt.rb
gmp-0.5.3 test/mpfr_trec_sqrt.rb
gmp-0.5.3-x86-mingw32 test/mpfr_trec_sqrt.rb