rubysl-complex 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +2 -0
  8. data/lib/complex.rb +1 -0
  9. data/lib/rubysl/complex.rb +2 -0
  10. data/lib/rubysl/complex/complex.rb +659 -0
  11. data/lib/rubysl/complex/version.rb +5 -0
  12. data/rubysl-complex.gemspec +23 -0
  13. data/spec/Complex_spec.rb +9 -0
  14. data/spec/abs2_spec.rb +10 -0
  15. data/spec/abs_spec.rb +10 -0
  16. data/spec/angle_spec.rb +7 -0
  17. data/spec/arg_spec.rb +7 -0
  18. data/spec/coerce_spec.rb +11 -0
  19. data/spec/comparison_spec.rb +23 -0
  20. data/spec/conj_spec.rb +7 -0
  21. data/spec/conjugate_spec.rb +7 -0
  22. data/spec/constants_spec.rb +9 -0
  23. data/spec/denominator_spec.rb +20 -0
  24. data/spec/divide_spec.rb +9 -0
  25. data/spec/equal_value_spec.rb +9 -0
  26. data/spec/exponent_spec.rb +10 -0
  27. data/spec/float/angle_spec.rb +9 -0
  28. data/spec/float/arg_spec.rb +9 -0
  29. data/spec/generic_spec.rb +25 -0
  30. data/spec/hash_spec.rb +10 -0
  31. data/spec/imag_spec.rb +10 -0
  32. data/spec/image_spec.rb +7 -0
  33. data/spec/inspect_spec.rb +10 -0
  34. data/spec/math/acos_spec.rb +30 -0
  35. data/spec/math/acosh_spec.rb +30 -0
  36. data/spec/math/asin_spec.rb +30 -0
  37. data/spec/math/asinh_spec.rb +30 -0
  38. data/spec/math/atan2_spec.rb +30 -0
  39. data/spec/math/atan_spec.rb +30 -0
  40. data/spec/math/atanh_spec.rb +34 -0
  41. data/spec/math/cos_spec.rb +30 -0
  42. data/spec/math/cosh_spec.rb +30 -0
  43. data/spec/math/exp_spec.rb +30 -0
  44. data/spec/math/fixtures/classes.rb +3 -0
  45. data/spec/math/log10_spec.rb +30 -0
  46. data/spec/math/log_spec.rb +30 -0
  47. data/spec/math/shared/acos.rb +41 -0
  48. data/spec/math/shared/acosh.rb +37 -0
  49. data/spec/math/shared/asin.rb +47 -0
  50. data/spec/math/shared/asinh.rb +32 -0
  51. data/spec/math/shared/atan.rb +32 -0
  52. data/spec/math/shared/atan2.rb +34 -0
  53. data/spec/math/shared/atanh.rb +30 -0
  54. data/spec/math/shared/cos.rb +30 -0
  55. data/spec/math/shared/cosh.rb +28 -0
  56. data/spec/math/shared/exp.rb +28 -0
  57. data/spec/math/shared/log.rb +39 -0
  58. data/spec/math/shared/log10.rb +41 -0
  59. data/spec/math/shared/sin.rb +30 -0
  60. data/spec/math/shared/sinh.rb +28 -0
  61. data/spec/math/shared/sqrt.rb +34 -0
  62. data/spec/math/shared/tan.rb +28 -0
  63. data/spec/math/shared/tanh.rb +32 -0
  64. data/spec/math/sin_spec.rb +30 -0
  65. data/spec/math/sinh_spec.rb +30 -0
  66. data/spec/math/sqrt_spec.rb +30 -0
  67. data/spec/math/tan_spec.rb +30 -0
  68. data/spec/math/tanh_spec.rb +30 -0
  69. data/spec/minus_spec.rb +9 -0
  70. data/spec/modulo_spec.rb +29 -0
  71. data/spec/multiply_spec.rb +9 -0
  72. data/spec/new_spec.rb +41 -0
  73. data/spec/numerator_spec.rb +12 -0
  74. data/spec/numeric/angle_spec.rb +11 -0
  75. data/spec/numeric/arg_spec.rb +11 -0
  76. data/spec/numeric/conj_spec.rb +11 -0
  77. data/spec/numeric/conjugate_spec.rb +11 -0
  78. data/spec/numeric/im_spec.rb +9 -0
  79. data/spec/numeric/imag_spec.rb +11 -0
  80. data/spec/numeric/image_spec.rb +11 -0
  81. data/spec/numeric/polar_spec.rb +11 -0
  82. data/spec/numeric/real_spec.rb +11 -0
  83. data/spec/plus_spec.rb +9 -0
  84. data/spec/polar_spec.rb +13 -0
  85. data/spec/real_spec.rb +10 -0
  86. data/spec/to_s_spec.rb +9 -0
  87. metadata +259 -0
