Upgrade to 1.46.0
[platform/upstream/nghttp2.git] / third-party / mruby / test / t / integer.rb
1 ##
2 # Integer ISO Test
3
4 assert('Integer', '15.2.8') do
5   assert_equal Class, Integer.class
6 end
7
8 assert('Integer#+', '15.2.8.3.1') do
9   a = 1+1
10   b = 1+1.0 if Object.const_defined?(:Float)
11
12   assert_equal 2, a
13   assert_equal 2.0, b if Object.const_defined?(:Float)
14
15   assert_raise(TypeError){ 0+nil }
16   assert_raise(TypeError){ 1+nil }
17
18   c = Mrbtest::FIXNUM_MAX + 1
19   d = Mrbtest::FIXNUM_MAX.__send__(:+, 1)
20
21   skip unless Object.const_defined?(:Float)
22   e = Mrbtest::FIXNUM_MAX + 1.0
23   assert_equal Float, c.class
24   assert_equal Float, d.class
25   assert_float e, c
26   assert_float e, d
27 end
28
29 assert('Integer#-', '15.2.8.3.2') do
30   a = 2-1
31   b = 2-1.0 if Object.const_defined?(:Float)
32
33   assert_equal 1, a
34   assert_equal 1.0, b if Object.const_defined?(:Float)
35
36   c = Mrbtest::FIXNUM_MIN - 1
37   d = Mrbtest::FIXNUM_MIN.__send__(:-, 1)
38
39   skip unless Object.const_defined?(:Float)
40   e = Mrbtest::FIXNUM_MIN - 1.0
41   assert_equal Float, c.class
42   assert_equal Float, d.class
43   assert_float e, c
44   assert_float e, d
45 end
46
47 assert('Integer#*', '15.2.8.3.3') do
48   a = 1*1
49   b = 1*1.0 if Object.const_defined?(:Float)
50
51   assert_equal 1, a
52   assert_equal 1.0, b if Object.const_defined?(:Float)
53
54   assert_raise(TypeError){ 0*nil }
55   assert_raise(TypeError){ 1*nil }
56
57   c = Mrbtest::FIXNUM_MAX * 2
58   d = Mrbtest::FIXNUM_MAX.__send__(:*, 2)
59
60   skip unless Object.const_defined?(:Float)
61   e = Mrbtest::FIXNUM_MAX * 2.0
62   assert_equal Float, c.class
63   assert_equal Float, d.class
64   assert_float e, c
65   assert_float e, d
66 end
67
68 assert('Integer#/', '15.2.8.3.4') do
69   a = 2/1
70   b = 2/1.0
71
72   assert_equal 2, a
73   assert_equal 2.0, b
74 end
75
76 assert('Integer#%', '15.2.8.3.5') do
77   a = 1%1
78   b = 1%1.0
79   c = 2%4
80   d = 2%5
81   e = 2%-5
82   f = -2%5
83   g = -2%-5
84   h =  2%-2
85   i = -2%2
86   j = -2%-2
87
88   assert_equal 0, a
89   assert_equal 0.0, b
90   assert_equal 2, c
91   assert_equal 2, d
92   assert_equal(-3, e)
93   assert_equal 3, f
94   assert_equal(-2, g)
95   assert_equal 0, h
96   assert_equal 0, i
97   assert_equal 0, j
98 end
99
100 assert('Integer#<=>', '15.2.9.3.6') do
101   a = 1<=>0
102   b = 1<=>1
103   c = 1<=>2
104
105   assert_equal  1, a
106   assert_equal  0, b
107   assert_equal(-1, c)
108 end
109
110 assert('Integer#==', '15.2.8.3.7') do
111   a = 1==0
112   b = 1==1
113
114   assert_false a
115   assert_true b
116 end
117
118 assert('Integer#~', '15.2.8.3.8') do
119   # Complement
120   assert_equal(-1, ~0)
121   assert_equal(-3, ~2)
122 end
123
124 assert('Integer#&', '15.2.8.3.9') do
125   # Bitwise AND
126   #   0101 (5)
127   # & 0011 (3)
128   # = 0001 (1)
129   assert_equal 1, 5 & 3
130 end
131
132 assert('Integer#|', '15.2.8.3.10') do
133   # Bitwise OR
134   #   0101 (5)
135   # | 0011 (3)
136   # = 0111 (7)
137   assert_equal 7, 5 | 3
138 end
139
140 assert('Integer#^', '15.2.8.3.11') do
141   # Bitwise XOR
142   #   0101 (5)
143   # ^ 0011 (3)
144   # = 0110 (6)
145   assert_equal 6, 5 ^ 3
146 end
147
148 assert('Integer#<<', '15.2.8.3.12') do
149   # Left Shift by one
150   #   00010111 (23)
151   # = 00101110 (46)
152   assert_equal 46, 23 << 1
153
154   # Left Shift by a negative is Right Shift
155   assert_equal 23, 46 << -1
156
157   skip unless Object.const_defined?(:Float)
158
159   # Overflow to Fixnum
160   assert_float 9223372036854775808.0, 1 << 63
161   assert_float(-13835058055282163712.0, -3 << 62)
162 end
163
164 assert('Integer#>>', '15.2.8.3.13') do
165   # Right Shift by one
166   #   00101110 (46)
167   # = 00010111 (23)
168   assert_equal 23, 46 >> 1
169
170   # Right Shift by a negative is Left Shift
171   assert_equal 46, 23 >> -1
172
173   # Don't raise on large Right Shift
174   assert_equal 0, 23 >> 128
175 end
176
177 assert('Integer#ceil', '15.2.8.3.14') do
178   assert_equal 10, 10.ceil
179 end
180
181 assert('Integer#downto', '15.2.8.3.15') do
182   a = 0
183   3.downto(1) do |i|
184     a += i
185   end
186   assert_equal 6, a
187 end
188
189 assert('Integer#eql?', '15.2.8.3.16') do
190   a = 1.eql?(1)
191   b = 1.eql?(2)
192   c = 1.eql?(nil)
193
194   assert_true a
195   assert_false b
196   assert_false c
197 end
198
199 assert('Integer#floor', '15.2.8.3.17') do
200   a = 1.floor
201
202   assert_equal 1, a
203 end
204
205 assert('Integer#next', '15.2.8.3.19') do
206   assert_equal 2, 1.next
207 end
208
209 assert('Integer#round', '15.2.8.3.20') do
210   assert_equal 1, 1.round
211 end
212
213 assert('Integer#succ', '15.2.8.3.21') do
214   assert_equal 2, 1.succ
215 end
216
217 assert('Integer#times', '15.2.8.3.22') do
218   a = 0
219   3.times do
220     a += 1
221   end
222   assert_equal 3, a
223 end
224
225 assert('Integer#to_f', '15.2.8.3.23') do
226   skip unless Object.const_defined?(:Float)
227   assert_equal 1.0, 1.to_f
228 end
229
230 assert('Integer#to_i', '15.2.8.3.24') do
231   assert_equal 1, 1.to_i
232 end
233
234 assert('Integer#to_s', '15.2.8.3.25') do
235   assert_equal "1", 1.to_s
236   assert_equal "-1", -1.to_s
237   assert_equal "1010", 10.to_s(2)
238   assert_equal "a", 10.to_s(36)
239   assert_equal "-a", -10.to_s(36)
240   assert_equal "30071", 12345.to_s(8)
241   assert_raise(ArgumentError) { 10.to_s(-1) }
242   assert_raise(ArgumentError) { 10.to_s(0) }
243   assert_raise(ArgumentError) { 10.to_s(1) }
244   assert_raise(ArgumentError) { 10.to_s(37) }
245 end
246
247 assert('Integer#truncate', '15.2.8.3.26') do
248   assert_equal 1, 1.truncate
249 end
250
251 assert('Integer#upto', '15.2.8.3.27') do
252   a = 0
253   1.upto(3) do |i|
254     a += i
255   end
256   assert_equal 6, a
257 end
258
259 assert('Integer#divmod', '15.2.8.3.30') do
260   assert_equal [ 0,  0],   0.divmod(1)
261   assert_equal [ 0,  1],   1.divmod(3)
262   assert_equal [ 3,  0],   3.divmod(1)
263   assert_equal [ 2,  6],  20.divmod(7)
264   assert_equal [-1,  2],  -3.divmod(5)
265   assert_equal [-2, -1],  25.divmod(-13)
266   assert_equal [ 1, -6], -13.divmod(-7)
267 end