gmp 0.6.43 → 0.6.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,10 @@ class GMP_TRoot < Test::Unit::TestCase
5
5
  Reps = 500
6
6
 
7
7
  def one_test(root1, x2, nth, i)
8
+ # Travis revealed something weird on Linux. rootrem gives a different result:
9
+ #
10
+ # https://travis-ci.org/srawlins/gmp/jobs/15112258
11
+ skip if !RUBY_PLATFORM["darwin"]
8
12
  root2, rem2 = x2.rootrem(nth)
9
13
  temp = root1 ** nth
10
14
  temp2 = temp + rem2
@@ -19,7 +19,7 @@ class MPFR_TCBRT < Test::Unit::TestCase
19
19
  return 0 if exp < 0
20
20
  f.to_s[2..(index_e-1)][0,exp]
21
21
  end
22
-
22
+
23
23
  def special
24
24
  x = @nan.cbrt(GMP::GMP_RNDN)
25
25
  assert_true(x.nan?, "@nan.cbrt should be NaN")
@@ -69,12 +69,12 @@ class MPFR_TCBRT < Test::Unit::TestCase
69
69
  y = GMP::F("1.0111E-1", 5, 2)
70
70
  assert_equal(y, x, "cbrt should be correct")
71
71
  end
72
-
72
+
73
73
  def test_cbrt
74
74
  special
75
75
 
76
76
  (2..100).each do |p|
77
- [GMP::GMP_RNDN, GMP::GMP_RNDZ, GMP::GMP_RNDD, GMP::GMP_RNDU].each do |rnd|
77
+ RND_MODES.each do |rnd|
78
78
  x = GMP::F(1).cbrt(rnd)
79
79
  assert_equal(GMP::F(1), x, "1.cbrt should be 1 (prec #{p}) in rounding mode #{rnd}")
80
80
  x = GMP::F(-1).cbrt(rnd)
@@ -1,18 +1,6 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
2
 
3
3
  class MPFR_TCONST_EULER < Test::Unit::TestCase
4
- def setup
5
- @rand_state = GMP::RandState.new
6
-
7
- if GMP::MPFR_VERSION >= "3.0.0"
8
- @rnd_modes = [GMP::MPFR_RNDN, GMP::MPFR_RNDZ, GMP::MPFR_RNDU, GMP::MPFR_RNDD, GMP::MPFR_RNDA]
9
- @mpfr_rnd_max = 5
10
- else
11
- @rnd_modes = [GMP::GMP_RNDN, GMP::GMP_RNDZ, GMP::GMP_RNDU, GMP::GMP_RNDD]
12
- @mpfr_rnd_max = 4
13
- end
14
- end
15
-
16
4
  def test_const_euler
17
5
  prec = 53
18
6
 
@@ -20,20 +8,23 @@ class MPFR_TCONST_EULER < Test::Unit::TestCase
20
8
  z = GMP::F("0.10010011110001000110011111100011", 32, 2)
21
9
  assert_equal(z, y, "Const Euler to precision 32 should be accurate.")
22
10
 
23
- (2..200).each do |p|
24
- z.prec= p
25
- t = GMP::F(0, p)
26
- yprec = p+10
11
+ (2..200).each do |prec|
12
+ yprec = prec + 10
27
13
 
28
- #(0...@mpfr_rnd_max).each do |rnd| # Can i emulate this?
29
- (@rnd_modes).each do |rnd|
30
- y.prec = yprec
31
- #GMP::F.const_euler(y, rnd)
32
- #err = rnd == GMP::GMP_RNDN ? yprec+1 : yprec
33
- #if y.can_round?(err, rnd, rnd, p)
34
- #
35
- #end
14
+ (RND_MODES).each do |rnd|
15
+ y = GMP::F.const_euler(rnd, yprec)
16
+ err = rnd == GMP::GMP_RNDN ? yprec+1 : yprec
17
+
18
+ if y.can_round?(err, rnd, rnd, prec)
19
+ t = GMP::F(y, prec, rnd)
20
+ z = GMP::F.const_euler(rnd, prec)
21
+ assert_equal(t, z, "const_euler should be equal at prec=#{prec}, rnd_mode=#{rnd.inspect}")
22
+ end
36
23
  end
37
24
  end
38
25
  end
