4 assert('Integer', '15.2.8') do
5 assert_equal Class, Integer.class
8 assert('Integer#+', '15.2.8.3.1') do
10 b = 1+1.0 if Object.const_defined?(:Float)
13 assert_equal 2.0, b if Object.const_defined?(:Float)
15 assert_raise(TypeError){ 0+nil }
16 assert_raise(TypeError){ 1+nil }
18 c = Mrbtest::FIXNUM_MAX + 1
19 d = Mrbtest::FIXNUM_MAX.__send__(:+, 1)
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
29 assert('Integer#-', '15.2.8.3.2') do
31 b = 2-1.0 if Object.const_defined?(:Float)
34 assert_equal 1.0, b if Object.const_defined?(:Float)
36 c = Mrbtest::FIXNUM_MIN - 1
37 d = Mrbtest::FIXNUM_MIN.__send__(:-, 1)
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
47 assert('Integer#*', '15.2.8.3.3') do
49 b = 1*1.0 if Object.const_defined?(:Float)
52 assert_equal 1.0, b if Object.const_defined?(:Float)
54 assert_raise(TypeError){ 0*nil }
55 assert_raise(TypeError){ 1*nil }
57 c = Mrbtest::FIXNUM_MAX * 2
58 d = Mrbtest::FIXNUM_MAX.__send__(:*, 2)
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
68 assert('Integer#/', '15.2.8.3.4') do
76 assert('Integer#%', '15.2.8.3.5') do
100 assert('Integer#<=>', '15.2.9.3.6') do
110 assert('Integer#==', '15.2.8.3.7') do
118 assert('Integer#~', '15.2.8.3.8') do
124 assert('Integer#&', '15.2.8.3.9') do
129 assert_equal 1, 5 & 3
132 assert('Integer#|', '15.2.8.3.10') do
137 assert_equal 7, 5 | 3
140 assert('Integer#^', '15.2.8.3.11') do
145 assert_equal 6, 5 ^ 3
148 assert('Integer#<<', '15.2.8.3.12') do
152 assert_equal 46, 23 << 1
154 # Left Shift by a negative is Right Shift
155 assert_equal 23, 46 << -1
157 # Left Shift by 31 is bitShift overflow to SignedInt
158 assert_equal 2147483648, 1 << 31
160 # -3 Left Shift by 30 is bitShift overflow to SignedInt
161 assert_equal(-3221225472, -3 << 30)
164 assert('Integer#>>', '15.2.8.3.13') do
168 assert_equal 23, 46 >> 1
170 # Right Shift by a negative is Left Shift
171 assert_equal 46, 23 >> -1
173 # Don't raise on large Right Shift
174 assert_equal 0, 23 >> 128
177 assert('Integer#ceil', '15.2.8.3.14') do
178 assert_equal 10, 10.ceil
181 assert('Integer#downto', '15.2.8.3.15') do
189 assert('Integer#eql?', '15.2.8.3.16') do
199 assert('Integer#floor', '15.2.8.3.17') do
205 assert('Integer#next', '15.2.8.3.19') do
206 assert_equal 2, 1.next
209 assert('Integer#round', '15.2.8.3.20') do
210 assert_equal 1, 1.round
213 assert('Integer#succ', '15.2.8.3.21') do
214 assert_equal 2, 1.succ
217 assert('Integer#times', '15.2.8.3.22') do
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
230 assert('Integer#to_i', '15.2.8.3.24') do
231 assert_equal 1, 1.to_i
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)
239 assert('Integer#truncate', '15.2.8.3.26') do
240 assert_equal 1, 1.truncate
243 assert('Integer#upto', '15.2.8.3.27') do
251 assert('Integer#divmod', '15.2.8.3.30') do
252 assert_equal [ 0, 0], 0.divmod(1)
253 assert_equal [ 0, 1], 1.divmod(3)
254 assert_equal [ 3, 0], 3.divmod(1)
255 assert_equal [ 2, 6], 20.divmod(7)
256 assert_equal [-1, 2], -3.divmod(5)
257 assert_equal [-2, -1], 25.divmod(-13)
258 assert_equal [ 1, -6], -13.divmod(-7)