source: EcnlProtoTool/trunk/mruby-1.2.0/test/t/kernel.rb@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 11.4 KB
Line 
1##
2# Kernel ISO Test
3
4assert('Kernel', '15.3.1') do
5 assert_equal Module, Kernel.class
6end
7
8assert('Kernel.block_given?', '15.3.1.2.2') do
9 def bg_try(&b)
10 if Kernel.block_given?
11 yield
12 else
13 "no block"
14 end
15 end
16
17 assert_false Kernel.block_given?
18 # test without block
19 assert_equal "no block", bg_try
20 # test with block
21 assert_equal "block" do
22 bg_try { "block" }
23 end
24 # test with block
25 assert_equal "block" do
26 bg_try do
27 "block"
28 end
29 end
30end
31
32# Kernel.eval is provided by the mruby-gem mrbgem. '15.3.1.2.3'
33
34assert('Kernel.global_variables', '15.3.1.2.4') do
35 assert_equal Array, Kernel.global_variables.class
36end
37
38assert('Kernel.iterator?', '15.3.1.2.5') do
39 assert_false Kernel.iterator?
40end
41
42assert('Kernel.lambda', '15.3.1.2.6') do
43 l = Kernel.lambda do
44 true
45 end
46
47 m = Kernel.lambda(&l)
48
49 assert_true l.call
50 assert_equal Proc, l.class
51 assert_true m.call
52 assert_equal Proc, m.class
53end
54
55# Not implemented at the moment
56#assert('Kernel.local_variables', '15.3.1.2.7') do
57# Kernel.local_variables.class == Array
58#end
59
60assert('Kernel.loop', '15.3.1.2.8') do
61 i = 0
62
63 Kernel.loop do
64 i += 1
65 break if i == 100
66 end
67
68 assert_equal 100, i
69end
70
71assert('Kernel.p', '15.3.1.2.9') do
72 # TODO search for a way to test p to stdio
73 assert_true true
74end
75
76assert('Kernel.print', '15.3.1.2.10') do
77 # TODO search for a way to test print to stdio
78 assert_true true
79end
80
81assert('Kernel.puts', '15.3.1.2.11') do
82 # TODO search for a way to test puts to stdio
83 assert_true true
84end
85
86assert('Kernel.raise', '15.3.1.2.12') do
87 assert_raise RuntimeError do
88 Kernel.raise
89 end
90
91 assert_raise RuntimeError do
92 Kernel.raise RuntimeError.new
93 end
94end
95
96assert('Kernel#__id__', '15.3.1.3.3') do
97 assert_equal Fixnum, __id__.class
98end
99
100assert('Kernel#__send__', '15.3.1.3.4') do
101 # test with block
102 l = __send__(:lambda) do
103 true
104 end
105
106 assert_true l.call
107 assert_equal Proc, l.class
108 # test with argument
109 assert_true __send__(:respond_to?, :nil?)
110 # test without argument and without block
111 assert_equal Array, __send__(:public_methods).class
112end
113
114assert('Kernel#block_given?', '15.3.1.3.6') do
115 def bg_try(&b)
116 if block_given?
117 yield
118 else
119 "no block"
120 end
121 end
122
123 assert_false block_given?
124 assert_equal "no block", bg_try
125 assert_equal "block" do
126 bg_try { "block" }
127 end
128 assert_equal "block" do
129 bg_try do
130 "block"
131 end
132 end
133end
134
135assert('Kernel#class', '15.3.1.3.7') do
136 assert_equal Module, Kernel.class
137end
138
139assert('Kernel#clone', '15.3.1.3.8') do
140 class KernelCloneTest
141 def initialize
142 @v = 0
143 end
144
145 def get
146 @v
147 end
148
149 def set(v)
150 @v = v
151 end
152 end
153
154 a = KernelCloneTest.new
155 a.set(1)
156 b = a.clone
157
158 def a.test
159 end
160 a.set(2)
161 c = a.clone
162
163 immutables = [ 1, :foo, true, false, nil ]
164 error_count = 0
165 immutables.each do |i|
166 begin
167 i.clone
168 rescue TypeError
169 error_count += 1
170 end
171 end
172
173 assert_equal 2, a.get
174 assert_equal 1, b.get
175 assert_equal 2, c.get
176 assert_true a.respond_to?(:test)
177 assert_false b.respond_to?(:test)
178 assert_true c.respond_to?(:test)
179end
180
181assert('Kernel#dup', '15.3.1.3.9') do
182 class KernelDupTest
183 def initialize
184 @v = 0
185 end
186
187 def get
188 @v
189 end
190
191 def set(v)
192 @v = v
193 end
194 end
195
196 a = KernelDupTest.new
197 a.set(1)
198 b = a.dup
199
200 def a.test
201 end
202 a.set(2)
203 c = a.dup
204
205 immutables = [ 1, :foo, true, false, nil ]
206 error_count = 0
207 immutables.each do |i|
208 begin
209 i.dup
210 rescue TypeError
211 error_count += 1
212 end
213 end
214
215 assert_equal immutables.size, error_count
216 assert_equal 2, a.get
217 assert_equal 1, b.get
218 assert_equal 2, c.get
219 assert_true a.respond_to?(:test)
220 assert_false b.respond_to?(:test)
221 assert_false c.respond_to?(:test)
222end
223
224# Kernel#eval is provided by mruby-eval mrbgem '15.3.1.3.12'
225
226assert('Kernel#extend', '15.3.1.3.13') do
227 class Test4ExtendClass
228 end
229
230 module Test4ExtendModule
231 def test_method; end
232 end
233
234 a = Test4ExtendClass.new
235 a.extend(Test4ExtendModule)
236 b = Test4ExtendClass.new
237
238 assert_true a.respond_to?(:test_method)
239 assert_false b.respond_to?(:test_method)
240end
241
242assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
243 module Test4ExtendModule
244 def test_method; end
245 end
246 # This would crash...
247 extend(Test4ExtendModule)
248
249 assert_true respond_to?(:test_method)
250end
251
252assert('Kernel#global_variables', '15.3.1.3.14') do
253 assert_equal Array, global_variables.class
254end
255
256assert('Kernel#hash', '15.3.1.3.15') do
257 assert_equal hash, hash
258end
259
260assert('Kernel#inspect', '15.3.1.3.17') do
261 s = inspect
262
263 assert_equal String, s.class
264 assert_equal "main", s
265end
266
267assert('Kernel#instance_variable_defined?', '15.3.1.3.20') do
268 o = Object.new
269 o.instance_variable_set(:@a, 1)
270
271 assert_true o.instance_variable_defined?("@a")
272 assert_false o.instance_variable_defined?("@b")
273 assert_true o.instance_variable_defined?("@a"[0,2])
274 assert_true o.instance_variable_defined?("@abc"[0,2])
275end
276
277assert('Kernel#instance_variables', '15.3.1.3.23') do
278 o = Object.new
279 o.instance_eval do
280 @a = 11
281 @b = 12
282 end
283 ivars = o.instance_variables
284
285 assert_equal Array, ivars.class,
286 assert_equal(2, ivars.size)
287 assert_true ivars.include?(:@a)
288 assert_true ivars.include?(:@b)
289end
290
291assert('Kernel#is_a?', '15.3.1.3.24') do
292 assert_true is_a?(Kernel)
293 assert_false is_a?(Array)
294
295 assert_raise TypeError do
296 42.is_a?(42)
297 end
298end
299
300assert('Kernel#iterator?', '15.3.1.3.25') do
301 assert_false iterator?
302end
303
304assert('Kernel#kind_of?', '15.3.1.3.26') do
305 assert_true kind_of?(Kernel)
306 assert_false kind_of?(Array)
307end
308
309assert('Kernel#lambda', '15.3.1.3.27') do
310 l = lambda do
311 true
312 end
313
314 m = lambda(&l)
315
316 assert_true l.call
317 assert_equal Proc, l.class
318 assert_true m.call
319 assert_equal Proc, m.class
320end
321
322# Not implemented yet
323#assert('Kernel#local_variables', '15.3.1.3.28') do
324# local_variables.class == Array
325#end
326
327assert('Kernel#loop', '15.3.1.3.29') do
328 i = 0
329
330 loop do
331 i += 1
332 break if i == 100
333 end
334
335 assert_equal i, 100
336end
337
338assert('Kernel#method_missing', '15.3.1.3.30') do
339 class MMTestClass
340 def method_missing(sym)
341 "A call to #{sym}"
342 end
343 end
344 mm_test = MMTestClass.new
345 assert_equal 'A call to no_method_named_this', mm_test.no_method_named_this
346
347 a = String.new
348 begin
349 a.no_method_named_this
350 rescue NoMethodError => e
351 assert_equal "undefined method 'no_method_named_this' for \"\"", e.message
352 end
353
354 class ShortInspectClass
355 def inspect
356 'An inspect string'
357 end
358 end
359 b = ShortInspectClass.new
360 begin
361 b.no_method_named_this
362 rescue NoMethodError => e
363 assert_equal "undefined method 'no_method_named_this' for An inspect string", e.message
364 end
365
366 class LongInspectClass
367 def inspect
368 "A" * 70
369 end
370 end
371 c = LongInspectClass.new
372 begin
373 c.no_method_named_this
374 rescue NoMethodError => e
375 assert_equal "undefined method 'no_method_named_this' for #{c.to_s}", e.message
376 end
377
378 class NoInspectClass
379 undef inspect
380 end
381 d = NoInspectClass.new
382 begin
383 d.no_method_named_this
384 rescue NoMethodError => e
385 assert_equal "undefined method 'no_method_named_this' for #{d.to_s}", e.message
386 end
387end
388
389assert('Kernel#methods', '15.3.1.3.31') do
390 assert_equal Array, methods.class
391end
392
393assert('Kernel#nil?', '15.3.1.3.32') do
394 assert_false nil?
395end
396
397assert('Kernel#object_id', '15.3.1.3.33') do
398 a = ""
399 b = ""
400 assert_not_equal a.object_id, b.object_id
401
402 assert_kind_of Numeric, object_id
403 assert_kind_of Numeric, "".object_id
404 assert_kind_of Numeric, true.object_id
405 assert_kind_of Numeric, false.object_id
406 assert_kind_of Numeric, nil.object_id
407 assert_kind_of Numeric, :no.object_id
408 assert_kind_of Numeric, 1.object_id
409 assert_kind_of Numeric, 1.0.object_id
410end
411
412# Kernel#p is defined in mruby-print mrbgem. '15.3.1.3.34'
413
414# Kernel#print is defined in mruby-print mrbgem. '15.3.1.3.35'
415
416assert('Kernel#private_methods', '15.3.1.3.36') do
417 assert_equal Array, private_methods.class
418end
419
420assert('Kernel#protected_methods', '15.3.1.3.37') do
421 assert_equal Array, protected_methods.class
422end
423
424assert('Kernel#public_methods', '15.3.1.3.38') do
425 assert_equal Array, public_methods.class
426end
427
428# Kernel#puts is defined in mruby-print mrbgem. '15.3.1.3.39'
429
430assert('Kernel#raise', '15.3.1.3.40') do
431 assert_raise RuntimeError do
432 raise
433 end
434
435 assert_raise RuntimeError do
436 raise RuntimeError.new
437 end
438end
439
440assert('Kernel#remove_instance_variable', '15.3.1.3.41') do
441 class Test4RemoveInstanceVar
442 attr_reader :var
443 def initialize
444 @var = 99
445 end
446 def remove
447 remove_instance_variable(:@var)
448 end
449 end
450
451 tri = Test4RemoveInstanceVar.new
452 assert_equal 99, tri.var
453 tri.remove
454 assert_equal nil, tri.var
455 assert_raise NameError do
456 tri.remove
457 end
458end
459
460# Kernel#require is defined in mruby-require. '15.3.1.3.42'
461
462assert('Kernel#respond_to?', '15.3.1.3.43') do
463 class Test4RespondTo
464 def valid_method; end
465
466 def test_method; end
467 undef test_method
468 end
469
470 assert_raise TypeError do
471 Test4RespondTo.new.respond_to?(1)
472 end
473
474 assert_raise ArgumentError do
475 Test4RespondTo.new.respond_to?
476 end
477
478 assert_raise ArgumentError do
479 Test4RespondTo.new.respond_to? :a, true, :aa
480 end
481
482 assert_true respond_to?(:nil?)
483 assert_true Test4RespondTo.new.respond_to?(:valid_method)
484 assert_true Test4RespondTo.new.respond_to?('valid_method')
485 assert_false Test4RespondTo.new.respond_to?(:test_method)
486end
487
488assert('Kernel#send', '15.3.1.3.44') do
489 # test with block
490 l = send(:lambda) do
491 true
492 end
493
494 assert_true l.call
495 assert_equal l.class, Proc
496 # test with argument
497 assert_true send(:respond_to?, :nil?)
498 # test without argument and without block
499 assert_equal send(:public_methods).class, Array
500end
501
502assert('Kernel#singleton_methods', '15.3.1.3.45') do
503 assert_equal singleton_methods.class, Array
504end
505
506assert('Kernel#to_s', '15.3.1.3.46') do
507 assert_equal to_s.class, String
508end
509
510assert('Kernel.local_variables', '15.3.1.2.7') do
511 a, b = 0, 1
512 a += b
513
514 vars = Kernel.local_variables.sort
515 assert_equal [:a, :b, :vars], vars
516
517 Proc.new {
518 c = 2
519 vars = Kernel.local_variables.sort
520 assert_equal [:a, :b, :c, :vars], vars
521 }.call
522end
523
524assert('Kernel#!=') do
525 str1 = "hello"
526 str2 = str1
527 str3 = "world"
528
529 assert_false (str1[1] != 'e')
530 assert_true (str1 != str3)
531 assert_false (str2 != str1)
532end
533
534# operator "!~" is defined in ISO Ruby 11.4.4.
535assert('Kernel#!~') do
536 x = "x"
537 def x.=~(other)
538 other == "x"
539 end
540 assert_false x !~ "x"
541 assert_true x !~ "z"
542
543 y = "y"
544 def y.=~(other)
545 other == "y"
546 end
547 def y.!~(other)
548 other == "not y"
549 end
550 assert_false y !~ "y"
551 assert_false y !~ "z"
552 assert_true y !~ "not y"
553end
554
555assert('Kernel#respond_to_missing?') do
556 class Test4RespondToMissing
557 def respond_to_missing?(method_name, include_private = false)
558 method_name == :a_method
559 end
560 end
561
562 assert_true Test4RespondToMissing.new.respond_to?(:a_method)
563 assert_false Test4RespondToMissing.new.respond_to?(:no_method)
564end
565
566assert('Kernel#global_variables') do
567 variables = global_variables
568 1.upto(9) do |i|
569 assert_equal variables.include?(:"$#{i}"), true
570 end
571end
572
573assert('Kernel#define_singleton_method') do
574 o = Object.new
575 ret = o.define_singleton_method(:test_method) do
576 :singleton_method_ok
577 end
578 assert_equal :test_method, ret
579 assert_equal :singleton_method_ok, o.test_method
580end
581
582assert('stack extend') do
583 def recurse(count, stop)
584 return count if count > stop
585 recurse(count+1, stop)
586 end
587
588 assert_equal 6, recurse(0, 5)
589end
590
Note: See TracBrowser for help on using the repository browser.