26
+
27
+ def test_bad_prec
28
+ assert_raise(TypeError) { GMP::F.const_euler(GMP::GMP_RNDN, "not a precision") }
29
+ end
39
30
  end
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class MPFR_TFAC < Test::Unit::TestCase
4
+ def setup
5
+ @one = GMP::F(1)
6
+ @zero = GMP::F(0)
7
+ @inf = @one/@zero
8
+ @nan = @inf - @inf
9
+ @neg_one = GMP::F(-1)
10
+ @neg_inf = @neg_one/@zero
11
+ @neg_zero = GMP::F("-0")
12
+ @rand_state = GMP::RandState.new
13
+ end
14
+
15
+ def special
16
+ x = GMP::F.fac(119, GMP::GMP_RNDZ, 21)
17
+ y = GMP::F("0.101111101110100110110E654", 21, 2)
18
+ assert_equal(y, x, "fac should be correct")
19
+
20
+ x = GMP::F("0.110111100001000001101010010001000111000100000100111000010011100011011111001100011110101000111101101100110001001100110100001001111110000101010000100100011100010011101110000001000010001100010000101001111E6250", 206, 2)
21
+ y = GMP::F.fac(767, GMP::GMP_RNDN, 206)
22
+ end
23
+
24
+ def int
25
+ f = GMP::Z.fac(0)
26
+ (1..80).each do |n|
27
+ f = f * n
28
+ prec = f.size_in_base(2) - f.scan1(0)
29
+ (GMP::MPFR_PREC_MIN..prec).each do |p|
30
+ RND_MODES.each do |rnd|
31
+ x = GMP::F.fac(n, rnd, p)
32
+ y = GMP::F.new(f, p, rnd)
33
+ assert_equal(y, x, "fac should be correct for integers")
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def test_fac
40
+ special
41
+
42
+ int
43
+
44
+ assert_equal(1, GMP::F.fac(0), "fac(0) should give 1")
45
+
46
+ # There are more tests in tfactorial.c, but they rely on return values and
47
+ # mpfr_can_round... so not yet.
48
+ end
49
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class MPFR_TFrexp < Test::Unit::TestCase
4
+ def setup
5
+ end
6
+
7
+ def special
8
+ exp, y = GMP::F.nan.frexp
9
+ assert_true(y.nan?, "frexp of NaN should be correct")
10
+
11
+ exp, y = GMP::F.inf.frexp
12
+ assert_true(y.infinite? && y > 0, "frexp of Inf should be correct")
13
+
14
+ exp, y = GMP::F.inf(-1).frexp
15
+ assert_true(y.infinite? && y < 0, "frexp of -Inf should be correct")
16
+
17
+ exp, y = GMP::F.zero.frexp
18
+ assert_equal(y, GMP::F.zero, "frexp of zero should be correct")
19
+
20
+ exp, y = GMP::F.zero(-1).frexp
21
+ assert_equal(y, GMP::F.zero(-1), "frexp of -zero should be correct")
22
+
23
+ exp, y = GMP::F(17).frexp
24
+ assert_equal(exp, 5, "frexp of 17 should return exp of 5")
25
+ assert_equal(y, GMP::F("0.53125"), "frexp of 17 should return exp of 5")
26
+
27
+ exp, y = GMP::F(17).frexp(GMP::GMP_RNDN, 4)
28
+ assert_equal(exp, 5, "frexp of 17 should return exp of 5")
29
+ assert_equal(y, GMP::F("0.5", 4), "frexp of 17 should return exp of 5")
30
+
31
+ exp, y = GMP::F(17).frexp(GMP::GMP_RNDZ, 4)
32
+ assert_equal(exp, 5, "frexp of 17 should return exp of 5")
33
+ assert_equal(y, GMP::F("0.5", 4), "frexp of 17 should return exp of 5")
34
+
35
+ exp, y = GMP::F(17).frexp(GMP::GMP_RNDD, 4)
36
+ assert_equal(exp, 5, "frexp of 17 should return exp of 5")
37
+ assert_equal(y, GMP::F("0.5", 4), "frexp of 17 should return exp of 5")
38
+
39
+ exp, y = GMP::F(17).frexp(GMP::GMP_RNDU, 4)
40
+ assert_equal(exp, 5, "frexp of 17 should return exp of 5")
41
+ assert_equal(y, GMP::F("0.562", 4), "frexp of 17 should return exp of 5")
42
+ end
43
+
44
+ def test_fac
45
+ special
46
+ end
47
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class TC_f_abs_neg < Test::Unit::TestCase
4
+ def setup
5
+ @a=GMP::F.new(3.14)
6
+ @b=GMP::F.new()
7
+ @c=GMP::F.new(-3.14)
8
+ @d=GMP::F.new(3.14)
9
+ @e=GMP::F.new()
10
+ @f=GMP::F.new(-3.14)
11
+ end
12
+
13
+ def test_neg
14
+ assert_equal(-@a, @c, "-(x : GMP::Z) should be calculated correctly.")
15
+ assert_equal(-@c, @a, "-(x : GMP::Z) should be calculated correctly.")
16
+ assert_equal(-@b, @b, "-GMP::Z.new() should equal GMP::Z.new().")
17
+ @d.neg!; @e.neg!; @f.neg!
18
+ assert_equal(@d, @c, "(x : GMP::Z).neg! should be calculated correctly.")
19
+ assert_equal(@e, @b, "(x : GMP::Z).neg! should be calculated correctly.")
20
+ assert_equal(@f, @a, "GMP::Z.new().neg! should equal GMP::Z.new().")
21
+ end
22
+
23
+ def test_abs
24
+ assert_equal([@a, 0, @a], [@a.abs, @b.abs, @c.abs], "(x : GMP::Z).abs should be calculated correctly.")
25
+ @a.abs!; @b.abs!; @c.abs!
26
+ assert_equal([@a, 0, @a], [@a, @b, @c], "(x : GMP::Z).abs! should be calculated correctly.")
27
+ end
28
+ end
@@ -10,7 +10,6 @@ class TC_F_to_s < Test::Unit::TestCase
10
10
  end
