diff options
Diffstat (limited to 'test/t/bs_block.rb')
| -rw-r--r-- | test/t/bs_block.rb | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/test/t/bs_block.rb b/test/t/bs_block.rb new file mode 100644 index 000000000..b290cb914 --- /dev/null +++ b/test/t/bs_block.rb @@ -0,0 +1,390 @@ +## +# Bootstrap tests for blocks + +assert('BS Block 1') do + 1.times{ + begin + a = 1 + ensure + foo = nil + end + } == 1 +end + +assert('BS Block 2') do + [1,2,3].find{|x| x == 2} == 2 +end + +assert('BS Block 3') do + class E + include Enumerable + def each(&block) + [1, 2, 3].each(&block) + end + end + E.new.find {|x| x == 2 } == 2 +end + +assert('BS Block 3') do + sum = 0 + for x in [1, 2, 3] + sum += x + end + sum == 6 +end + +assert('BS Block 4') do + sum = 0 + for x in (1..5) + sum += x + end + sum == 15 +end + +assert('BS Block 5') do + sum = 0 + for x in [] + sum += x + end + sum == 0 +end + +assert('BS Block 6') do + ans = [] + 1.times{ + for n in 1..3 + a = n + ans << a + end + } == 1 +end + +assert('BS Block 7') do + ans = [] + for m in 1..3 + for n in 1..3 + a = [m, n] + ans << a + end + end == 1..3 +end + +assert('BS Block 8') do + (1..3).to_a == [1, 2, 3] +end + +assert('BS Block 9') do + (1..3).map{|e| + e * 4 + } == [4, 8, 12] +end + +assert('BS Block 10') do + def m + yield + end + def n + yield + end + + m{ + n{ + 100 + } + } == 100 +end + +assert('BS Block 11') do + def m + yield 1 + end + + m{|ib| + m{|jb| + i = 20 + } + } == 20 +end + +assert('BS Block 12') do + def m + yield 1 + end + + m{|ib| + m{|jb| + ib = 20 + kb = 2 + } + } == 2 +end + +assert('BS Block 13') do + def iter1 + iter2{ + yield + } + end + + def iter2 + yield + end + + iter1{ + jb = 2 + iter1{ + jb = 3 + } + jb + } == 3 +end + +assert('BS Block 14') do + def iter1 + iter2{ + yield + } + end + + def iter2 + yield + end + + iter1{ + jb = 2 + iter1{ + jb + } + jb + } == 2 +end + +assert('BS Block 15') do + def m + yield 1 + end + m{|ib| + ib*2 + } == 2 +end + +assert('BS Block 16') do + def m + yield 12345, 67890 + end + m{|ib,jb| + ib*2+jb + } == 92580 +end + +assert('BS Block 17') do + def iter + yield 10 + end + + a = nil + [iter{|a| + a + }, a] == [10, nil] +end + +assert('BS Block 18') do + def iter + yield 10 + end + + iter{|a| + iter{|a| + a + 1 + } + a + } == 21 +end + +assert('BS Block 19') do + 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] == [10, 20, 30, 40, nil, nil, nil, nil] +end + +assert('BS Block 20') do + def iter + yield 10, 20, 30, 40 + end + + a = b = nil + iter{|a, b, c, d| + [a, b, c, d] + } + [a, b] == [10, 20, 30, 40, nil, nil] +end + +assert('BS Block 21') do + def iter + yield 1, 2 + end + + iter{|a, *b| + [a, b] + } == [1, [2]] +end + +assert('BS Block 22') do + def iter + yield 1, 2 + end + + iter{|*a| + [a] + } == [[1, 2]] +end + +assert('BS Block 23') do + def iter + yield 1, 2 + end + + iter{|a, b, *c| + [a, b, c] + } == [1, 2, []] +end + +assert('BS Block 24') do + def m + yield + end + m{ + 1 + } == 1 +end + +assert('BS Block 25') do + def m + yield 123 + end + m{|ib| + m{|jb| + ib*jb + } + } == 15129 +end + +assert('BS Block 26') do + def m a + yield a + end + m(1){|ib| + m(2){|jb| + ib*jb + } + } == 2 +end + +assert('BS Block 27') do + sum = 0 + 3.times{|ib| + 2.times{|jb| + sum += ib + jb + }} + sum == 9 +end + +assert('BS Block 28') do + 3.times{|bl| + break 10 + } == 10 +end + +assert('BS Block 29') do + def iter + yield 1,2,3 + end + + iter{|i, j| + [i, j] + } == [1, 2] +end + +assert('BS Block 30') do + def iter + yield 1 + end + + iter{|i, j| + [i, j] + } == [1, nil] +end + +assert('BS Block [ruby-dev:31147]') do + def m + yield + end + m{|&b| b}.inspect == 'nil' +end + +assert('BS Block [ruby-dev:31160]') do + def m() + yield + end + m {|(v,(*))|}.inspect == 'nil' +end + +assert('BS Block 31') do + def m() + yield + end + m {|((*))|}.inspect == 'nil' +end + +assert('BS Block [ruby-dev:31440]') do + def m + yield [0] + end + m{|v, &b| v}.inspect == '[0]' +end + +assert('BS Block 32') do + r = false; 1.times{|&b| r = b}; r.class == NilClass +end + +assert('BS Block [ruby-core:14395]') do + class Controller + def respond_to(&block) + responder = Responder.new + block.call(responder) + responder.respond + end + def test_for_bug + respond_to{|format| + format.js{ + "in test" + render{|obj| + obj + } + } + } + end + def render(&block) + "in render" + end + end + + class Responder + def method_missing(symbol, &block) + "enter method_missing" + @response = Proc.new{ + 'in method missing' + block.call + } + "leave method_missing" + end + def respond + @response.call + end + end + t = Controller.new + t.test_for_bug +end |
