source: EcnlProtoTool/trunk/mruby-2.1.1/test/t/integer.rb@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 5.1 KB
Line 
1##
2# Integer ISO Test
3
4assert('Integer', '15.2.8') do
5 assert_equal Class, Integer.class
6end
7
8assert('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
27end
28
29assert('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
45end
46
47assert('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
66end
67
68assert('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
74end
75
76assert('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
98end
99
100assert('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)
108end
109
110assert('Integer#==', '15.2.8.3.7') do
111 a = 1==0
112 b = 1==1
113
114 assert_false a
115 assert_true b
116end
117
118assert('Integer#~', '15.2.8.3.8') do
119 # Complement
120 assert_equal(-1, ~0)
121 assert_equal(-3, ~2)
122end
123
124assert('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
130end
131
132assert('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
138end
139
140assert('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
146end
147
148assert('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)
162end
163
164assert('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
175end
176
177assert('Integer#ceil', '15.2.8.3.14') do
178 assert_equal 10, 10.ceil
179end
180
181assert('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
187end
188
189assert('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
197end
198
199assert('Integer#floor', '15.2.8.3.17') do
200 a = 1.floor
201
202 assert_equal 1, a
203end
204
205assert('Integer#next', '15.2.8.3.19') do
206 assert_equal 2, 1.next
207end
208
209assert('Integer#round', '15.2.8.3.20') do
210 assert_equal 1, 1.round
211end
212
213assert('Integer#succ', '15.2.8.3.21') do
214 assert_equal 2, 1.succ
215end
216
217assert('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
223end
224
225assert('Integer#to_f', '15.2.8.3.23') do
226 skip unless Object.const_defined?(:Float)
227 assert_equal 1.0, 1.to_f
228end
229
230assert('Integer#to_i', '15.2.8.3.24') do
231 assert_equal 1, 1.to_i
232end
233
234assert('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) }
245end
246
247assert('Integer#truncate', '15.2.8.3.26') do
248 assert_equal 1, 1.truncate
249end
250
251assert('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
257end
258
259assert('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)
267end
Note: See TracBrowser for help on using the repository browser.