mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 3a47cf3395
			
		
	
	
		3a47cf3395
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			567 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			567 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| assert_equal %q{1}, %q{
 | |
|   1.times{
 | |
|     begin
 | |
|       a = 1
 | |
|     ensure
 | |
|       foo = nil
 | |
|     end
 | |
|   }
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   [1,2,3].find{|x| x == 2}
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   class E
 | |
|     include Enumerable
 | |
|     def each(&block)
 | |
|       [1, 2, 3].each(&block)
 | |
|     end
 | |
|   end
 | |
|   E.new.find {|x| x == 2 }
 | |
| }
 | |
| assert_equal %q{6}, %q{
 | |
|   sum = 0
 | |
|   for x in [1, 2, 3]
 | |
|     sum += x
 | |
|   end
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{15}, %q{
 | |
|   sum = 0
 | |
|   for x in (1..5)
 | |
|     sum += x
 | |
|   end
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{0}, %q{
 | |
|   sum = 0
 | |
|   for x in []
 | |
|     sum += x
 | |
|   end
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{1}, %q{
 | |
|   ans = []
 | |
|   1.times{
 | |
|     for n in 1..3
 | |
|       a = n
 | |
|       ans << a
 | |
|     end
 | |
|   }
 | |
| }
 | |
| assert_equal %q{1..3}, %q{
 | |
|   ans = []
 | |
|   for m in 1..3
 | |
|     for n in 1..3
 | |
|       a = [m, n]
 | |
|       ans << a
 | |
|     end
 | |
|   end
 | |
| }
 | |
| assert_equal %q{[1, 2, 3]}, %q{
 | |
|   (1..3).to_a
 | |
| }
 | |
| assert_equal %q{[4, 8, 12]}, %q{
 | |
|   (1..3).map{|e|
 | |
|     e * 4
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[1, 2, 3]}, %q{
 | |
|   class C
 | |
|     include Enumerable
 | |
|     def each
 | |
|       [1,2,3].each{|e|
 | |
|         yield e
 | |
|       }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   C.new.to_a
 | |
| }
 | |
| assert_equal %q{[4, 5, 6]}, %q{
 | |
|   class C
 | |
|     include Enumerable
 | |
|     def each
 | |
|       [1,2,3].each{|e|
 | |
|         yield e
 | |
|       }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   C.new.map{|e|
 | |
|     e + 3
 | |
|   }
 | |
| }
 | |
| assert_equal %q{100}, %q{
 | |
|   def m
 | |
|     yield
 | |
|   end
 | |
|   def n
 | |
|     yield
 | |
|   end
 | |
| 
 | |
|   m{
 | |
|     n{
 | |
|       100
 | |
|     }
 | |
|   }
 | |
| }
 | |
| assert_equal %q{20}, %q{
 | |
|   def m
 | |
|     yield 1
 | |
|   end
 | |
| 
 | |
|   m{|ib|
 | |
|     m{|jb|
 | |
|       i = 20
 | |
|     }
 | |
|   }
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   def m
 | |
|     yield 1
 | |
|   end
 | |
| 
 | |
|   m{|ib|
 | |
|     m{|jb|
 | |
|       ib = 20
 | |
|       kb = 2
 | |
|     }
 | |
|   }
 | |
| }
 | |
| assert_equal %q{3}, %q{
 | |
|   def iter1
 | |
|     iter2{
 | |
|       yield
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def iter2
 | |
|     yield
 | |
|   end
 | |
| 
 | |
|   iter1{
 | |
|     jb = 2
 | |
|     iter1{
 | |
|       jb = 3
 | |
|     }
 | |
|     jb
 | |
|   }
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   def iter1
 | |
|     iter2{
 | |
|       yield
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def iter2
 | |
|     yield
 | |
|   end
 | |
| 
 | |
|   iter1{
 | |
|     jb = 2
 | |
|     iter1{
 | |
|       jb
 | |
|     }
 | |
|     jb
 | |
|   }
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   def m
 | |
|     yield 1
 | |
|   end
 | |
|   m{|ib|
 | |
|     ib*2
 | |
|   }
 | |
| }
 | |
| assert_equal %q{92580}, %q{
 | |
|   def m
 | |
|     yield 12345, 67890
 | |
|   end
 | |
|   m{|ib,jb|
 | |
|     ib*2+jb
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[10, nil]}, %q{
 | |
|   def iter
 | |
|     yield 10
 | |
|   end
 | |
| 
 | |
|   a = nil
 | |
|   [iter{|a|
 | |
|     a
 | |
|   }, a]
 | |
| }
 | |
| assert_equal %q{21}, %q{
 | |
|   def iter
 | |
|     yield 10
 | |
|   end
 | |
| 
 | |
|   iter{|a|
 | |
|     iter{|a|
 | |
|       a + 1
 | |
|     } + a
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[10, 20, 30, 40, nil, nil, nil, nil]}, %q{
 | |
|   def iter
 | |
|     yield 10, 20, 30, 40
 | |
|   end
 | |
| 
 | |
|   a = b = c = d = nil
 | |
|   iter{|a, b, c, d|
 | |
|     [a, b, c, d]
 | |
|   } + [a, b, c, d]
 | |
| }
 | |
| assert_equal %q{[10, 20, 30, 40, nil, nil]}, %q{
 | |
|   def iter
 | |
|     yield 10, 20, 30, 40
 | |
|   end
 | |
| 
 | |
|   a = b = nil
 | |
|   iter{|a, b, c, d|
 | |
|     [a, b, c, d]
 | |
|   } + [a, b]
 | |
| }
 | |
| assert_equal %q{[1]}, %q{
 | |
|   $a = []
 | |
| 
 | |
|   def iter
 | |
|     yield 1
 | |
|   end
 | |
| 
 | |
|   def m
 | |
|     x = iter{|x|
 | |
|       $a << x
 | |
|       y = 0
 | |
|     }
 | |
|   end
 | |
|   m
 | |
|   $a
 | |
| }
 | |
| assert_equal %q{[1, [2]]}, %q{
 | |
|   def iter
 | |
|     yield 1, 2
 | |
|   end
 | |
| 
 | |
|   iter{|a, *b|
 | |
|     [a, b]
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[[1, 2]]}, %q{
 | |
|   def iter
 | |
|     yield 1, 2
 | |
|   end
 | |
| 
 | |
|   iter{|*a|
 | |
|     [a]
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[1, 2, []]}, %q{
 | |
|   def iter
 | |
|     yield 1, 2
 | |
|   end
 | |
| 
 | |
|   iter{|a, b, *c|
 | |
|     [a, b, c]
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[1, 2, nil, []]}, %q{
 | |
|   def iter
 | |
|     yield 1, 2
 | |
|   end
 | |
| 
 | |
|   iter{|a, b, c, *d|
 | |
|     [a, b, c, d]
 | |
|   }
 | |
| }
 | |
| assert_equal %q{1}, %q{
 | |
|   def m
 | |
|     yield
 | |
|   end
 | |
|   m{
 | |
|     1
 | |
|   }
 | |
| }
 | |
| assert_equal %q{15129}, %q{
 | |
|   def m
 | |
|     yield 123
 | |
|   end
 | |
|   m{|ib|
 | |
|     m{|jb|
 | |
|       ib*jb
 | |
|     }
 | |
|   }
 | |
| }
 | |
| assert_equal %q{2}, %q{
 | |
|   def m a
 | |
|     yield a
 | |
|   end
 | |
|   m(1){|ib|
 | |
|     m(2){|jb|
 | |
|       ib*jb
 | |
|     }
 | |
|   }
 | |
| }
 | |
| assert_equal %q{9}, %q{
 | |
|   sum = 0
 | |
|   3.times{|ib|
 | |
|     2.times{|jb|
 | |
|       sum += ib + jb
 | |
|     }}
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{10}, %q{
 | |
|   3.times{|bl|
 | |
|     break 10
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[1, 2]}, %q{
 | |
|   def iter
 | |
|     yield 1,2,3
 | |
|   end
 | |
| 
 | |
|   iter{|i, j|
 | |
|     [i, j]
 | |
|   }
 | |
| }
 | |
| assert_equal %q{[1, nil]}, %q{
 | |
|   def iter
 | |
|     yield 1
 | |
|   end
 | |
| 
 | |
|   iter{|i, j|
 | |
|     [i, j]
 | |
|   }
 | |
| }
 | |
| 
 | |
| assert_equal '0', %q{
 | |
| def m()
 | |
| end
 | |
| m {|(v0,*,(*)),|}
 | |
| m {|(*v0,(*)),|}
 | |
| m {|(v0,*v1,(*)),|}
 | |
| m {|((v0,*v1,v2)),|}
 | |
| m {|(v0,*v1,v2),|}
 | |
| m {|(v0,*v1,(v2)),|}
 | |
| m {|((*),*v0,v1),|}
 | |
| m {|((v0),*v1,v2),|}
 | |
| m {|(v0,v1,*v2,v3),|}
 | |
| m {|v0,(v1,*v2,v3),|}
 | |
| m {|(v0,*v1,v2),v3,|}
 | |
| m {|(v0,*v1,v2)|}
 | |
| m {|(v0,*v1,v2),&v3|}
 | |
| m {|(v0,*v1,v2),*|}
 | |
| m {|(v0,*v1,v2),*,&v3|}
 | |
| m {|*,(v0,*v1,v2)|}
 | |
| m {|*,(v0,*v1,v2),&v3|}
 | |
| m {|v0,*,(v1,*v2,v3)|}
 | |
| m {|v0,*,(v1,*v2,v3),&v4|}
 | |
| m {|(v0,*v1,v2),*,v3|}
 | |
| m {|(v0,*v1,v2),*,v3,&v4|}
 | |
| m {|(v0, *v1, v2)|}
 | |
| m {|(*,v)|}
 | |
| 0
 | |
| }, "block parameter (shouldn't SEGV: [ruby-dev:31143])"
 | |
| 
 | |
| assert_equal 'nil', %q{
 | |
|   def m
 | |
|     yield
 | |
|   end
 | |
|   m{|&b| b}.inspect
 | |
| }, '[ruby-dev:31147]'
 | |
| 
 | |
| assert_equal 'nil', %q{
 | |
|   def m()
 | |
|     yield
 | |
|   end
 | |
|   m {|(v,(*))|}.inspect
 | |
| }, '[ruby-dev:31160]'
 | |
| 
 | |
| assert_equal 'nil', %q{
 | |
|   def m()
 | |
|     yield
 | |
|   end
 | |
|   m {|(*,a,b)|}.inspect
 | |
| }, '[ruby-dev:31153]'
 | |
| 
 | |
| assert_equal 'nil', %q{
 | |
|   def m()
 | |
|     yield
 | |
|   end
 | |
|   m {|((*))|}.inspect
 | |
| }
 | |
| 
 | |
| assert_equal %q{[1, 1, [1, nil], [1, nil], [1, nil], [1, nil], [1, 1], 1, [1, nil], [1, nil], [1, nil], [1, nil], [[1, 1], [1, 1]], [1, 1], [1, 1], [1, 1], [1, nil], [1, nil], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [[1, 1], [1, 1]], [1, 1], [1, 1], [[[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[[1, 1], [1, 1]], [[1, 1], [1, 1]]], [[1, 1], [1, 1]], [[1, 1], [1, 1]]]}, %q{
 | |
| def m(ary = [])
 | |
|   yield(ary)
 | |
| end
 | |
| 
 | |
| $ans = []
 | |
| o = 1
 | |
| 5.times{
 | |
|   v,(*) = o; $ans << o
 | |
|   m(o){|(v,(*))| $ans << v}
 | |
|   ((x, y)) = o; $ans << [x, y]
 | |
|   m(o){|((x, y))| $ans << [x, y]}
 | |
|   (((x, y))) = o; $ans << [x, y]
 | |
|   m(o){|(((x, y)))| $ans << [x, y]}
 | |
|   o = [o, o]
 | |
| }; $ans
 | |
| }
 | |
| 
 | |
| assert_equal '0', %q{
 | |
|   def m()
 | |
|     yield [0]
 | |
|   end
 | |
|   m {|*,v| v}.inspect
 | |
| }, '[ruby-dev:31437]'
 | |
| assert_equal '[0]', %q{
 | |
|   def m
 | |
|     yield [0]
 | |
|   end
 | |
|   m{|v, &b| v}.inspect
 | |
| }, '[ruby-dev:31440]'
 | |
| assert_equal 'ok', %q{
 | |
|   begin
 | |
|     lambda{|a|}.call(1, 2)
 | |
|   rescue ArgumentError
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }, '[ruby-dev:31464]'
 | |
| assert_equal 'ok', %q{
 | |
|   begin
 | |
|     lambda{|&b|}.call(3)
 | |
|   rescue ArgumentError
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }, '[ruby-dev:31472]'
 | |
| assert_equal 'ok', %q{
 | |
|   class C
 | |
|     def each
 | |
|       yield [1,2]
 | |
|       yield 1,2
 | |
|     end
 | |
|   end
 | |
|   vs1 = []
 | |
|   C.new.each {|*v| vs1 << v }
 | |
|   vs2 = []
 | |
|   C.new.to_enum.each {|*v| vs2 << v }
 | |
|   vs1 == vs2 ? :ok : :ng
 | |
| }, '[ruby-dev:32329]'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   e = [1,2,3].each
 | |
|   10000.times {
 | |
|     e = [e].each
 | |
|   }
 | |
|   Thread.new { GC.start }.join
 | |
| }, '[ruby-dev:32604]'
 | |
| 
 | |
| 
 | |
| assert_equal '[nil, []]', %q{
 | |
|   def m() yield nil,[] end
 | |
|   l = lambda {|*v| v}
 | |
|   GC.stress=true
 | |
|   r = m(&l)
 | |
|   GC.stress=false
 | |
|   r.inspect
 | |
| }, '[ruby-dev:32567]'
 | |
| 
 | |
| assert_equal NilClass.to_s, %q{
 | |
|   r = false; 1.times{|&b| r = b}; r.class
 | |
| }
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   class C
 | |
|     define_method(:foo) do |arg, &block|
 | |
|       if block then block.call else arg end
 | |
|     end
 | |
|   end
 | |
|   C.new.foo("ng") {"ok"}
 | |
| }, '[ruby-talk:266422]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   class C
 | |
|     define_method(:xyz) do |o, k, &block|
 | |
|       block.call(o, k)
 | |
|     end
 | |
|   end
 | |
|   C.new.xyz("o","k") {|o, k| o+k}
 | |
| }, '[ruby-core:20544]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   class C
 | |
|     define_method(:xyz) do |*args, &block|
 | |
|       block.call(*args)
 | |
|     end
 | |
|   end
 | |
|   C.new.xyz("o","k") {|*args| args.join("")}
 | |
| }, '[ruby-core:20544]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   STDERR.reopen(STDOUT)
 | |
|   class C
 | |
|     define_method(:foo) do |&block|
 | |
|       block.call if block
 | |
|     end
 | |
|     result = "ng"
 | |
|     new.foo() {result = "ok"}
 | |
|     result
 | |
|   end
 | |
| }
 | |
| 
 | |
| assert_equal "ok", %q{
 | |
|   class Bar
 | |
|     def bar; :ok; end
 | |
|   end
 | |
|   def foo
 | |
|     yield(Bar.new) if block_given?
 | |
|   end
 | |
|   foo(&:bar)
 | |
| }, '[ruby-core:14279]'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   class Controller
 | |
|     def respond_to(&block)
 | |
|       responder = Responder.new
 | |
|       block.call(responder)
 | |
|       responder.respond
 | |
|     end
 | |
|     def test_for_bug
 | |
|       respond_to{|format|
 | |
|         format.js{
 | |
|           puts "in test"
 | |
|           render{|obj|
 | |
|             puts obj
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     end
 | |
|     def render(&block)
 | |
|       puts "in render"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   class Responder
 | |
|     def method_missing(symbol, &block)
 | |
|       puts "enter method_missing"
 | |
|       @response = Proc.new{
 | |
|         puts 'in method missing'
 | |
|         block.call
 | |
|       }
 | |
|       puts "leave method_missing"
 | |
|     end
 | |
|     def respond
 | |
|       @response.call
 | |
|     end
 | |
|   end
 | |
|   t = Controller.new
 | |
|   t.test_for_bug
 | |
| }, '[ruby-core:14395]'
 | |
| 
 |