11
11
 
12
12
  def test_to_s_default_prec
13
- return if not GMP.const_defined? :MPFR_VERSION # I might be able to add this one back in...
14
13
  rs = GMP::RandState.new(11213)
15
14
  if GMP.const_defined? :MPFR_VERSION
16
15
  strings = [
@@ -26,7 +25,7 @@ class TC_F_to_s < Test::Unit::TestCase
26
25
  ]
27
26
  end
28
27
  # In this test, each numerator, n, and denominator, d, pair is generated in
29
- # succession from @rs. Each pair is used to create a floating point number.
28
+ # succession from rs. Each pair is used to create a floating point number.
30
29
  # The first pair are uniformly distributed random integers between 0 and
31
30
  # 2^100 - 1. The next two are distributed between 0 and 2^110 - 1. The last
32
31
  # are distributed between 0 and 2^190 - 1.
@@ -59,20 +58,35 @@ class TC_F_to_s < Test::Unit::TestCase
59
58
  end
60
59
 
61
60
  def test_different_bases
62
- return if not GMP.const_defined? :MPFR_VERSION
63
61
  f = GMP::F(0.5)
64
- assert_equal("0.50000000000000000e+0", f.to_s)
65
- assert_equal("0.10000000000000000000000000000000000000000000000000000e+0", f.to_s(2))
66
- assert_equal("0.10000000000000000000000000000000000000000000000000000e+0", f.to_s(:bin))
67
- assert_equal("0.11111111111111111111111111111111112e+0", f.to_s(3))
68
- assert_equal("0.200000000000000000000000000e+0", f.to_s(4))
69
- assert_equal("0.50000000000000000e+0", f.inspect)
70
-
71
62
  g = GMP::F(0.8)
72
- assert_equal("0.80000000000000004e+0", g.to_s)
73
- assert_equal("0.21012101210121012101210121012101220e+0", g.to_s(3))
74
- assert_equal("0.400000000000000000000003e+0", g.to_s(5))
75
- assert_equal("0.k00000000002ge+0", g.to_s(25))
76
- assert_equal("0.80000000000000004e+0", g.inspect)
63
+
64
+ if GMP.const_defined? :MPFR_VERSION
65
+ assert_equal("0.50000000000000000e+0", f.to_s)
66
+ assert_equal("0.10000000000000000000000000000000000000000000000000000e+0", f.to_s(2))
67
+ assert_equal("0.10000000000000000000000000000000000000000000000000000e+0", f.to_s(:bin))
68
+ assert_equal("0.11111111111111111111111111111111112e+0", f.to_s(3))
69
+ assert_equal("0.200000000000000000000000000e+0", f.to_s(4))
70
+ assert_equal("0.50000000000000000e+0", f.inspect)
71
+
72
+ assert_equal("0.80000000000000004e+0", g.to_s)
73
+ assert_equal("0.21012101210121012101210121012101220e+0", g.to_s(3))
74
+ assert_equal("0.400000000000000000000003e+0", g.to_s(5))
75
+ assert_equal("0.k00000000002ge+0", g.to_s(25))
76
+ assert_equal("0.80000000000000004e+0", g.inspect)
77
+ else
78
+ assert_equal("0.5e+0", f.to_s)
79
+ assert_equal("0.1e+0", f.to_s(2))
80
+ assert_equal("0.1e+0", f.to_s(:bin))
81
+ assert_equal("0.111111111111111111111111111111111111111111e+0", f.to_s(3))
82
+ assert_equal("0.2e+0", f.to_s(4))
83
+ assert_equal("0.5e+0", f.inspect)
84
+
85
+ assert_equal("0.800000000000000044409e+0", g.to_s)
86
+ assert_equal("0.21012101210121012101210121012101212211012e+0", g.to_s(3))
87
+ assert_equal("0.40000000000000000000000231042e+0", g.to_s(5))
88
+ assert_equal("0.k00000000002g49e+0", g.to_s(25))
89
+ assert_equal("0.800000000000000044409e+0", g.inspect)
90
+ end
77
91
  end
