gmp 0.1.7 → 0.1.8
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.
- data/CHANGELOG +14 -0
- data/README.rdoc +2 -2
- data/ext/gmpq.c +1 -0
- data/manual.tex +54 -1
- data/test/README +2 -2
- data/test/tc_f_arithmetics_coersion.rb +71 -0
- data/test/tc_f_precision.rb +48 -0
- data/test/unit_tests.rb +66 -102
- metadata +5 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
0.18:
|
2
|
+
* Added test: tc_division, in progress.
|
3
|
+
* Unit test results: 56 tests, 361 assertions, 0 failures, 0 errors
|
4
|
+
* Added to_f ==> to_d aliases for GMP::Q and GMP::F.
|
5
|
+
|
6
|
+
0.1.7:
|
7
|
+
* Added tests: tc_shifts_last_bits, tc_logical_roots, tc_f_precision,
|
8
|
+
tc_f_arithmetics_coersion, tc_default_prec
|
9
|
+
* Unit test results: 54 tests, 326 assertions, 0 failures, 0 errors
|
10
|
+
* Fixed defect in GMP::F.sub when argument is Bignum
|
11
|
+
* Fixed defect in GMP::F.div when argument is Bignum
|
12
|
+
* Added documentation "manual" in form of a LaTeX-based PDF. Very incomplete
|
13
|
+
* as of yet.
|
14
|
+
|
1
15
|
0.1.6.2:
|
2
16
|
* Added optional argument to GMP::Z.to_s. Supply base as either a Fixnum or
|
3
17
|
a Symbol like :hex to get the string in a different base.
|
data/README.rdoc
CHANGED
@@ -241,11 +241,11 @@ still relevant.
|
|
241
241
|
* better bignum parser
|
242
242
|
* zero-copy method for strings generation
|
243
243
|
* put rb_raise into nice macros
|
244
|
-
* benchmarks against Python GMP and Perl GMP
|
244
|
+
* benchmarks against Python GMP (gmpy? Is this still active?) and Perl GMP (I can't
|
245
|
+
find this either!)
|
245
246
|
* dup methods
|
246
247
|
* integrate F into system
|
247
248
|
* should Z.[] bits be 0/1 or true/false, 0 is true, what might badly surprise users
|
248
|
-
* seriously investigate Ruby Makefile-making system
|
249
249
|
* any2small_integer()
|
250
250
|
* check asm output, especially local memory efficiency
|
251
251
|
* it might be better to use `register' for some local variables
|
data/ext/gmpq.c
CHANGED
data/manual.tex
CHANGED
@@ -169,7 +169,9 @@ In addition to the above three classes, there is also one constant within \textt
|
|
169
169
|
|
170
170
|
\large{\textbf{GMP::Z.new(a = 0)}}\\
|
171
171
|
\large{\textbf{GMP::Z(a = 0)}}\\
|
172
|
-
This method creates a new \texttt{GMP::Z} integer. It takes one optional argument for the
|
172
|
+
This method creates a new \texttt{GMP::Z} integer. It takes one optional argument for the
|
173
|
+
value of the integer. This argument can be one of several classes. Here are some
|
174
|
+
examples:
|
173
175
|
\begin{verbatim}
|
174
176
|
GMP::Z.new #=> 0 (default)
|
175
177
|
GMP::Z.new(1) #=> 1 (Ruby Fixnum)
|
@@ -180,4 +182,55 @@ GMP::Z.new(GMP::Z.new(31)) #=> 31 (GMP Integer)
|
|
180
182
|
|
181
183
|
There is also a convenience method available, \texttt{GMP::Z()}.\\
|
182
184
|
|
185
|
+
\subsection{Converting Integers}
|
186
|
+
|
187
|
+
\large{\textbf{integer.to\_d -> Float}}\\
|
188
|
+
Returns \texttt{integer} as an Float if \texttt{integer} fits in a Float.\\
|
189
|
+
\\
|
190
|
+
Otherwise returns the least significant part of \texttt{integer}, with the same sign as
|
191
|
+
\texttt{integer}.\\
|
192
|
+
\\
|
193
|
+
If \texttt{integer} is too big to fit in a Float, the returned result is probably not
|
194
|
+
very useful. To find out if the value will fit, use the function
|
195
|
+
\texttt{mpz\_fits\_slong\_p} (\textbf{Unimplemented}).\\
|
196
|
+
\\
|
197
|
+
\large{\textbf{integer.to\_i -> Fixnum}}\\
|
198
|
+
Returns \texttt{integer} as a Fixnum if \texttt{integer} fits in a Fixnum.\\
|
199
|
+
\\
|
200
|
+
Otherwise returns the least significant part of \texttt{integer}, with the same sign as
|
201
|
+
\texttt{integer}.\\
|
202
|
+
\\
|
203
|
+
If \texttt{integer} is too big to fit in a Fixnum, the returned result is probably not
|
204
|
+
very useful. To find out if the value will fit, use the function
|
205
|
+
\texttt{mpz\_fits\_slong\_p} (\textbf{Unimplemented}).\\
|
206
|
+
\\
|
207
|
+
\large{\textbf{integer.to\_s(base = 10) -> String}}\\
|
208
|
+
Returns \texttt{integer}, as a Ruby string. If \texttt{base} is not provided, then the
|
209
|
+
string will be the decimal representation.\\
|
210
|
+
\\
|
211
|
+
From the GMP Manual:\\
|
212
|
+
\\
|
213
|
+
Convert \texttt{integer} to a string of digits in base \texttt{base}. The \texttt{base}
|
214
|
+
argument may vary from 2 to 62 or from -2 to -36.\\
|
215
|
+
\\
|
216
|
+
For \texttt{base} in the range 2..36, digits and lower-case letters are used; for
|
217
|
+
-2..-36, digits and upper-case letters are used; for 37..62, digits, upper-case letters,
|
218
|
+
and lower-case letters (in that significance order) are used.\\
|
219
|
+
|
220
|
+
\subsection{Integer Arithmetic}
|
221
|
+
|
222
|
+
\large{\textbf{integer.add(b)}}\\
|
223
|
+
\large{\textbf{integer + b}}\\
|
224
|
+
\large{\textbf{integer.add!(b)}}\\
|
225
|
+
Adds \texttt{integer} to \texttt{b}. \texttt{add} and \texttt{+} return the result.
|
226
|
+
\texttt{add!} sets \texttt{integer} to the result. \texttt{b} can be a member of one of
|
227
|
+
the following classes:
|
228
|
+
\begin{verbatim}
|
229
|
+
GMP::Z
|
230
|
+
Fixnum
|
231
|
+
GMP::Q
|
232
|
+
GMP::F
|
233
|
+
Bignum
|
234
|
+
\end{verbatim}
|
235
|
+
|
183
236
|
\end{document}
|
data/test/README
CHANGED
@@ -22,8 +22,8 @@ Tests:
|
|
22
22
|
14* shifts, last_bits
|
23
23
|
15* logical tests, roots
|
24
24
|
16* floating point init with and without explicit precision
|
25
|
-
17
|
26
|
-
18
|
25
|
+
17* basic floating point arithmetics and coersion to F
|
26
|
+
18* default_prec and default_prec=
|
27
27
|
19 integer division methods
|
28
28
|
20 mpfr - exp and log
|
29
29
|
21 mpfr - trigonometry
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TC_F_arithmetics_coersion < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@a = GMP::F.new(3.14, 100)
|
6
|
+
@b = GMP::F.new(2.71, 200)
|
7
|
+
@c = GMP::Z(3)
|
8
|
+
@d = GMP::Q(7,2)
|
9
|
+
@e = 2**32
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_add
|
13
|
+
assert_in_delta( 5.85, @a + @b, 1e-6)
|
14
|
+
assert_in_delta( 5.85, @b + @a, 1e-6)
|
15
|
+
assert_in_delta( 6.14, @a + @c, 1e-6)
|
16
|
+
assert_in_delta( 6.14, @c + @a, 1e-6)
|
17
|
+
assert_in_delta( 6.64, @a + @d, 1e-6)
|
18
|
+
assert_in_delta( 6.64, @d + @a, 1e-6)
|
19
|
+
assert_in_delta( 5.14, @a + 2, 1e-6)
|
20
|
+
assert_in_delta( 5.14, 2 + @a, 1e-6)
|
21
|
+
assert_in_delta(4294967299.14, @a + @e, 1e-6)
|
22
|
+
assert_in_delta(4294967299.14, @e + @a, 1e-6)
|
23
|
+
assert_in_delta( 7.65, @a + 4.51, 1e-6)
|
24
|
+
assert_in_delta( 7.65, 4.51 + @a, 1e-6)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_sub
|
28
|
+
assert_in_delta( 0.43, @a - @b, 1e-6)
|
29
|
+
assert_in_delta( -0.43, @b - @a, 1e-6)
|
30
|
+
assert_in_delta( 0.14, @a - @c, 1e-6)
|
31
|
+
assert_in_delta( -0.14, @c - @a, 1e-6)
|
32
|
+
assert_in_delta( -0.36, @a - @d, 1e-6)
|
33
|
+
assert_in_delta( 0.36, @d - @a, 1e-6)
|
34
|
+
assert_in_delta( 1.14, @a - 2, 1e-6)
|
35
|
+
assert_in_delta( -1.14, 2 - @a, 1e-6)
|
36
|
+
assert_in_delta(-4294967292.86, @a - @e, 1e-6)
|
37
|
+
assert_in_delta( 4294967292.86, @e - @a, 1e-6)
|
38
|
+
assert_in_delta( -1.37, @a - 4.51, 1e-6)
|
39
|
+
assert_in_delta( 1.37, 4.51 - @a, 1e-6)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_mul
|
43
|
+
assert_in_delta( 8.5094, @a * @b, 1e-6)
|
44
|
+
assert_in_delta( 8.5094, @b * @a, 1e-6)
|
45
|
+
assert_in_delta( 9.42 , @a * @c, 1e-6)
|
46
|
+
assert_in_delta( 9.42 , @c * @a, 1e-6)
|
47
|
+
assert_in_delta( 10.99 , @a * @d, 1e-6)
|
48
|
+
assert_in_delta( 10.99 , @d * @a, 1e-6)
|
49
|
+
assert_in_delta( 6.28 , @a * 2, 1e-6)
|
50
|
+
assert_in_delta( 6.28 , 2 * @a, 1e-6)
|
51
|
+
assert_in_delta(13486197309.44 , @a * @e, 1e-6)
|
52
|
+
assert_in_delta(13486197309.44 , @e * @a, 1e-6)
|
53
|
+
assert_in_delta( 14.1614, @a * 4.51, 1e-6)
|
54
|
+
assert_in_delta( 14.1614, 4.51 * @a, 1e-6)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_div
|
58
|
+
assert_in_delta( 1.1586715867, @a / @b, 1e-6)
|
59
|
+
assert_in_delta( 0.8630573248, @b / @a, 1e-6)
|
60
|
+
assert_in_delta( 1.0466666667, @a / @c, 1e-6)
|
61
|
+
assert_in_delta( 0.9554140127, @c / @a, 1e-6)
|
62
|
+
assert_in_delta( 0.8971428571, @a / @d, 1e-6)
|
63
|
+
assert_in_delta( 1.1146496815, @d / @a, 1e-6)
|
64
|
+
assert_in_delta( 1.57 , @a / 2, 1e-6)
|
65
|
+
assert_in_delta( 0.6369426752, 2 / @a, 1e-6)
|
66
|
+
assert_in_delta( 0.0000000007, @a / @e, 1e-6)
|
67
|
+
assert_in_delta( 1367823979.6178343949, @e / @a, 1e-6)
|
68
|
+
assert_in_delta( 0.6962305987, @a / 4.51, 1e-6)
|
69
|
+
assert_in_delta( 1.4363057325, 4.51 / @a, 1e-6)
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TC_precision < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@pi = GMP::F.new(3.14)
|
6
|
+
@seven_halves = GMP::F.new(GMP::Q.new(7,2), 1000)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_default_precision
|
10
|
+
assert_equal("0.e+0", GMP::F.new().to_s)
|
11
|
+
assert_equal(64, GMP::F.new().prec)
|
12
|
+
assert_equal("0.314000000000000012434e+1", @pi.to_s)
|
13
|
+
assert_equal(64, @pi.prec)
|
14
|
+
assert_equal("0.1e+1", GMP::F.new(1).to_s)
|
15
|
+
assert_equal(64, GMP::F.new(1).prec)
|
16
|
+
assert_equal("0.314e+1", GMP::F.new("3.14").to_s)
|
17
|
+
assert_equal(64, GMP::F.new("3.14").prec)
|
18
|
+
assert_equal("0.4294967296e+10", GMP::F.new(2**32).to_s)
|
19
|
+
assert_equal(64, GMP::F.new(2**32).prec)
|
20
|
+
assert_equal("0.3e+1", GMP::F.new(GMP::Z.new(3)).to_s)
|
21
|
+
assert_equal(64, GMP::F.new(GMP::Z.new(3)).prec)
|
22
|
+
assert_equal("0.35e+1", GMP::F.new(GMP::Q.new(7,2)).to_s)
|
23
|
+
assert_equal(64, GMP::F.new(GMP::Q.new(7,2)).prec)
|
24
|
+
assert_equal("0.314000000000000012434e+1", GMP::F.new(@pi).to_s)
|
25
|
+
assert_equal(64, GMP::F.new(@pi).prec)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_specific_precision
|
29
|
+
assert_equal("0.3140000000000000124344978758017532527446746826171875e+1", GMP::F.new(3.14, 1000).to_s)
|
30
|
+
assert_equal(1024, GMP::F.new(3.14, 1000).prec)
|
31
|
+
assert_equal("0.1e+1", GMP::F.new(1, 1000).to_s)
|
32
|
+
assert_equal(1024, GMP::F.new(1, 1000).prec)
|
33
|
+
assert_equal("0.314e+1", GMP::F.new("3.14", 1000).to_s)
|
34
|
+
assert_equal(1024, GMP::F.new("3.14", 1000).prec)
|
35
|
+
assert_equal("0.4294967296e+10", GMP::F.new(2**32, 1000).to_s)
|
36
|
+
assert_equal(1024, GMP::F.new(2**32, 1000).prec)
|
37
|
+
assert_equal("0.3e+1", GMP::F.new(GMP::Z.new(3), 1000).to_s)
|
38
|
+
assert_equal(1024, GMP::F.new(GMP::Z.new(3), 1000).prec)
|
39
|
+
assert_equal("0.35e+1", @seven_halves.to_s)
|
40
|
+
assert_equal(1024, @seven_halves.prec)
|
41
|
+
assert_equal("0.35e+1", GMP::F.new(@seven_halves).to_s)
|
42
|
+
assert_equal(1024, GMP::F.new(@seven_halves).prec)
|
43
|
+
assert_equal("0.3140000000000000124344978758017532527446746826171875e+1", GMP::F.new(@pi, 1000).to_s)
|
44
|
+
assert_equal(1024, GMP::F.new(@pi, 1000).prec)
|
45
|
+
assert_equal("0.35e+1", GMP::F.new(@seven_halves, 0).to_s)
|
46
|
+
assert_equal(64, GMP::F.new(@seven_halves, 0).prec)
|
47
|
+
end
|
48
|
+
end
|
data/test/unit_tests.rb
CHANGED
@@ -16,120 +16,84 @@ require 'tc_floor_ceil_truncate'
|
|
16
16
|
require 'tc_z_to_d_to_i'
|
17
17
|
require 'tc_z_shifts_last_bits'
|
18
18
|
require 'tc_logical_roots'
|
19
|
+
require 'tc_f_precision'
|
20
|
+
require 'tc_f_arithmetics_coersion'
|
19
21
|
|
20
|
-
class
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
def test_default_precision
|
27
|
-
assert_equal("0.e+0", GMP::F.new().to_s)
|
28
|
-
assert_equal(64, GMP::F.new().prec)
|
29
|
-
assert_equal("0.314000000000000012434e+1", @pi.to_s)
|
30
|
-
assert_equal(64, @pi.prec)
|
31
|
-
assert_equal("0.1e+1", GMP::F.new(1).to_s)
|
32
|
-
assert_equal(64, GMP::F.new(1).prec)
|
33
|
-
assert_equal("0.314e+1", GMP::F.new("3.14").to_s)
|
34
|
-
assert_equal(64, GMP::F.new("3.14").prec)
|
35
|
-
assert_equal("0.4294967296e+10", GMP::F.new(2**32).to_s)
|
36
|
-
assert_equal(64, GMP::F.new(2**32).prec)
|
37
|
-
assert_equal("0.3e+1", GMP::F.new(GMP::Z.new(3)).to_s)
|
38
|
-
assert_equal(64, GMP::F.new(GMP::Z.new(3)).prec)
|
39
|
-
assert_equal("0.35e+1", GMP::F.new(GMP::Q.new(7,2)).to_s)
|
40
|
-
assert_equal(64, GMP::F.new(GMP::Q.new(7,2)).prec)
|
41
|
-
assert_equal("0.314000000000000012434e+1", GMP::F.new(@pi).to_s)
|
42
|
-
assert_equal(64, GMP::F.new(@pi).prec)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_specific_precision
|
46
|
-
assert_equal("0.3140000000000000124344978758017532527446746826171875e+1", GMP::F.new(3.14, 1000).to_s)
|
47
|
-
assert_equal(1024, GMP::F.new(3.14, 1000).prec)
|
48
|
-
assert_equal("0.1e+1", GMP::F.new(1, 1000).to_s)
|
49
|
-
assert_equal(1024, GMP::F.new(1, 1000).prec)
|
50
|
-
assert_equal("0.314e+1", GMP::F.new("3.14", 1000).to_s)
|
51
|
-
assert_equal(1024, GMP::F.new("3.14", 1000).prec)
|
52
|
-
assert_equal("0.4294967296e+10", GMP::F.new(2**32, 1000).to_s)
|
53
|
-
assert_equal(1024, GMP::F.new(2**32, 1000).prec)
|
54
|
-
assert_equal("0.3e+1", GMP::F.new(GMP::Z.new(3), 1000).to_s)
|
55
|
-
assert_equal(1024, GMP::F.new(GMP::Z.new(3), 1000).prec)
|
56
|
-
assert_equal("0.35e+1", @seven_halves.to_s)
|
57
|
-
assert_equal(1024, @seven_halves.prec)
|
58
|
-
assert_equal("0.35e+1", GMP::F.new(@seven_halves).to_s)
|
59
|
-
assert_equal(1024, GMP::F.new(@seven_halves).prec)
|
60
|
-
assert_equal("0.3140000000000000124344978758017532527446746826171875e+1", GMP::F.new(@pi, 1000).to_s)
|
61
|
-
assert_equal(1024, GMP::F.new(@pi, 1000).prec)
|
62
|
-
assert_equal("0.35e+1", GMP::F.new(@seven_halves, 0).to_s)
|
63
|
-
assert_equal(64, GMP::F.new(@seven_halves, 0).prec)
|
22
|
+
class TC_default_prec < Test::Unit::TestCase
|
23
|
+
def test_default_prec
|
24
|
+
assert_equal( 64, GMP::F.default_prec, "GMP::F.default_prec should be 64.")
|
25
|
+
GMP::F.default_prec = 100
|
26
|
+
assert_equal(128, GMP::F.default_prec, "GMP::F.default_prec should be assignable.")
|
27
|
+
GMP::F.default_prec = 64
|
64
28
|
end
|
65
29
|
end
|
66
30
|
|
67
|
-
class
|
31
|
+
class TC_division < Test::Unit::TestCase
|
68
32
|
def setup
|
69
|
-
@a = GMP::
|
70
|
-
@b = GMP::
|
71
|
-
@c = GMP::Z(
|
72
|
-
@d = GMP::Q(
|
73
|
-
@e =
|
33
|
+
@a = GMP::Z.new(5)
|
34
|
+
@b = GMP::Z.new(7)
|
35
|
+
@c = GMP::Z.new(25)
|
36
|
+
@d = GMP::Q.new(3,11)
|
37
|
+
@e = GMP::F.new(3.14)
|
38
|
+
@f = 2**32
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_z_div
|
42
|
+
assert_equal(GMP::Q, (@a / @b ).class, "GMP::Z / GMP::Z should be GMP::Q.")
|
43
|
+
assert_equal(GMP::Q, (@a / 3 ).class, "GMP::Z / Fixnum should be GMP::Q.")
|
44
|
+
assert_equal(GMP::Q, (@a / 2**32).class, "GMP::Z / Bignum should be GMP::Q.")
|
45
|
+
assert_equal(GMP::Q, (@a / @c ).class, "GMP::Z / GMP::Z should be GMP::Q.")
|
46
|
+
assert_in_delta(0.7142857142, @a / @b, 1e-7, "GMP::Z./ should work.")
|
47
|
+
assert_in_delta(1.4 , @b / @a, 1e-7, "GMP::Z./ should work.")
|
48
|
+
assert_in_delta(1.6666666667, @a / 3, 1e-7, "GMP::Z./ should work.")
|
49
|
+
assert_in_delta(0.6 , 3 / @a, 1e-7, "GMP::Z./ should work.")
|
50
|
+
assert_in_delta(0.2 , @a / @c, 1e-7, "GMP::Z./ should work.")
|
51
|
+
assert_in_delta(5.0 , @c / @a, 1e-7, "GMP::Z./ should work.")
|
74
52
|
end
|
75
53
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
assert_in_delta(4294967299.14, @e + @a, 1e-6)
|
87
|
-
assert_in_delta( 7.65, @a + 4.51, 1e-6)
|
88
|
-
assert_in_delta( 7.65, 4.51 + @a, 1e-6)
|
54
|
+
def test_z_tdiv
|
55
|
+
assert_equal(GMP::Z, @a.tdiv(@b).class, "GMP::Z.tdiv GMP::Z should be GMP::Z.")
|
56
|
+
assert_equal(GMP::Z, @a.tdiv(3).class, "GMP::Z.tdiv Fixnum should be GMP::Z.")
|
57
|
+
assert_equal(GMP::Z, @a.tdiv(2**32).class, "GMP::Z.tdiv Bignum should be GMP::Z.")
|
58
|
+
assert_equal(GMP::Z, @a.tdiv(@c).class, "GMP::Z.tdiv GMP::Z should be GMP::Z.")
|
59
|
+
assert_equal(0, @a.tdiv(@b), "GMP::Z.tdiv should work.")
|
60
|
+
assert_equal(1, @b.tdiv(@a), "GMP::Z.tdiv should work.")
|
61
|
+
assert_equal(1, @a.tdiv( 3), "GMP::Z.tdiv should work.")
|
62
|
+
assert_equal(0, @a.tdiv(@c), "GMP::Z.tdiv should work.")
|
63
|
+
assert_equal(5, @c.tdiv(@a), "GMP::Z.tdiv should work.")
|
89
64
|
end
|
90
65
|
|
91
|
-
def
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
assert_in_delta(-4294967292.86, @a - @e, 1e-6)
|
101
|
-
assert_in_delta( 4294967292.86, @e - @a, 1e-6)
|
102
|
-
assert_in_delta( -1.37, @a - 4.51, 1e-6)
|
103
|
-
assert_in_delta( 1.37, 4.51 - @a, 1e-6)
|
66
|
+
def test_z_fdiv
|
67
|
+
assert_equal(GMP::Z, @a.fdiv(@b).class, "GMP::Z.fdiv GMP::Z should be GMP::Z.")
|
68
|
+
assert_equal(GMP::Z, @a.fdiv(3).class, "GMP::Z.fdiv Fixnum should be GMP::Z.")
|
69
|
+
assert_equal(GMP::Z, @a.fdiv(2**32).class, "GMP::Z.fdiv Bignum should be GMP::Z.")
|
70
|
+
assert_equal(0, @a.fdiv(@b), "GMP::Z.fdiv should work.")
|
71
|
+
assert_equal(1, @b.fdiv(@a), "GMP::Z.fdiv should work.")
|
72
|
+
assert_equal(1, @a.fdiv( 3), "GMP::Z.fdiv should work.")
|
73
|
+
assert_equal(0, @a.fdiv(@c), "GMP::Z.fdiv should work.")
|
74
|
+
assert_equal(5, @c.fdiv(@a), "GMP::Z.fdiv should work.")
|
104
75
|
end
|
105
76
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
assert_in_delta(13486197309.44 , @a * @e, 1e-6)
|
116
|
-
assert_in_delta(13486197309.44 , @e * @a, 1e-6)
|
117
|
-
assert_in_delta( 14.1614, @a * 4.51, 1e-6)
|
118
|
-
assert_in_delta( 14.1614, 4.51 * @a, 1e-6)
|
77
|
+
def test_z_cdiv
|
78
|
+
assert_equal(GMP::Z, @a.cdiv(@b).class, "GMP::Z.cdiv GMP::Z should be GMP::Z.")
|
79
|
+
assert_equal(GMP::Z, @a.cdiv(3).class, "GMP::Z.cdiv Fixnum should be GMP::Z.")
|
80
|
+
assert_equal(GMP::Z, @a.cdiv(2**32).class, "GMP::Z.cdiv Bignum should be GMP::Z.")
|
81
|
+
assert_equal(1, @a.cdiv(@b), "GMP::Z.cdiv should work.")
|
82
|
+
assert_equal(2, @b.cdiv(@a), "GMP::Z.cdiv should work.")
|
83
|
+
assert_equal(2, @a.cdiv( 3), "GMP::Z.cdiv should work.")
|
84
|
+
assert_equal(1, @a.cdiv(@c), "GMP::Z.cdiv should work.")
|
85
|
+
assert_equal(5, @c.cdiv(@a), "GMP::Z.cdiv should work.")
|
119
86
|
end
|
120
87
|
|
121
|
-
def
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
assert_in_delta( 1367823979.6178343949, @e / @a, 1e-6)
|
132
|
-
assert_in_delta( 0.6962305987, @a / 4.51, 1e-6)
|
133
|
-
assert_in_delta( 1.4363057325, 4.51 / @a, 1e-6)
|
88
|
+
def test_z_tmod
|
89
|
+
assert_equal(GMP::Z, @a.tmod(@b).class, "GMP::Z.tmod GMP::Z should be GMP::Z.")
|
90
|
+
assert_equal(GMP::Z, @a.tmod(3).class, "GMP::Z.tmod Fixnum should be GMP::Z.")
|
91
|
+
assert_equal(GMP::Z, @a.tmod(2**32).class, "GMP::Z.tmod Bignum should be GMP::Z.")
|
92
|
+
assert_equal(GMP::Z, @a.tmod(@c).class, "GMP::Z.tmod GMP::Z should be GMP::Z.")
|
93
|
+
assert_equal(5, @a.tmod(@b), "GMP::Z.tmod should work.")
|
94
|
+
assert_equal(2, @b.tmod(@a), "GMP::Z.tmod should work.")
|
95
|
+
assert_equal(2, @a.tmod( 3), "GMP::Z.tmod should work.")
|
96
|
+
assert_equal(5, @a.tmod(@c), "GMP::Z.tmod should work.")
|
97
|
+
assert_equal(0, @c.tmod(@a), "GMP::Z.tmod should work.")
|
134
98
|
end
|
135
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomasz Wegrzanowski
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-10-
|
13
|
+
date: 2009-10-20 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -37,6 +37,8 @@ files:
|
|
37
37
|
- ext/takeover.h
|
38
38
|
- test/README
|
39
39
|
- test/tc_cmp.rb
|
40
|
+
- test/tc_f_precision.rb
|
41
|
+
- test/tc_f_arithmetics_coersion.rb
|
40
42
|
- test/tc_fib_fac_nextprime.rb
|
41
43
|
- test/tc_floor_ceil_truncate.rb
|
42
44
|
- test/tc_logical_roots.rb
|
@@ -58,7 +60,7 @@ files:
|
|
58
60
|
- README.rdoc
|
59
61
|
- manual.tex
|
60
62
|
has_rdoc: false
|
61
|
-
homepage: http://github.com/srawlins/gmp
|
63
|
+
homepage: http://github.com/srawlins/gmp
|
62
64
|
licenses: []
|
63
65
|
|
64
66
|
post_install_message:
|