gnu_mpc 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING.md +13 -0
- data/Gemfile +17 -0
- data/Guardfile +18 -0
- data/Makefile +12 -0
- data/README.md +47 -0
- data/Rakefile +54 -0
- data/ext/extconf.rb +46 -0
- data/ext/mpc.c +1010 -0
- data/ext/mpcrnd.c +194 -0
- data/ext/ruby_gmp.h +343 -0
- data/ext/ruby_mpc.h +63 -0
- data/lib/mpc.rb +30 -0
- data/manual.md +933 -0
- data/manual.pdf +0 -0
- data/manual_template.latex +177 -0
- data/spec/acos_spec.rb +66 -0
- data/spec/add_args_spec.rb +51 -0
- data/spec/add_fr_spec.rb +54 -0
- data/spec/add_spec.rb +32 -0
- data/spec/asin_spec.rb +66 -0
- data/spec/atan_spec.rb +109 -0
- data/spec/conj_spec.rb +56 -0
- data/spec/cos_spec.rb +54 -0
- data/spec/cosh_spec.rb +26 -0
- data/spec/exp_spec.rb +62 -0
- data/spec/hash_arguments_spec.rb +17 -0
- data/spec/log_spec.rb +37 -0
- data/spec/mpc_single_function_args_spec.rb +41 -0
- data/spec/neg_spec.rb +30 -0
- data/spec/new_spec.rb +97 -0
- data/spec/proj_spec.rb +20 -0
- data/spec/real_spec.rb +23 -0
- data/spec/rounding_spec.rb +199 -0
- data/spec/sin_spec.rb +66 -0
- data/spec/sinh_spec.rb +65 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/sqr_spec.rb +96 -0
- data/spec/sqrt_spec.rb +72 -0
- data/spec/sub_spec.rb +50 -0
- data/spec/tan_spec.rb +55 -0
- data/spec/tanh_spec.rb +53 -0
- data/spec/to_s_spec.rb +77 -0
- data/spec/version_spec.rb +7 -0
- metadata +91 -0
data/spec/atan_spec.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/atan.dat
|
4
|
+
describe MPC, '#atan' do
|
5
|
+
it 'should calculate the inverse tangent of a pure real argument' do
|
6
|
+
data = [
|
7
|
+
[["-0x16DCC57BB565FDp-52", 53, 16], [0], MPC.new([GMP::F(-7 ), -GMP::F(0)])],
|
8
|
+
[["-0x1F730BD281F69Bp-53", 53, 16], [0], MPC.new([GMP::F(-1.5 ), -GMP::F(0)])],
|
9
|
+
[["-0x1921FB54442D18p-53", 53, 16], [0], MPC.new([GMP::F(-1 ), -GMP::F(0)])],
|
10
|
+
[["-0x1700A7C5784634p-53", 53, 16], [0], MPC.new([GMP::F(-0.875), -GMP::F(0)])],
|
11
|
+
[["-0x1FD5BA9AAC2F6Ep-56", 53, 16], [0], MPC.new([GMP::F(-0.125), -GMP::F(0)])],
|
12
|
+
[[ "0x1FD5BA9AAC2F6Ep-56", 53, 16], [0], MPC.new([GMP::F( 0.125), -GMP::F(0)])],
|
13
|
+
[[ "0x1700A7C5784634p-53", 53, 16], [0], MPC.new([GMP::F( 0.875), -GMP::F(0)])],
|
14
|
+
[[ "0x1921FB54442D18p-53", 53, 16], [0], MPC.new([GMP::F( 1 ), -GMP::F(0)])],
|
15
|
+
[[ "0x1F730BD281F69Bp-53", 53, 16], [0], MPC.new([GMP::F( 1.5 ), -GMP::F(0)])],
|
16
|
+
[[ "0x16DCC57BB565FDp-52", 53, 16], [0], MPC.new([GMP::F( 7 ), -GMP::F(0)])]
|
17
|
+
]
|
18
|
+
data.each do |expected_real, expected_imag, input|
|
19
|
+
actual = input.atan
|
20
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
21
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should calculate the inverse tangent of a pure imaginary argument' do
|
26
|
+
data = [
|
27
|
+
[["-0x1921FB54442D18p-52", 53, 16], ["-0x1269621134DB92p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F(-7 )])],
|
28
|
+
[[ "0x1921FB54442D18p-52", 53, 16], ["-0x1269621134DB92p-55", 53, 16], MPC.new([ GMP::F(0), GMP::F(-7 )])],
|
29
|
+
[["-0x1921FB54442D18p-52", 53, 16], ["-0x19C041F7ED8D33p-53", 53, 16], MPC.new([-GMP::F(0), GMP::F(-1.5 )])],
|
30
|
+
[[ "0x1921FB54442D18p-52", 53, 16], ["-0x19C041F7ED8D33p-53", 53, 16], MPC.new([ GMP::F(0), GMP::F(-1.5 )])],
|
31
|
+
[[0], ["-0x15AA16394D481Fp-52", 53, 16], MPC.new([-GMP::F(0), GMP::F(-0.875)])],
|
32
|
+
[[0], ["-0x1015891C9EAEF7p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F(-0.125)])],
|
33
|
+
[[0], [ "0x1015891C9EAEF7p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F( 0.125)])],
|
34
|
+
[[0], [ "0x15AA16394D481Fp-52", 53, 16], MPC.new([-GMP::F(0), GMP::F( 0.875)])],
|
35
|
+
[[ "0x1921FB54442D18p-52", 53, 16], [ "0x19C041F7ED8D33p-53", 53, 16], MPC.new([ GMP::F(0), GMP::F( 1.5 )])],
|
36
|
+
[["-0x1921FB54442D18p-52", 53, 16], [ "0x19C041F7ED8D33p-53", 53, 16], MPC.new([-GMP::F(0), GMP::F( 1.5 )])],
|
37
|
+
[[ "0x1921FB54442D18p-52", 53, 16], [ "0x1269621134DB92p-55", 53, 16], MPC.new([ GMP::F(0), GMP::F( 7 )])],
|
38
|
+
[["-0x1921FB54442D18p-52", 53, 16], [ "0x1269621134DB92p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F( 7 )])],
|
39
|
+
[[0], [ "0x1FFFFFFFFFFF82p-52", 53, 16], MPC.new([ GMP::F(0), GMP::F("0x1ED9505E1BC3C2p-53", 53, 16)])]
|
40
|
+
]
|
41
|
+
data.each do |expected_real, expected_imag, input|
|
42
|
+
actual = input.atan
|
43
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
44
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should calculate the inverse tangent of a pure imaginary argument, 512 precision' do
|
49
|
+
input = MPC.new([
|
50
|
+
GMP::F(0, 512),
|
51
|
+
GMP::F("0x1018734E311AB77B710F9212969B3C86E8F388BB7DA5BAF74ADE078F43D96456D088C8A0B2A370159DFB8D4A4BC51BCDA91F2DCD01B2EC610C62AA33FAD1688p-504", 512, 16)
|
52
|
+
], 512)
|
53
|
+
actual = input.atan(MPC::MPC_RNDNZ, 512, 512)
|
54
|
+
actual.real.should eq GMP::F.new("0x6487ED5110B4611A62633145C06E0E68948127044533E63A0105DF531D89CD9128A5043CC71A026EF7CA8CD9E69D218D98158536F92F8A1BA7F09AB6B6A8E123p-510", 512, 16)
|
55
|
+
actual.imag.should eq GMP::F.new("0x5D137113B914461DA3202D77346EE4980DA5FD0BAD68F5A7928DCA9F632750D9BFFA00654C523929F15DED554EC6BC476DB2C46FA433E569227085E0BDEA86FFp-509", 512, 16)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should calculate the inverse tangent of a pure imaginary argument, 12 precision' do
|
59
|
+
input = MPC.new([
|
60
|
+
GMP::F(0, 12),
|
61
|
+
GMP::F("0x9380000000", 12, 16)
|
62
|
+
], 12)
|
63
|
+
actual = input.atan
|
64
|
+
actual.real.should eq GMP::F.new("0xC91p-11", 12, 16)
|
65
|
+
actual.imag.should eq GMP::F.new("0x6F1p-50", 12, 16)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should calculate the inverse tangent of a general inputs' do
|
69
|
+
data = [
|
70
|
+
[["0x91EA521228BFC46ACAp-118", 72, 16], ["-0x9E96A01DBAD6470974p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], ["-0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDUN],
|
71
|
+
[["0x91EA521228BFC46AC9p-118", 72, 16], ["-0x9E96A01DBAD6470974p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], ["-0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDDD],
|
72
|
+
[["0x91EA521228BFC46AC9p-118", 72, 16], ["-0x9E96A01DBAD6470973p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], ["-0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDDU],
|
73
|
+
[["0x91EA521228BFC46ACAp-118", 72, 16], [ "0x9E96A01DBAD6470974p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], [ "0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDUN],
|
74
|
+
[["0x91EA521228BFC46AC9p-118", 72, 16], [ "0x9E96A01DBAD6470974p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], [ "0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDDU],
|
75
|
+
[["0x91EA521228BFC46AC9p-118", 72, 16], [ "0x9E96A01DBAD6470973p-73", 72, 16], ["0x84C3E02A5C6DEE8410p-118", 72, 16], [ "0x99B43C52A95A21C220p-73", 72, 16], MPC::MPC_RNDDD],
|
76
|
+
]
|
77
|
+
data.each do |expected_real, expected_imag, input_real, input_imag, rounding_mode|
|
78
|
+
actual = MPC.new([GMP::F(*input_real), GMP::F(*input_imag)], 72).atan(rounding_mode)
|
79
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
80
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should calculate the inverse tangent of a general inputs, 156 precision' do
|
85
|
+
input = MPC.new([
|
86
|
+
GMP::F("-0xF0CE58073F866A53F25DB85DE8D503FBDD81051p-109", 156, 16),
|
87
|
+
GMP::F( "0xCF81D7C76BB9754A52056CB0F144B0C6700CC8Cp-128", 156, 16)
|
88
|
+
], 156)
|
89
|
+
actual = input.atan
|
90
|
+
actual.real.should eq GMP::F.new("-0xC90FDAA22167B20DB08A0C3B1FF415CABE49624p-155", 156, 16)
|
91
|
+
actual.imag.should eq GMP::F.new("0xEA84E971BD52E49CCEE036E303D5ECB2D9D9B9Ap-222", 156, 16)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should calculate the inverse tangent of a general inputs, 2 precision' do
|
95
|
+
actual = MPC.new([GMP::F("0x1p-7", 2, 16), GMP::F(-1, 2, 16)], 2).atan
|
96
|
+
actual.real.should eq GMP::F.new( 0.75, 2, 16)
|
97
|
+
actual.imag.should eq GMP::F.new(-3, 2, 16)
|
98
|
+
|
99
|
+
actual = MPC.new([GMP::F("0x1p-7", 2, 16), GMP::F(1, 2, 16)], 2).atan
|
100
|
+
actual.real.should eq GMP::F.new( 0.75, 2, 16)
|
101
|
+
actual.imag.should eq GMP::F.new( 3, 2, 16)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should calculate the inverse tangent: "improve test coverage"' do
|
105
|
+
actual = MPC.new([GMP::F("-0xa.529626a89a1960@23", 57, 16), GMP::F("-0x3.9a5472b5709e74@14", 57, 16)], 57).atan
|
106
|
+
actual.real.should eq GMP::F.new("-0x1.921fb54442d184", 57, 16)
|
107
|
+
actual.imag.should eq GMP::F.new("-0x8.a7e33db93ecf18@-34", 57, 16)
|
108
|
+
end
|
109
|
+
end
|
data/spec/conj_spec.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/conj.dat
|
4
|
+
describe MPC, '#conj' do
|
5
|
+
it 'should calculate the conjugate of a pure real number' do
|
6
|
+
data = [
|
7
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 2], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 17)]), MPC::MPC_RNDNN],
|
8
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 3], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 16)]), MPC::MPC_RNDZN],
|
9
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 4], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 15)]), MPC::MPC_RNDUN],
|
10
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 5], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 14)]), MPC::MPC_RNDDN],
|
11
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 6], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 13)]), MPC::MPC_RNDZZ],
|
12
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 7], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 12)]), MPC::MPC_RNDUZ],
|
13
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 8], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 11)]), MPC::MPC_RNDDZ],
|
14
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 9], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 10)]), MPC::MPC_RNDNZ],
|
15
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 10], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 9)]), MPC::MPC_RNDUU],
|
16
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 11], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 8)]), MPC::MPC_RNDDU],
|
17
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 12], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 7)]), MPC::MPC_RNDNU],
|
18
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 13], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 6)]), MPC::MPC_RNDZU],
|
19
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 14], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 5)]), MPC::MPC_RNDDD],
|
20
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 15], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 4)]), MPC::MPC_RNDND],
|
21
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 16], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 3)]), MPC::MPC_RNDZD],
|
22
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 17], MPC.new([GMP::F("-0x123456789abcdep+52", 53, 16), GMP::F(0, 2)]), MPC::MPC_RNDUD],
|
23
|
+
]
|
24
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
25
|
+
actual = input.conj(rounding_mode)
|
26
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
27
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should calculate the conjugate of a pure imaginary argument' do
|
32
|
+
data = [
|
33
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 53), GMP::F( "0x123456789abcdep+52", 53, 16)]), MPC::MPC_RNDNN],
|
34
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 51), GMP::F( "0x123456789abcdep+52", 54, 16)]), MPC::MPC_RNDZN],
|
35
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 49), GMP::F("-0x123456789abcdep+52", 55, 16)]), MPC::MPC_RNDUN],
|
36
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 47), GMP::F("-0x123456789abcdep+52", 56, 16)]), MPC::MPC_RNDUN],
|
37
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 45), GMP::F( "0x123456789abcdep+52", 57, 16)]), MPC::MPC_RNDZZ],
|
38
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 43), GMP::F( "0x123456789abcdep+52", 58, 16)]), MPC::MPC_RNDUZ],
|
39
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 41), GMP::F("-0x123456789abcdep+52", 59, 16)]), MPC::MPC_RNDDZ],
|
40
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 39), GMP::F("-0x123456789abcdep+52", 60, 16)]), MPC::MPC_RNDNZ],
|
41
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 37), GMP::F( "0x123456789abcdep+52", 61, 16)]), MPC::MPC_RNDUU],
|
42
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 35), GMP::F( "0x123456789abcdep+52", 62, 16)]), MPC::MPC_RNDDU],
|
43
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 33), GMP::F("-0x123456789abcdep+52", 63, 16)]), MPC::MPC_RNDNU],
|
44
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 31), GMP::F("-0x123456789abcdep+52", 64, 16)]), MPC::MPC_RNDZU],
|
45
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 29), GMP::F( "0x123456789abcdep+52", 65, 16)]), MPC::MPC_RNDDD],
|
46
|
+
[[0, 53], ["-0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 27), GMP::F( "0x123456789abcdep+52", 66, 16)]), MPC::MPC_RNDND],
|
47
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 25), GMP::F("-0x123456789abcdep+52", 67, 16)]), MPC::MPC_RNDZD],
|
48
|
+
[[0, 53], [ "0x123456789abcdep+52", 53, 16], MPC.new([GMP::F(0, 23), GMP::F("-0x123456789abcdep+52", 68, 16)]), MPC::MPC_RNDUD]
|
49
|
+
]
|
50
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
51
|
+
actual = input.conj(rounding_mode)
|
52
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
53
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/cos_spec.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/cos.dat
|
4
|
+
describe MPC, '#cos' do
|
5
|
+
it 'should calculate the cosine of a pure real argument' do
|
6
|
+
data = [
|
7
|
+
["0x8a51407da8344p-52", MPC.new([GMP::F(-1, 7), GMP::F(0, 7)])],
|
8
|
+
["0x8a51407da8344p-52", MPC.new([GMP::F( 1, 7), GMP::F(0, 7)])]
|
9
|
+
]
|
10
|
+
data.each do |expected, input|
|
11
|
+
actual = input.cos(MPC::MPC_RNDNN, 50, 50)
|
12
|
+
actual.real.should eq GMP::F.new(expected, 50, 16)
|
13
|
+
actual.imag.should eq GMP::F(0)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should calculate the cosine of a pure imaginary argument' do
|
18
|
+
data = [
|
19
|
+
["0x18b07551d9f55p-48", MPC.new([GMP::F(0, 7), GMP::F(-1, 7)])],
|
20
|
+
["0x18b07551d9f55p-48", MPC.new([GMP::F(0, 7), GMP::F( 1, 7)])]
|
21
|
+
]
|
22
|
+
data.each do |expected, input|
|
23
|
+
actual = input.cos(MPC::MPC_RNDNN, 50, 50)
|
24
|
+
actual.real.should eq GMP::F.new(expected, 50, 16)
|
25
|
+
actual.imag.should eq GMP::F(0)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should calculate the cosine of an argument with +1 and -1' do
|
30
|
+
data = [
|
31
|
+
["0xd56f54b7a1accp-52", "-0xfd28666957478p-52", MPC.new([GMP::F(-1, 7), GMP::F(-1, 7)])],
|
32
|
+
["0xd56f54b7a1accp-52", "0xfd28666957478p-52", MPC.new([GMP::F(-1, 7), GMP::F( 1, 7)])],
|
33
|
+
["0xd56f54b7a1accp-52", "0xfd28666957478p-52", MPC.new([GMP::F( 1, 7), GMP::F(-1, 7)])],
|
34
|
+
["0xd56f54b7a1accp-52", "-0xfd28666957478p-52", MPC.new([GMP::F( 1, 7), GMP::F( 1, 7)])]
|
35
|
+
]
|
36
|
+
data.each do |expected_real, expected_imag, input|
|
37
|
+
actual = input.cos(MPC::MPC_RNDNN, 50, 50)
|
38
|
+
actual.real.should eq GMP::F.new(expected_real, 50, 16)
|
39
|
+
actual.imag.should eq GMP::F.new(expected_imag, 50, 16)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should calculate the cosine of ieee-754 double precision numbers' do
|
44
|
+
data = [
|
45
|
+
[[514], [0], [0], ["0x1BBDD1808C59A3p-50", 53, 16], MPC::MPC_RNDNN],
|
46
|
+
[["0x100FFFFFFFFFFFp-43", 53, 16], [0], [0], ["0x1BBDD1808C59A3p-50", 53, 16], MPC::MPC_RNDDD],
|
47
|
+
]
|
48
|
+
data.each do |expected_real, expected_imag, input_real, input_imag, rounding_mode|
|
49
|
+
actual = MPC.new([GMP::F.new(*input_real), GMP::F.new(*input_imag)]).cos(rounding_mode)
|
50
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
51
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/cosh_spec.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/cosh.dat
|
4
|
+
describe MPC, '#cosh' do
|
5
|
+
it 'should calculate the hyperbolic cosine of special values' do
|
6
|
+
data = [
|
7
|
+
[1, MPC.new([GMP::F(0, 2), GMP::F(0, 2)])]
|
8
|
+
]
|
9
|
+
data.each do |expected, input|
|
10
|
+
actual = input.cosh(MPC::MPC_RNDNN, 2, 2)
|
11
|
+
actual.real.should eq GMP::F.new(expected, 2)
|
12
|
+
actual.imag.should eq GMP::F(0)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should calculate the hyperbolic sine of ieee-754 double precision numbers' do
|
17
|
+
data = [
|
18
|
+
[["0x10000000000001p-53", 53, 16], ["0x10000000000001p-52", 53, 16], ["0x1DA2E1BD2C9EBCp-53", 53, 16], ["0x138AADEA15829Fp-52", 53, 16], MPC::MPC_RNDNN],
|
19
|
+
]
|
20
|
+
data.each do |expected_real, expected_imag, input_real, input_imag, rounding_mode|
|
21
|
+
actual = MPC.new([GMP::F.new(*input_real), GMP::F.new(*input_imag)]).cosh(rounding_mode)
|
22
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
23
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/exp_spec.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/exp.dat
|
4
|
+
describe MPC, '#exp' do
|
5
|
+
it 'should calculate the exponential of a pure real number' do
|
6
|
+
data = [
|
7
|
+
[["0x1936dc5690c08fp-44", 53, 16], [ 0, 2], MPC.new([GMP::F( 6, 53), GMP::F(0, 17)]), MPC::MPC_RNDNN],
|
8
|
+
[["0x4b0556e084f3d0p-60", 53, 16], [ 0, 3], MPC.new([GMP::F(-4, 54), GMP::F(0, 16)]), MPC::MPC_RNDZN],
|
9
|
+
[["0xec7325c6a6ed70p-53", 53, 16], [ 0, 4], MPC.new([GMP::F( 2, 55), GMP::F(0, 15)]), MPC::MPC_RNDUN],
|
10
|
+
[["0x178b56362cef37p-54", 53, 16], [ 0, 5], MPC.new([GMP::F(-1, 56), GMP::F(0, 14)]), MPC::MPC_RNDDN],
|
11
|
+
[["0x3699205c4e74b0p-48", 53, 16], [ 0, 6], MPC.new([GMP::F( 4, 57), GMP::F(0, 13)]), MPC::MPC_RNDZZ],
|
12
|
+
[["0x454aaa8efe0730p-57", 53, 16], [ 0, 7], MPC.new([GMP::F(-2, 58), GMP::F(0, 12)]), MPC::MPC_RNDUZ],
|
13
|
+
[["0x15bf0a8b145769p-51", 53, 16], [ 0, 8], MPC.new([GMP::F( 1, 59), GMP::F(0, 11)]), MPC::MPC_RNDDZ],
|
14
|
+
[["0xa2728f889ea6b0p-64", 53, 16], [ 0, 9], MPC.new([GMP::F(-6, 60), GMP::F(0, 10)]), MPC::MPC_RNDNZ],
|
15
|
+
[["0xec7325c6a6ed70p-53", 53, 16], [ 0, 10], MPC.new([GMP::F( 2, 61), GMP::F(0, 9)]), MPC::MPC_RNDUU],
|
16
|
+
[["0x178b56362cef37p-54", 53, 16], [ 0, 11], MPC.new([GMP::F(-1, 62), GMP::F(0, 8)]), MPC::MPC_RNDDU],
|
17
|
+
[["0x1936dc5690c08fp-44", 53, 16], [ 0, 12], MPC.new([GMP::F( 6, 63), GMP::F(0, 7)]), MPC::MPC_RNDNU],
|
18
|
+
[["0x4b0556e084f3d0p-60", 53, 16], [ 0, 13], MPC.new([GMP::F(-4, 64), GMP::F(0, 6)]), MPC::MPC_RNDZU],
|
19
|
+
[["0x15bf0a8b145769p-51", 53, 16], [ 0, 14], MPC.new([GMP::F( 1, 65), GMP::F(0, 5)]), MPC::MPC_RNDDD],
|
20
|
+
[["0xa2728f889ea6b0p-64", 53, 16], [ 0, 15], MPC.new([GMP::F(-6, 66), GMP::F(0, 4)]), MPC::MPC_RNDND],
|
21
|
+
[["0x3699205c4e74b0p-48", 53, 16], [ 0, 16], MPC.new([GMP::F( 4, 66), GMP::F(0, 3)]), MPC::MPC_RNDZD],
|
22
|
+
[["0x454aaa8efe0730p-57", 53, 16], [ 0, 17], MPC.new([GMP::F(-2, 66), GMP::F(0, 2)]), MPC::MPC_RNDUD]
|
23
|
+
]
|
24
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
25
|
+
actual = input.exp(rounding_mode)
|
26
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
27
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should calculate the exponential of a pure imaginary number' do
|
32
|
+
data = [
|
33
|
+
[[ "0x1eb9b7097822f5p-53", 53, 16], ["-0x4787c62ac28b0p-52", 53, 16], MPC.new([GMP::F(0,53), GMP::F( 6, 53)]), MPC::MPC_RNDNN],
|
34
|
+
[["-0x53aa981b6c9300p-55", 53, 16], ["-0xc1bdceeee0f57p-52", 53, 16], MPC.new([GMP::F(0,51), GMP::F( 4, 54)]), MPC::MPC_RNDZN],
|
35
|
+
[["-0x6a88995d4dc810p-56", 53, 16], ["-0xe8c7b7568da23p-52", 53, 16], MPC.new([GMP::F(0,49), GMP::F(-2, 55)]), MPC::MPC_RNDUN],
|
36
|
+
[[ "0x114a280fb5068bp-53", 53, 16], ["-0xd76aa47848677p-52", 53, 16], MPC.new([GMP::F(0,47), GMP::F(-1, 56)]), MPC::MPC_RNDDN],
|
37
|
+
[["-0x53aa981b6c9300p-55", 53, 16], ["-0xc1bdceeee0f57p-52", 53, 16], MPC.new([GMP::F(0,45), GMP::F( 4, 57)]), MPC::MPC_RNDZZ],
|
38
|
+
[["-0x6a88995d4dc810p-56", 53, 16], [ "0x1d18f6ead1b445p-53", 53, 16], MPC.new([GMP::F(0,43), GMP::F( 2, 58)]), MPC::MPC_RNDUZ],
|
39
|
+
[[ "0x114a280fb5068bp-53", 53, 16], ["-0xd76aa47848677p-52", 53, 16], MPC.new([GMP::F(0,41), GMP::F(-1, 59)]), MPC::MPC_RNDDZ],
|
40
|
+
[[ "0x1eb9b7097822f5p-53", 53, 16], [ "0x4787c62ac28b0p-52", 53, 16], MPC.new([GMP::F(0,39), GMP::F(-6, 60)]), MPC::MPC_RNDNZ],
|
41
|
+
[["-0x6a88995d4dc810p-56", 53, 16], [ "0xe8c7b7568da23p-52", 53, 16], MPC.new([GMP::F(0,37), GMP::F( 2, 61)]), MPC::MPC_RNDUU],
|
42
|
+
[[ "0x114a280fb5068bp-53", 53, 16], [ "0x1aed548f090cefp-53", 53, 16], MPC.new([GMP::F(0,35), GMP::F( 1, 62)]), MPC::MPC_RNDDU],
|
43
|
+
[[ "0x1eb9b7097822f5p-53", 53, 16], [ "0x11e1f18ab0a2c1p-54", 53, 16], MPC.new([GMP::F(0,33), GMP::F(-6, 63)]), MPC::MPC_RNDNU],
|
44
|
+
[["-0x53aa981b6c9300p-55", 53, 16], [ "0x1837b9dddc1eafp-53", 53, 16], MPC.new([GMP::F(0,31), GMP::F(-4, 64)]), MPC::MPC_RNDZU],
|
45
|
+
[[ "0x114a280fb5068bp-53", 53, 16], [ "0xd76aa47848677p-52", 53, 16], MPC.new([GMP::F(0,29), GMP::F( 1, 65)]), MPC::MPC_RNDDD],
|
46
|
+
[[ "0x1eb9b7097822f5p-53", 53, 16], ["-0x11e1f18ab0a2c1p-54", 53, 16], MPC.new([GMP::F(0,27), GMP::F( 6, 66)]), MPC::MPC_RNDND],
|
47
|
+
[["-0x53aa981b6c9300p-55", 53, 16], [ "0xc1bdceeee0f57p-52", 53, 16], MPC.new([GMP::F(0,25), GMP::F(-4, 67)]), MPC::MPC_RNDZD],
|
48
|
+
[["-0x6a88995d4dc810p-56", 53, 16], ["-0xe8c7b7568da23p-52", 53, 16], MPC.new([GMP::F(0,23), GMP::F(-2, 68)]), MPC::MPC_RNDUD]
|
49
|
+
]
|
50
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
51
|
+
actual = input.exp(rounding_mode)
|
52
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
53
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should calculate the exponential of input close to zero' do
|
58
|
+
actual = MPC.new([GMP::F("0x1E02AE0D0F6Fp-7213521", 53, 16), GMP::F("0x5D7A2148071Fp-7213522", 53, 16)]).exp(MPC::MPC_RNDNN)
|
59
|
+
actual.real.should eq GMP::F(1)
|
60
|
+
actual.imag.should eq GMP::F("0x5D7A2148071Fp-7213522", 53, 16)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
describe MPC, "methods with optional hash arguments" do
|
4
|
+
before do
|
5
|
+
#@z_sqr = MPC.new([GMP::F("0x10000000020000p+04", 53, 16), GMP::F("0x10000000effff", 53, 16)])
|
6
|
+
#@z = MPC.new([GMP::F("0x400008000180fp-22", 53, 16), GMP::F("0x7ffff0077efcbp-32", 53, 16)])
|
7
|
+
@z_sqr = MPC.new([GMP::F("-0x10000000020000p+04", 53, 16), GMP::F("0x10000000efffefp-04", 53, 16)])
|
8
|
+
@z = MPC.new([GMP::F("0x7ffff0077efcbp-32", 53, 16), GMP::F("0x400008000180fp-22", 53, 16)])
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allow #sqr to accept :rounding_mode hash argument" do
|
12
|
+
@z.sqr(:rounding_mode => MPC::MPC_RNDZZ).should eq @z_sqr
|
13
|
+
@z.sqr(:rounding => MPC::MPC_RNDZZ).should eq @z_sqr
|
14
|
+
@z.sqr(:round => MPC::MPC_RNDZZ).should eq @z_sqr
|
15
|
+
@z.sqr(:rnd => MPC::MPC_RNDZZ).should eq @z_sqr
|
16
|
+
end
|
17
|
+
end
|
data/spec/log_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/log.dat
|
4
|
+
describe MPC, '#log' do
|
5
|
+
it 'should calculate the logarithm of 1 + 0i' do
|
6
|
+
actual = MPC.new([1, 0]).log
|
7
|
+
actual.real.should eq 0
|
8
|
+
actual.imag.should eq 0
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should calculate the logarithm of -1 + 0i' do
|
12
|
+
actual = MPC.new([-1, 0]).log
|
13
|
+
actual.real.should eq 0
|
14
|
+
actual.imag.should eq GMP::F("0x3243F6A8885A3p-48", 53, 16)
|
15
|
+
|
16
|
+
actual = MPC.new([GMP::F(-1), -GMP::F(0)]).log
|
17
|
+
actual.real.should eq 0
|
18
|
+
actual.imag.should eq GMP::F("-0x3243F6A8885A3p-48", 53, 16)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should calculate the logarithm of x +i*y with either x or y zero and the other non-zero' do
|
22
|
+
data = [
|
23
|
+
[["0xB5535E0FD3FBDp-50", 53, 16], [ 0, 2], MPC.new([GMP::F( "0x11", 5, 16), GMP::F(0, 2)]), MPC::MPC_RNDNN],
|
24
|
+
[["0xB5535E0FD3FBDp-50", 53, 16], [ "0x3243F6A8885A3p-49", 53, 16], MPC.new([GMP::F(0, 2), GMP::F( "0x11", 5, 16)]), MPC::MPC_RNDNN],
|
25
|
+
[["0x5E38D81812CCBp-49", 53, 16], [ "0x3243F6A8885A3p-48", 53, 16], MPC.new([GMP::F("-0x13", 5, 16), GMP::F(0, 2)]), MPC::MPC_RNDNN],
|
26
|
+
[["0x5E38D81812CCBp-49", 53, 16], ["-0x3243F6A8885A3p-48", 53, 16], MPC.new([GMP::F("-0x13", 5, 16), -GMP::F(0, 2)]), MPC::MPC_RNDNN],
|
27
|
+
[["0x5E38D81812CCBp-49", 53, 16], ["-0x3243F6A8885A3p-49", 53, 16], MPC.new([GMP::F(0, 2), GMP::F("-0x13", 5, 16)]), MPC::MPC_RNDNN],
|
28
|
+
]
|
29
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
30
|
+
actual = input.log(rounding_mode)
|
31
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
32
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
### There are still more tests in log.data, each a result of some bug or other thing
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
describe "MPC_SINGLE_FUNCTION args" do
|
4
|
+
before do
|
5
|
+
@functions = [
|
6
|
+
:sin, :cos, :tan,
|
7
|
+
:sinh, :cosh, :tanh,
|
8
|
+
:asin, :acos, :atan
|
9
|
+
]
|
10
|
+
@z = MPC.new(0,0)
|
11
|
+
end
|
12
|
+
it "should accept no arguments" do
|
13
|
+
@functions.each do |func|
|
14
|
+
expect { @z.send(func) }.to_not raise_error(ArgumentError)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should accept a single rounding mode argument, MPC_RNDNN" do
|
19
|
+
@functions.each do |func|
|
20
|
+
expect { @z.send(func, MPC::MPC_RNDNN) }.to_not raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should accept a single rounding mode argument, MPC_RNDZD" do
|
25
|
+
@functions.each do |func|
|
26
|
+
expect { @z.send(func, MPC::MPC_RNDZD) }.to_not raise_error(ArgumentError)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should accept a single rounding mode argument and a single precision" do
|
31
|
+
@functions.each do |func|
|
32
|
+
expect { @z.send(func, MPC::MPC_RNDZZ, 128) }.to_not raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should accept a single rounding mode argument and two precisions" do
|
37
|
+
@functions.each do |func|
|
38
|
+
expect { @z.send(func, MPC::MPC_RNDZZ, 128, 256) }.to_not raise_error(ArgumentError)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/neg_spec.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
# All tests adapted from MPC 1.0.1's tests/neg.dat
|
4
|
+
describe MPC, '#@-' do
|
5
|
+
it 'should calculate the negation of a pure real argument' do
|
6
|
+
data = [
|
7
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 2], MPC.new([GMP::F( "0x123456789abcdep+52", 53, 16), GMP::F(0, 17)]), MPC::MPC_RNDNN],
|
8
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 3], MPC.new([GMP::F("-0x123456789abcdep+52", 54, 16), GMP::F(0, 16)]), MPC::MPC_RNDZN],
|
9
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 4], MPC.new([GMP::F( "0x123456789abcdep+52", 55, 16), GMP::F(0, 15)]), MPC::MPC_RNDUN],
|
10
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 5], MPC.new([GMP::F("-0x123456789abcdep+52", 56, 16), GMP::F(0, 14)]), MPC::MPC_RNDDN],
|
11
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 6], MPC.new([GMP::F( "0x123456789abcdep+52", 57, 16), GMP::F(0, 13)]), MPC::MPC_RNDZZ],
|
12
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 7], MPC.new([GMP::F("-0x123456789abcdep+52", 58, 16), GMP::F(0, 12)]), MPC::MPC_RNDUZ],
|
13
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 8], MPC.new([GMP::F( "0x123456789abcdep+52", 59, 16), GMP::F(0, 11)]), MPC::MPC_RNDDZ],
|
14
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 9], MPC.new([GMP::F("-0x123456789abcdep+52", 60, 16), GMP::F(0, 10)]), MPC::MPC_RNDNZ],
|
15
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 10], MPC.new([GMP::F( "0x123456789abcdep+52", 61, 16), GMP::F(0, 9)]), MPC::MPC_RNDUU],
|
16
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 11], MPC.new([GMP::F("-0x123456789abcdep+52", 62, 16), GMP::F(0, 8)]), MPC::MPC_RNDDU],
|
17
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 12], MPC.new([GMP::F( "0x123456789abcdep+52", 63, 16), GMP::F(0, 7)]), MPC::MPC_RNDNU],
|
18
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 13], MPC.new([GMP::F("-0x123456789abcdep+52", 64, 16), GMP::F(0, 6)]), MPC::MPC_RNDZU],
|
19
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 14], MPC.new([GMP::F( "0x123456789abcdep+52", 65, 16), GMP::F(0, 5)]), MPC::MPC_RNDDD],
|
20
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 15], MPC.new([GMP::F("-0x123456789abcdep+52", 66, 16), GMP::F(0, 4)]), MPC::MPC_RNDND],
|
21
|
+
[["-0x123456789abcdep+52", 53, 16], [ 0, 16], MPC.new([GMP::F( "0x123456789abcdep+52", 67, 16), GMP::F(0, 3)]), MPC::MPC_RNDZD],
|
22
|
+
[[ "0x123456789abcdep+52", 53, 16], [ 0, 17], MPC.new([GMP::F("-0x123456789abcdep+52", 68, 16), GMP::F(0, 2)]), MPC::MPC_RNDUD]
|
23
|
+
]
|
24
|
+
data.each do |expected_real, expected_imag, input, rounding_mode|
|
25
|
+
actual = input.neg(rounding_mode)
|
26
|
+
actual.real.should eq GMP::F.new(*expected_real)
|
27
|
+
actual.imag.should eq GMP::F.new(*expected_imag)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/spec/new_spec.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
describe MPC, '#initialize without precision or rounding args' do
|
4
|
+
before do
|
5
|
+
@z1 = GMP::Z(8)
|
6
|
+
@z2 = GMP::Z(-13)
|
7
|
+
@q1 = GMP::Q(1,3)
|
8
|
+
@q2 = GMP::Q(-2,3)
|
9
|
+
@f1 = GMP::F(1.5)
|
10
|
+
@f2 = GMP::F(-2.5)
|
11
|
+
end
|
12
|
+
it 'should not raise anything when initialized with no args' do
|
13
|
+
expect { MPC.new() }.to_not raise_error
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should not raise anything when initialized with 0' do
|
17
|
+
expect { MPC.new(0) }.to_not raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should not raise anything when initialized with a negative Fixnum' do
|
21
|
+
expect { MPC.new(-32) }.to_not raise_error
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not raise anything when initialized with a positive Fixnum' do
|
25
|
+
expect { MPC.new(32) }.to_not raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should not raise anything when initialized with 0.0' do
|
29
|
+
expect { MPC.new(0.0) }.to_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should not raise anything when initialized with a positive Float' do
|
33
|
+
expect { MPC.new(3.14) }.to_not raise_error
|
34
|
+
expect { MPC.new(1.618) }.to_not raise_error
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should not raise anything when initialized with a positive GMP::Z' do
|
38
|
+
expect { MPC.new(@z1) }.to_not raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should not raise anything when initialized with a negative GMP::Z' do
|
42
|
+
expect { MPC.new(@z2) }.to_not raise_error
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should not raise anything when initialized with a positive GMP::Q' do
|
46
|
+
expect { MPC.new(@q1) }.to_not raise_error
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should not raise anything when initialized with a negative GMP::Q' do
|
50
|
+
expect { MPC.new(@q2) }.to_not raise_error
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should not raise anything when initialized with a positive GMP::F' do
|
54
|
+
expect { MPC.new(@f1) }.to_not raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should not raise anything when initialized with a negative GMP::F' do
|
58
|
+
expect { MPC.new(@f2) }.to_not raise_error
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should not raise anything when initialized with an Array of 0\'s' do
|
62
|
+
expect { MPC.new([0,0]) }.to_not raise_error
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should not raise anything when initialized with an Array of Fixnum\'s' do
|
66
|
+
expect { MPC.new([-2**10, 2**11]) }.to_not raise_error
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should not raise anything when initialized with an Array of Float\'s' do
|
70
|
+
expect { MPC.new([1.4142135623730951, 1.4142135623730951]) }.to_not raise_error
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should not raise anything when initialized with an Array of GMP::Z\'s' do
|
74
|
+
expect { MPC.new([@z1, @z2]) }.to_not raise_error
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should not raise anything when initialized with an Array of GMP::Q\'s' do
|
78
|
+
expect { MPC.new([@q1, @q2]) }.to_not raise_error
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should not raise anything when initialized with an Array of GMP::F\'s' do
|
82
|
+
expect { MPC.new([@f1, @f2]) }.to_not raise_error
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should raise TypeError when initialized with an Array of mixed types' do
|
86
|
+
expect { MPC.new([0, 0.0]) }.to raise_error(TypeError)
|
87
|
+
expect { MPC.new([0, @z1]) }.to raise_error(TypeError)
|
88
|
+
expect { MPC.new([@f1, 0.0]) }.to raise_error(TypeError)
|
89
|
+
expect { MPC.new([@z1, @f1]) }.to raise_error(TypeError)
|
90
|
+
expect { MPC.new([@q1, 42]) }.to raise_error(TypeError)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should initialize default values correctly' do
|
94
|
+
MPC.new(0).should eq MPC.new()
|
95
|
+
MPC.new(0.0).should eq MPC.new()
|
96
|
+
end
|
97
|
+
end
|