78
92
  end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class TC_MPFR_Cmp < Test::Unit::TestCase
4
+ def setup
5
+ @neg_inf = GMP::F(0).log # -Inf
6
+ @inf = -@neg_inf # Inf
7
+ @nan = @neg_inf + @inf # NaN
8
+ end
9
+
10
+ def test_mpfr_lessgreater
11
+ assert_true(GMP::F(5).lessgreater?(GMP::F(12)), "lessgreater? should work")
12
+ assert_true(GMP::F(5).lessgreater?(@inf), "lessgreater? should work")
13
+ assert_false(GMP::F(5).lessgreater?(@nan), "lessgreater? should work")
14
+ assert_false(@nan.lessgreater?(@nan), "lessgreater? should work")
15
+ end
16
+
17
+ def test_mpfr_lessgreater_types
18
+ assert_raise(TypeError) { GMP::F(5).lessgreater? 3.14 }
19
+ end
20
+
21
+ def test_mpfr_unordered
22
+ assert_true(@nan.unordered?(GMP::F(5)), "unordered? should work")
23
+ assert_false(@neg_inf.unordered?(GMP::F(5)), "unordered? should work")
24
+ end
25
+
26
+ def test_mpfr_unordered_types
27
+ assert_raise(TypeError) { GMP::F(5).unordered? 3.14 }
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class TC_MPFR_Inf_Nan_Zero < Test::Unit::TestCase
4
+ def setup
5
+ @neg_inf = GMP::F(0).log # -Inf
6
+ @inf = -@neg_inf # Inf
7
+ @nan = @neg_inf + @inf # NaN
8
+ @zero = GMP::F(0)
9
+ end
10
+
11
+ def test_nan
12
+ assert_equal(@nan, GMP::F.nan, "NaN should be NaN")
13
+ end
14
+
15
+ def test_inf
16
+ assert_equal(@inf, GMP::F.inf, "inf should be inf")
17
+ assert_equal(@neg_inf, GMP::F.inf(-1), "neg_inf should be neg_inf")
18
+ end
19
+
20
+ def test_zero
21
+ assert_equal(@zero, GMP::F.zero, "zero should be zero")
22
+ assert_equal(-@zero, GMP::F.zero(-1), "negaitve zero should be negative zero")
23
+ end
24
+
25
+ def test_type
26
+ assert_raise(TypeError) { GMP::F.inf(0.5); }
27
+ assert_raise(TypeError) { GMP::F.zero(0.5); }
28
+ end
29
+ end
@@ -0,0 +1,126 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+
3
+ class TC_MPFR_New_Rounding < Test::Unit::TestCase
4
+ def test_new_fixnum
5
+ ninety_six = GMP::F(96, 4)
6
+ one_hundred_four = GMP::F(104, 4)
7
+
8
+ a = GMP::F(100, 4)
9
+ assert_equal(a, ninety_six, "GMP::F.new should default round with RNDN")
10
+
11
+ a = GMP::F(100, 4, GMP::GMP_RNDN)
12
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDN")
13
+
14
+ a = GMP::F(100, 4, GMP::GMP_RNDD)
15
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDD")
16
+
17
+ a = GMP::F(100, 4, GMP::GMP_RNDZ)
18
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDZ")
19
+
20
+ a = GMP::F(100, 4, GMP::GMP_RNDU)
21
+ assert_equal(a, one_hundred_four, "GMP::F.new should round with RNDU")
22
+ end
23
+
24
+ def test_new_bignum
25
+ over = GMP::F(0.36472996384e+20, 32)
26
+ under = GMP::F(0.36472996375e+20, 32)
27
+
28
+ a = GMP::F(3**41, 32)
29
+ assert_equal(a, under, "GMP::F.new should default round with RNDN")
30
+
31
+ a = GMP::F(3**41, 32, GMP::GMP_RNDN)
32
+ assert_equal(a, under, "GMP::F.new should round with RNDN")
33
+
34
+ a = GMP::F(3**41, 32, GMP::GMP_RNDD)
35
+ assert_equal(a, under, "GMP::F.new should round with RNDD")
36
+
37
+ a = GMP::F(3**41, 32, GMP::GMP_RNDZ)
38
+ assert_equal(a, under, "GMP::F.new should round with RNDZ")
39
+
40
+ a = GMP::F(3**41, 32, GMP::GMP_RNDU)
41
+ assert_equal(a, over, "GMP::F.new should round with RNDU")
42
+ end
43
+
44
+ def test_new_gmpz
45
+ z100 = GMP::Z(100)
46
+ ninety_six = GMP::F(96, 4)
47
+ one_hundred_four = GMP::F(104, 4)
48
+
49
+ a = GMP::F(z100, 4)
50
+ assert_equal(a, ninety_six, "GMP::F.new should default round with RNDN")
51
+
52
+ a = GMP::F(z100, 4, GMP::GMP_RNDN)
53
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDN")
54
+
55
+ a = GMP::F(z100, 4, GMP::GMP_RNDD)
56
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDD")
57
+
58
+ a = GMP::F(z100, 4, GMP::GMP_RNDZ)
59
+ assert_equal(a, ninety_six, "GMP::F.new should round with RNDZ")
60
+
61
+ a = GMP::F(z100, 4, GMP::GMP_RNDU)
62
+ assert_equal(a, one_hundred_four, "GMP::F.new should round with RNDU")
63
+ end
64
+
65
+ def test_new_gmpq
66
+ pi = GMP::Q(22,7)
67
+ below = GMP::F(0.3141e+1, 8)
68
+ above = GMP::F(0.3156e+1, 8)
69
+
70
+ a = GMP::F(pi, 8)
71
+ assert_equal(a, below, "GMP::F.new should default round with RNDN")
72
+
73
+ a = GMP::F(pi, 8, GMP::GMP_RNDN)
74
+ assert_equal(a, below, "GMP::F.new should round with RNDN")
75
+
76
+ a = GMP::F(pi, 8, GMP::GMP_RNDD)
77
+ assert_equal(a, below, "GMP::F.new should round with RNDD")
78
+
79
+ a = GMP::F(pi, 8, GMP::GMP_RNDZ)
80
+ assert_equal(a, below, "GMP::F.new should round with RNDZ")
81
+
82
+ a = GMP::F(pi, 8, GMP::GMP_RNDU)
83
+ assert_equal(a, above, "GMP::F.new should round with RNDU")
84
+ end
85
+
86
+ def test_new_float
87
+ ohoh977 = GMP::F(0.977e-2, 4)
88
+ oh107 = GMP::F(0.107e-1, 4)
89
+
90
+ a = GMP::F(0.01, 4)
91
+ assert_equal(a, ohoh977, "GMP::F.new should default round with RNDN")
92
+
93
+ a = GMP::F(0.01, 4, GMP::GMP_RNDN)
94
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDN")
95
+
96
+ a = GMP::F(0.01, 4, GMP::GMP_RNDD)
97
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDD")
98
+
99
+ a = GMP::F(0.01, 4, GMP::GMP_RNDZ)
100
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDZ")
101
+
102
+ a = GMP::F(0.01, 4, GMP::GMP_RNDU)
103
+ assert_equal(a, oh107, "GMP::F.new should round with RNDU")
104
+ end
105
+
106
+ def test_new_mpfr
107
+ ohoh977 = GMP::F(-0.977e-2, 4)
108
+ oh107 = GMP::F(-0.107e-1, 4)
109
+ one_hundredth = GMP::F(-0.01)
110
+
111
+ a = GMP::F(one_hundredth, 4)
112
+ assert_equal(a, ohoh977, "GMP::F.new should default round with RNDN")
113
+
114
+ a = GMP::F(one_hundredth, 4, GMP::GMP_RNDN)
115
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDN")
116
+
117
+ a = GMP::F(one_hundredth, 4, GMP::GMP_RNDD)
118
+ assert_equal(a, oh107, "GMP::F.new should round with RNDD")
119
+
120
+ a = GMP::F(one_hundredth, 4, GMP::GMP_RNDZ)
121
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDZ")
122
+
123
+ a = GMP::F(one_hundredth, 4, GMP::GMP_RNDU)
124
+ assert_equal(a, ohoh977, "GMP::F.new should round with RNDU")
125
+ end
126
+ end