File: test_blocks_procs.rb

package info (click to toggle)
jruby 1.7.26-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 84,572 kB
  • sloc: ruby: 669,910; java: 253,056; xml: 35,152; ansic: 9,187; yacc: 7,267; cpp: 5,244; sh: 1,036; makefile: 345; jsp: 48; tcl: 40
file content (104 lines) | stat: -rw-r--r-- 4,792 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
require 'test/unit'

class TestBlocksProcs < Test::Unit::TestCase
  IS19 = RUBY_VERSION =~ /1\.9/

  def testBasicProc
    proc = proc {|i| i}
    assert_equal(2, proc.call(2))
    assert_equal(3, proc.call(3))
    
    proc = proc {|i| i*2}
    assert_equal(4, proc.call(2))
    assert_equal(6, proc.call(3))
  end

  def testProcScoping
    my_proc1 = nil
    my_proc2 = nil
    x = 0
    proc { 
      iii=5	
      my_proc1 = proc{|i|
        iii = i
      }
      my_proc2 = proc {
        x = iii			# nested variables shared by procs
      }
      # scope of nested variables
      assert_not_nil(defined?(iii))
    }.call
    assert(!defined?(iii))		# out of scope

    my_proc1.call(5)
    my_proc2.call
    assert_equal(5, x)
  end

  def testYield
    o = "dummy object"
    def o.f; yield nil; end;       o.f {|a| assert_nil(a)}
    def o.f; yield 1; end;         o.f {|a| assert_equal(1, a)}
    def o.f; yield []; end;        o.f {|a| assert_equal([], a)}
    def o.f; yield [1]; end;       o.f {|a| assert_equal([1], a)}
    def o.f; yield [nil]; end;     o.f {|a| assert_equal([nil], a)}
    def o.f; yield [[]]; end;      o.f {|a| assert_equal([[]], a)}
    def o.f; yield [*[]]; end;     o.f {|a| assert_equal([], a)}
    def o.f; yield [*[1]]; end;    o.f {|a| assert_equal([1], a)}
    def o.f; yield [*[1,2]]; end;  o.f {|a| assert_equal([1,2], a)}
    
    def o.f; yield *nil; end;      o.f {|a| assert_nil(a)}
    def o.f; yield *1; end;        o.f {|a| assert_equal(1, a)}
    def o.f; yield *[]; end;       o.f {|a| assert_nil(a)}
    def o.f; yield *[1]; end;      o.f {|a| assert_equal(1, a)}
    def o.f; yield *[nil]; end;    o.f {|a| assert_nil(a)}
    def o.f; yield *[[]]; end;     o.f {|a| assert_equal([], a)}
    def o.f; yield *[*[]]; end;    o.f {|a| assert_nil(a)}
    def o.f; yield *[*[1]]; end;   o.f {|a| assert_equal(1, a)}
    def o.f; yield *[*[1,2]]; end; o.f {|a| assert_equal(IS19 ? 1 : [1,2], a)}
    
    def o.f; yield nil; end;       o.f {|*a| assert_equal([nil], a)}
    def o.f; yield 1; end;         o.f {|*a| assert_equal([1], a)}
    def o.f; yield []; end;        o.f {|*a| assert_equal([[]], a)}
    def o.f; yield [1]; end;       o.f {|*a| assert_equal([[1]], a)}
    def o.f; yield [nil]; end;     o.f {|*a| assert_equal([[nil]], a)}
    def o.f; yield [[]]; end;      o.f {|*a| assert_equal([[[]]], a)}
    def o.f; yield [*[]]; end;     o.f {|*a| assert_equal([[]], a)}
    def o.f; yield [*[1]]; end;    o.f {|*a| assert_equal([[1]], a)}
    def o.f; yield [*[1,2]]; end;  o.f {|*a| assert_equal([[1,2]], a)}
    
    def o.f; yield *nil; end;      o.f {|*a| assert_equal(IS19 ? [] : [nil], a)}
    def o.f; yield *1; end;        o.f {|*a| assert_equal([1], a)}
    def o.f; yield *[]; end;       o.f {|*a| assert_equal([], a)}
    def o.f; yield *[1]; end;      o.f {|*a| assert_equal([1], a)}
    def o.f; yield *[nil]; end;    o.f {|*a| assert_equal([nil], a)}
  	def o.f; yield *[[]]; end;     o.f {|*a| assert_equal([[]], a)}
    def o.f; yield *[*[]]; end;    o.f {|*a| assert_equal([], a)}
    def o.f; yield *[*[1]]; end;   o.f {|*a| assert_equal([1], a)}
    def o.f; yield *[*[1,2]]; end; o.f {|*a| assert_equal([1,2], a)}
    
    def o.f; yield nil; end;       o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield 1; end;         o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
    def o.f; yield []; end;        o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield [1]; end;       o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
    def o.f; yield [nil]; end;     o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield [[]]; end;      o.f {|a,b,*c| assert([a,b,c] == [[], nil, []])}
    def o.f; yield [*[]]; end;     o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield [*[1]]; end;    o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
    def o.f; yield [*[1,2]]; end;  o.f {|a,b,*c| assert([a,b,c] == [1, 2, []])}
    
    def o.f; yield *nil; end;      o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield *1; end;        o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
    def o.f; yield *[]; end;       o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield *[1]; end;      o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}

    def o.f; yield *[nil]; end;    o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    # FIXME: JRUBY-6499
    def o.f; yield *[[]]; end;     o.f {|a,b,*c| assert_equal(IS19 ? [nil, nil, []] : [[], nil, []], [a,b,c])} unless defined?(JRUBY_VERSION)
    def o.f; yield *[*[]]; end;    o.f {|a,b,*c| assert([a,b,c] == [nil, nil, []])}
    def o.f; yield *[*[1]]; end;   o.f {|a,b,*c| assert([a,b,c] == [1, nil, []])}
    def o.f; yield *[*[1,2]]; end; o.f {|a,b,*c| assert([a,b,c] == [1, 2, []])}

  end

end