Imported Upstream version 1.46.0
[platform/upstream/nghttp2.git] / third-party / mruby / mrbgems / mruby-complex / test / complex.rb
1 def assert_complex(real, exp)
2   assert "assert_complex" do
3     assert_float real.real,      exp.real
4     assert_float real.imaginary, exp.imaginary
5   end
6 end
7
8 assert 'Complex' do
9   c = 123i
10   assert_equal Complex, c.class
11   assert_equal [c.real, c.imaginary], [0, 123]
12   c = 123 + -1.23i
13   assert_equal Complex, c.class
14   assert_equal [c.real, c.imaginary], [123, -1.23]
15 end
16
17 assert 'Complex::polar' do
18   assert_complex Complex.polar(3, 0),           (3  +  0i)
19   assert_complex Complex.polar(3, Math::PI/2),  (0  +  3i)
20   assert_complex Complex.polar(3, Math::PI),    (-3 +  0i)
21   assert_complex Complex.polar(3, -Math::PI/2), (0  + -3i)
22 end
23
24 assert 'Complex::rectangular' do
25   assert_complex Complex.rectangular(1, 2), (1 + 2i)
26 end
27
28 assert 'Complex#*' do
29   assert_complex Complex(2, 3)  * Complex(2, 3),  (-5    + 12i)
30   assert_complex Complex(900)   * Complex(1),     (900   + 0i)
31   assert_complex Complex(-2, 9) * Complex(-9, 2), (0     - 85i)
32   assert_complex Complex(9, 8)  * 4,              (36    + 32i)
33   assert_complex Complex(20, 9) * 9.8,            (196.0 + 88.2i)
34 end
35
36 assert 'Complex#+' do
37   assert_complex Complex(2, 3)  + Complex(2, 3) , (4    + 6i)
38   assert_complex Complex(900)   + Complex(1)    , (901  + 0i)
39   assert_complex Complex(-2, 9) + Complex(-9, 2), (-11  + 11i)
40   assert_complex Complex(9, 8)  + 4             , (13   + 8i)
41   assert_complex Complex(20, 9) + 9.8           , (29.8 + 9i)
42 end
43
44 assert 'Complex#-' do
45   assert_complex Complex(2, 3)  - Complex(2, 3) , (0    + 0i)
46   assert_complex Complex(900)   - Complex(1)    , (899  + 0i)
47   assert_complex Complex(-2, 9) - Complex(-9, 2), (7    + 7i)
48   assert_complex Complex(9, 8)  - 4             , (5    + 8i)
49   assert_complex Complex(20, 9) - 9.8           , (10.2 + 9i)
50 end
51
52 assert 'Complex#-@' do
53   assert_complex(-Complex(1, 2), (-1 - 2i))
54 end
55
56 assert 'Complex#/' do
57   assert_complex Complex(2, 3)  / Complex(2, 3) , (1                  + 0i)
58   assert_complex Complex(900)   / Complex(1)    , (900                + 0i)
59   assert_complex Complex(-2, 9) / Complex(-9, 2), ((36 / 85)          - (77i / 85))
60   assert_complex Complex(9, 8)  / 4             , ((9 / 4)            + 2i)
61   assert_complex Complex(20, 9) / 9.8           , (2.0408163265306123 + 0.9183673469387754i)
62   if 1e39.infinite? then
63     # MRB_USE_FLOAT in effect
64     ten = 1e21
65     one = 1e20
66   else
67     ten = 1e201
68     one = 1e200
69   end
70   assert_complex Complex(ten, ten) / Complex(one, one), Complex(10.0, 0.0)
71 end
72
73 assert 'Complex#==' do
74   assert_true  Complex(2, 3)  == Complex(2, 3)
75   assert_true  Complex(5)     == 5
76   assert_true  Complex(0)     == 0.0
77 end
78
79 assert 'Complex#abs' do
80   assert_float Complex(-1).abs,        1
81   assert_float Complex(3.0, -4.0).abs, 5.0
82   if 1e39.infinite? then
83     # MRB_USE_FLOAT in effect
84     exp = 125
85   else
86     exp = 1021
87   end
88   assert_true Complex(3.0*2.0**exp, 4.0*2.0**exp).abs.finite?
89   assert_float Complex(3.0*2.0**exp, 4.0*2.0**exp).abs, 5.0*2.0**exp
90 end
91
92 assert 'Complex#abs2' do
93   assert_float Complex(-1).abs2,        1
94   assert_float Complex(3.0, -4.0).abs2, 25.0
95 end
96
97 assert 'Complex#arg' do
98   assert_float Complex.polar(3, Math::PI/2).arg, 1.5707963267948966
99 end
100
101 assert 'Complex#conjugate' do
102   assert_complex Complex(1, 2).conjugate, (1 - 2i)
103 end
104
105 assert 'Complex#fdiv' do
106   assert_complex Complex(11, 22).fdiv(3), (3.6666666666666665 + 7.333333333333333i)
107 end
108
109 assert 'Complex#imaginary' do
110   assert_float Complex(7).imaginary    , 0
111   assert_float Complex(9, -4).imaginary, -4
112 end
113
114 assert 'Complex#polar' do
115   assert_equal Complex(1, 2).polar, [2.23606797749979, 1.1071487177940904]
116 end
117
118 assert 'Complex#real' do
119   assert_float Complex(7).real,     7
120   assert_float Complex(9, -4).real, 9
121 end
122
123 assert 'Complex#real?' do
124   assert_false Complex(1).real?
125 end
126
127 assert 'Complex::rectangular' do
128   assert_equal Complex(1, 2).rectangular, [1, 2]
129 end
130
131 assert 'Complex::to_c' do
132   assert_equal Complex(1, 2).to_c, Complex(1, 2)
133 end
134
135 assert 'Complex::to_f' do
136   assert_float Complex(1, 0).to_f, 1.0
137   assert_raise(RangeError) do
138     Complex(1, 2).to_f
139   end
140 end
141
142 assert 'Complex::to_i' do
143   assert_equal Complex(1, 0).to_i, 1
144   assert_raise(RangeError) do
145     Complex(1, 2).to_i
146   end
147 end
148
149 assert 'Complex#frozen?' do
150   assert_predicate(1i, :frozen?)
151   assert_predicate(Complex(2,3), :frozen?)
152   assert_predicate(4+5i, :frozen?)
153 end