gnu_mpc 0.8.0
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/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
|