@@ -0,0 +1,30 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_atanh_complex, :shared => true do
4
+ it "returns the inverse hyperbolic tangent as a Complex number for arguments greater than 1.0" do
5
+ value = Complex(18.36840028483855, 1.5707963267948966)
6
+ @object.send(@method, 1.0 + Float::EPSILON).should be_close(value, TOLERANCE)
7
+
8
+ value = Complex(0.100335347731076, 1.5707963267949)
9
+ @object.send(@method, 10).should be_close(value, TOLERANCE)
10
+ end
11
+
12
+ it "returns the inverse hyperbolic tangent as a Complex number for arguments greater than 1.0" do
13
+ value = Complex(-18.36840028483855, 1.5707963267948966)
14
+ @object.send(@method, -1.0 - Float::EPSILON).should be_close(value, TOLERANCE)
15
+
16
+ value = Complex(0.100335347731076, 1.5707963267949)
17
+ @object.send(@method, 10).should be_close(value, TOLERANCE)
18
+ end
19
+
20
+ it "returns the inverse hyperbolic tangent for Complex numbers" do
21
+ value = Complex(0.117500907311434, 1.40992104959658)
22
+ @object.send(@method, Complex(3, 4)).should be_close(value, TOLERANCE)
23
+ end
24
+ end
25
+
26
+ describe :complex_math_atanh_no_complex, :shared => true do
27
+ it "raises a TypeError when passed a Complex number" do
28
+ lambda { @object.send(:atanh!, Complex(4, 5)) }.should raise_error(TypeError)
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_cos, :shared => true do
4
+ it "returns the cosine of the argument expressed in radians" do
5
+ @object.send(:cos, Math::PI).should be_close(-1.0, TOLERANCE)
6
+ @object.send(:cos, 0).should be_close(1.0, TOLERANCE)
7
+ @object.send(:cos, Math::PI/2).should be_close(0.0, TOLERANCE)
8
+ @object.send(:cos, 3*Math::PI/2).should be_close(0.0, TOLERANCE)
9
+ @object.send(:cos, 2*Math::PI).should be_close(1.0, TOLERANCE)
10
+ end
11
+
12
+ it "returns the cosine for Complex numbers" do
13
+ @object.send(:cos, Complex(0, Math::PI)).should be_close(Complex(11.5919532755215, 0.0), TOLERANCE)
14
+ @object.send(:cos, Complex(3, 4)).should be_close(Complex(-27.0349456030742, -3.85115333481178), TOLERANCE)
15
+ end
16
+ end
17
+
18
+ describe :complex_math_cos_bang, :shared => true do
19
+ it "returns the cosine of the argument expressed in radians" do
20
+ @object.send(:cos!, Math::PI).should be_close(-1.0, TOLERANCE)
21
+ @object.send(:cos!, 0).should be_close(1.0, TOLERANCE)
22
+ @object.send(:cos!, Math::PI/2).should be_close(0.0, TOLERANCE)
23
+ @object.send(:cos!, 3*Math::PI/2).should be_close(0.0, TOLERANCE)
24
+ @object.send(:cos!, 2*Math::PI).should be_close(1.0, TOLERANCE)
25
+ end
26
+
27
+ it "raises a TypeError when passed a Complex number" do
28
+ lambda { @object.send(:cos!, Complex(3, 4)) }.should raise_error(TypeError)
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_cosh, :shared => true do
4
+ it "returns the hyperbolic cosine of the passed argument" do
5
+ @object.send(:cosh, 0.0).should == 1.0
6
+ @object.send(:cosh, -0.0).should == 1.0
7
+ @object.send(:cosh, 1.5).should be_close(2.35240961524325, TOLERANCE)
8
+ @object.send(:cosh, -2.99).should be_close(9.96798496414416, TOLERANCE)
9
+ end
10
+
11
+ it "returns the hyperbolic cosine for Complex numbers" do
12
+ @object.send(:cosh, Complex(0, Math::PI)).should be_close(Complex(-1.0, 0.0), TOLERANCE)
13
+ @object.send(:cosh, Complex(3, 4)).should be_close(Complex(-6.58066304055116, -7.58155274274654), TOLERANCE)
14
+ end
15
+ end
16
+
17
+ describe :complex_math_cosh_bang, :shared => true do
18
+ it "returns the hyperbolic cosine of the passed argument" do
19
+ @object.send(:cosh!, 0.0).should == 1.0
20
+ @object.send(:cosh!, -0.0).should == 1.0
21
+ @object.send(:cosh!, 1.5).should be_close(2.35240961524325, TOLERANCE)
22
+ @object.send(:cosh!, -2.99).should be_close(9.96798496414416, TOLERANCE)
23
+ end
24
+
25
+ it "raises a TypeError when passed a Complex number" do
26
+ lambda { @object.send(:cosh!, Complex(4, 5)) }.should raise_error(TypeError)
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_exp, :shared => true do
4
+ it "returns the base-e exponential of the passed argument" do
5
+ @object.send(:exp, 0.0).should == 1.0
6
+ @object.send(:exp, -0.0).should == 1.0
7
+ @object.send(:exp, -1.8).should be_close(0.165298888221587, TOLERANCE)
8
+ @object.send(:exp, 1.25).should be_close(3.49034295746184, TOLERANCE)
9
+ end
10
+
11
+ it "returns the base-e exponential for Complex numbers" do
12
+ @object.send(:exp, Complex(0, 0)).should == Complex(1.0, 0.0)
13
+ @object.send(:exp, Complex(1, 3)).should be_close(Complex(-2.69107861381979, 0.383603953541131), TOLERANCE)
14
+ end
15
+ end
16
+
17
+ describe :complex_math_exp_bang, :shared => true do
18
+ it "returns the base-e exponential of the passed argument" do
19
+ @object.send(:exp!, 0.0).should == 1.0
20
+ @object.send(:exp!, -0.0).should == 1.0
21
+ @object.send(:exp!, -1.8).should be_close(0.165298888221587, TOLERANCE)
22
+ @object.send(:exp!, 1.25).should be_close(3.49034295746184, TOLERANCE)
23
+ end
24
+
25
+ it "raises a TypeError when passed a Complex number" do
26
+ lambda { @object.send(:exp!, Complex(1, 3)) }.should raise_error(TypeError)
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_log, :shared => true do
4
+ it "returns the natural logarithm of the passed argument" do
5
+ @object.send(:log, 0.0001).should be_close(-9.21034037197618, TOLERANCE)
6
+ @object.send(:log, 0.000000000001e-15).should be_close(-62.1697975108392, TOLERANCE)
7
+ @object.send(:log, 1).should be_close(0.0, TOLERANCE)
8
+ @object.send(:log, 10).should be_close( 2.30258509299405, TOLERANCE)
9
+ @object.send(:log, 10e15).should be_close(36.8413614879047, TOLERANCE)
10
+ end
11
+
12
+ it "returns the natural logarithm for Complex numbers" do
13
+ @object.send(:log, Complex(3, 4)).should be_close(Complex(1.6094379124341, 0.927295218001612), TOLERANCE)
14
+ @object.send(:log, Complex(-3, 4)).should be_close(Complex(1.6094379124341, 2.21429743558818), TOLERANCE)
15
+ end
16
+
17
+ it "returns the natural logarithm for negative numbers as a Complex number" do
18
+ @object.send(:log, -10).should be_close(Complex(2.30258509299405, 3.14159265358979), TOLERANCE)
19
+ @object.send(:log, -20).should be_close(Complex(2.99573227355399, 3.14159265358979), TOLERANCE)
20
+ end
21
+ end
22
+
23
+ describe :complex_math_log_bang, :shared => true do
24
+ it "returns the natural logarithm of the argument" do
25
+ @object.send(:log!, 0.0001).should be_close(-9.21034037197618, TOLERANCE)
26
+ @object.send(:log!, 0.000000000001e-15).should be_close(-62.1697975108392, TOLERANCE)
27
+ @object.send(:log!, 1).should be_close(0.0, TOLERANCE)
28
+ @object.send(:log!, 10).should be_close( 2.30258509299405, TOLERANCE)
29
+ @object.send(:log!, 10e15).should be_close(36.8413614879047, TOLERANCE)
30
+ end
31
+
32
+ it "raises an Errno::EDOM if the argument is less than 0" do
33
+ lambda { @object.send(:log!, -10) }.should raise_error(Errno::EDOM)
34
+ end
35
+
36
+ it "raises a TypeError when passed a Complex number" do
37
+ lambda { @object.send(:log!, Complex(4, 5)) }.should raise_error(TypeError)
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_log10, :shared => true do
4
+ it "returns the base-10 logarithm of the passed argument" do
5
+ @object.send(:log10, 0.0001).should be_close(-4.0, TOLERANCE)
6
+ @object.send(:log10, 0.000000000001e-15).should be_close(-27.0, TOLERANCE)
7
+ @object.send(:log10, 1).should be_close(0.0, TOLERANCE)
8
+ @object.send(:log10, 10).should be_close(1.0, TOLERANCE)
9
+ @object.send(:log10, 10e15).should be_close(16.0, TOLERANCE)
10
+ end
11
+
12
+ it "returns the base-10 logarithm for Complex numbers" do
13
+ @object.send(:log10, Complex(3, 4)).should be_close(Complex(0.698970004336019, 0.402719196273373), TOLERANCE)
14
+ @object.send(:log10, Complex(-3, 4)).should be_close(Complex(0.698970004336019, 0.961657157568468), TOLERANCE)
15
+ end
16
+
17
+ # BUG: does not work correctly, because Math#log10
18
+ # does not check for negative values
19
+ #it "returns the base-10 logarithm for negative numbers as a Complex number" do
20
+ # @object.send(:log10, -10).should be_close(Complex(2.30258509299405, 3.14159265358979), TOLERANCE)
21
+ # @object.send(:log10, -20).should be_close(Complex(2.99573227355399, 3.14159265358979), TOLERANCE)
22
+ #end
23
+ end
24
+
25
+ describe :complex_math_log10_bang, :shared => true do
26
+ it "returns the base-10 logarithm of the argument" do
27
+ @object.send(:log10!, 0.0001).should be_close(-4.0, TOLERANCE)
28
+ @object.send(:log10!, 0.000000000001e-15).should be_close(-27.0, TOLERANCE)
29
+ @object.send(:log10!, 1).should be_close(0.0, TOLERANCE)
30
+ @object.send(:log10!, 10).should be_close(1.0, TOLERANCE)
31
+ @object.send(:log10!, 10e15).should be_close(16.0, TOLERANCE)
32
+ end
33
+
34
+ it "raises an Errno::EDOM when the passed argument is negative" do
35
+ lambda { @object.send(:log10!, -10) }.should raise_error(Errno::EDOM)
36
+ end
37
+
38
+ it "raises a TypeError when passed a Complex number" do
39
+ lambda { @object.send(:log10!, Complex(4, 5)) }.should raise_error(TypeError)
40
+ end
41
+ end
@@ -0,0 +1,30 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_sin, :shared => true do
4
+ it "returns the sine of the passed argument expressed in radians" do
5
+ @object.send(:sin, Math::PI).should be_close(0.0, TOLERANCE)
6
+ @object.send(:sin, 0).should be_close(0.0, TOLERANCE)
7
+ @object.send(:sin, Math::PI/2).should be_close(1.0, TOLERANCE)
8
+ @object.send(:sin, 3*Math::PI/2).should be_close(-1.0, TOLERANCE)
9
+ @object.send(:sin, 2*Math::PI).should be_close(0.0, TOLERANCE)
10
+ end
11
+
12
+ it "returns the sine for Complex numbers" do
13
+ @object.send(:sin, Complex(0, Math::PI)).should be_close(Complex(0.0, 11.5487393572577), TOLERANCE)
14
+ @object.send(:sin, Complex(3, 4)).should be_close(Complex(3.85373803791938, -27.0168132580039), TOLERANCE)
15
+ end
16
+ end
17
+
18
+ describe :complex_math_sin_bang, :shared => true do
19
+ it "returns the sine of the passed argument expressed in radians" do
20
+ @object.send(:sin!, Math::PI).should be_close(0.0, TOLERANCE)
21
+ @object.send(:sin!, 0).should be_close(0.0, TOLERANCE)
22
+ @object.send(:sin!, Math::PI/2).should be_close(1.0, TOLERANCE)
23
+ @object.send(:sin!, 3*Math::PI/2).should be_close(-1.0, TOLERANCE)
24
+ @object.send(:sin!, 2*Math::PI).should be_close(0.0, TOLERANCE)
25
+ end
26
+
27
+ it "raises a TypeError when passed a Complex number" do
28
+ lambda { @object.send(:sin!, Complex(4, 5)) }.should raise_error(TypeError)
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_sinh, :shared => true do
4
+ it "returns the hyperbolic sin of the argument" do
5
+ @object.send(:sinh, 0.0).should == 0.0
6
+ @object.send(:sinh, -0.0).should == 0.0
7
+ @object.send(:sinh, 1.5).should be_close(2.12927945509482, TOLERANCE)
8
+ @object.send(:sinh, -2.8).should be_close(-8.19191835423591, TOLERANCE)
9
+ end
10
+
11
+ it "returns the hyperbolic sin for Complex numbers" do
12
+ @object.send(:sinh, Complex(0, Math::PI)).should be_close(Complex(-0.0, 1.22464679914735e-16), TOLERANCE)
13
+ @object.send(:sinh, Complex(3, 4)).should be_close(Complex(-6.548120040911, -7.61923172032141), TOLERANCE)
14
+ end
15
+ end
16
+
17
+ describe :complex_math_sinh_bang, :shared => true do
18
+ it "returns the hyperbolic sin of the argument" do
19
+ @object.send(:sinh!, 0.0).should == 0.0
20
+ @object.send(:sinh!, -0.0).should == 0.0
21
+ @object.send(:sinh!, 1.5).should be_close(2.12927945509482, TOLERANCE)
22
+ @object.send(:sinh!, -2.8).should be_close(-8.19191835423591, TOLERANCE)
23
+ end
24
+
25
+ it "raises a TypeError when passed a Complex number" do
26
+ lambda { @object.send(:sinh!, Complex(4, 5)) }.should raise_error(TypeError)
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_sqrt, :shared => true do
4
+ it "returns the square root for positive numbers" do
5
+ @object.send(:sqrt, 4).should == 2
6
+ @object.send(:sqrt, 19.36).should == 4.4
7
+ end
8
+
9
+ it "returns the square root for negative numbers" do
10
+ @object.send(:sqrt, -4).should == Complex(0, 2.0)
11
+ @object.send(:sqrt, -19.36).should == Complex(0, 4.4)
12
+ end
13
+
14
+ it "returns the square root for Complex numbers" do
15
+ @object.send(:sqrt, Complex(4, 5)).should be_close(Complex(2.2806933416653, 1.09615788950152), TOLERANCE)
16
+ @object.send(:sqrt, Complex(4, -5)).should be_close(Complex(2.2806933416653, -1.09615788950152), TOLERANCE)
17
+ end
18
+ end
19
+
20
+ describe :complex_math_sqrt_bang, :shared => true do
21
+ it "returns the square root for positive numbers" do
22
+ @object.send(:sqrt!, 4).should == 2
23
+ @object.send(:sqrt!, 19.36).should == 4.4
24
+ end
25
+
26
+ it "raises Errno::EDOM when the passed argument is negative" do
27
+ lambda { @object.send(:sqrt!, -4) }.should raise_error(Errno::EDOM)
28
+ lambda { @object.send(:sqrt!, -19.36) }.should raise_error(Errno::EDOM)
29
+ end
30
+
31
+ it "raises a TypeError when passed a Complex number" do
32
+ lambda { @object.send(:sqrt!, Complex(4, 5)) }.should raise_error(TypeError)
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_tan, :shared => true do
4
+ it "returns the tangent of the argument" do
5
+ @object.send(:tan, 0.0).should == 0.0
6
+ @object.send(:tan, -0.0).should == -0.0
7
+ @object.send(:tan, 4.22).should be_close(1.86406937682395, TOLERANCE)
8
+ @object.send(:tan, -9.65).should be_close(-0.229109052606441, TOLERANCE)
9
+ end
10
+
11
+ it "returns the tangent for Complex numbers" do
12
+ @object.send(:tan, Complex(0, Math::PI)).should be_close(Complex(0.0, 0.99627207622075), TOLERANCE)
13
+ @object.send(:tan, Complex(3, 4)).should be_close(Complex(-0.000187346204629452, 0.999355987381473), TOLERANCE)
14
+ end
15
+ end
16
+
17
+ describe :complex_math_tan_bang, :shared => true do
18
+ it "returns the tangent of the argument" do
19
+ @object.send(:tan!, 0.0).should == 0.0
20
+ @object.send(:tan!, -0.0).should == -0.0
21
+ @object.send(:tan!, 4.22).should be_close(1.86406937682395, TOLERANCE)
22
+ @object.send(:tan!, -9.65).should be_close(-0.229109052606441, TOLERANCE)
23
+ end
24
+
25
+ it "raises a TypeError when passed a Complex number" do
26
+ lambda { @object.send(:tan!, Complex(4, 5)) }.should raise_error(TypeError)
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../fixtures/classes', __FILE__)
2
+
3
+ describe :complex_math_tanh, :shared => true do
4
+ it "returns the hyperbolic tangent of the argument" do
5
+ @object.send(:tanh, 0.0).should == 0.0
6
+ @object.send(:tanh, -0.0).should == -0.0
7
+ @object.send(:tanh, infinity_value).should == 1.0
8
+ @object.send(:tanh, -infinity_value).should == -1.0
9
+ @object.send(:tanh, 2.5).should be_close(0.98661429815143, TOLERANCE)
10
+ @object.send(:tanh, -4.892).should be_close(-0.999887314427707, TOLERANCE)
11
+ end
12
+
13
+ it "returns the hyperbolic tangent for Complex numbers" do
14
+ @object.send(:tanh, Complex(0, Math::PI)).should be_close(Complex(0.0, -1.22464679914735e-16), TOLERANCE)
15
+ @object.send(:tanh, Complex(3, 4)).should be_close(Complex(1.00070953606723, 0.00490825806749599), TOLERANCE)
16
+ end
17
+ end
18
+
19
+ describe :complex_math_tanh_bang, :shared => true do
20
+ it "returns the hyperbolic tangent of the argument" do
21
+ @object.send(:tanh!, 0.0).should == 0.0
22
+ @object.send(:tanh!, -0.0).should == -0.0
23
+ @object.send(:tanh!, infinity_value).should == 1.0
24
+ @object.send(:tanh!, -infinity_value).should == -1.0
25
+ @object.send(:tanh!, 2.5).should be_close(0.98661429815143, TOLERANCE)
26
+ @object.send(:tanh!, -4.892).should be_close(-0.999887314427707, TOLERANCE)
27
+ end
28
+
29
+ it "raises a TypeError when passed a Complex number" do
30
+ lambda { @object.send(:tanh!, Complex(4, 5)) }.should raise_error(TypeError)
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ require 'complex'
2
+ require File.expand_path('../shared/sin', __FILE__)
3
+
4
+ describe "Math#sin" do
5
+ it_behaves_like :complex_math_sin, :_, IncludesMath.new
6
+
7
+ it "is a private instance method" do
8
+ IncludesMath.should have_private_instance_method(:sin)
9
+ end
10
+ end
11
+
12
+ ruby_version_is ""..."1.9" do
13
+ describe "Math#sin!" do
14
+ it_behaves_like :complex_math_sin_bang, :_, IncludesMath.new
15
+
16
+ it "is a private instance method" do
17
+ IncludesMath.should have_private_instance_method(:sin!)
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "Math.sin" do
23
+ it_behaves_like :complex_math_sin, :_, Math
24
+ end
25
+
26
+ ruby_version_is ""..."1.9" do
27
+ describe "Math.sin!" do
28
+ it_behaves_like :complex_math_sin_bang, :_, Math
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'complex'
2
+ require File.expand_path('../shared/sinh', __FILE__)
3
+
4
+ describe "Math#sinh" do
5
+ it_behaves_like :complex_math_sinh, :_, IncludesMath.new
6
+
7
+ it "is a private instance method" do
8
+ IncludesMath.should have_private_instance_method(:sinh)
9
+ end
10
+ end
11
+
12
+ ruby_version_is ""..."1.9" do
13
+ describe "Math#sinh!" do
14
+ it_behaves_like :complex_math_sinh_bang, :_, IncludesMath.new
15
+
16
+ it "is a private instance method" do
17
+ IncludesMath.should have_private_instance_method(:sinh!)
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "Math.sinh" do
23
+ it_behaves_like :complex_math_sinh, :_, Math
24
+ end
25
+
26
+ ruby_version_is ""..."1.9" do
27
+ describe "Math.sinh!" do
28
+ it_behaves_like :complex_math_sinh_bang, :_, Math
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'complex'
2
+ require File.expand_path('../shared/sqrt', __FILE__)
3
+
4
+ describe "Math#sqrt" do
5
+ it_behaves_like :complex_math_sqrt, :_, IncludesMath.new
6
+
7
+ it "is a private instance method" do
8
+ IncludesMath.should have_private_instance_method(:sqrt)
9
+ end
10
+ end
11
+
12
+ ruby_version_is ""..."1.9" do
13
+ describe "Math#sqrt!" do
14
+ it_behaves_like :complex_math_sqrt_bang, :_, IncludesMath.new
15
+
16
+ it "is a private instance method" do
17
+ IncludesMath.should have_private_instance_method(:sqrt!)
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "Math.sqrt" do
23
+ it_behaves_like :complex_math_sqrt, :_, Math
24
+ end
25
+
26
+ ruby_version_is ""..."1.9" do
27
+ describe "Math.sqrt!" do
28
+ it_behaves_like :complex_math_sqrt_bang, :_, Math
29
+ end
30
+ end