Skip to content

Instantly share code, notes, and snippets.

@dstrelau
Created July 20, 2010 01:54
Show Gist options
  • Save dstrelau/482338 to your computer and use it in GitHub Desktop.
Save dstrelau/482338 to your computer and use it in GitHub Desktop.
Delegation with send(m,*a) { yield }
== DELEGATING WITH method_missing ==
= This works:
send(method, *args, &block)
...but it can use lots of memory: see http://blog.pluron.com/2008/02/rails-faster-as.html
= This works:
if block_given?
then @target.send(method, *args) {|*a| yield(a.length == 1 ? a[0] : a) }
else @target.send(method, *args)
end
= EVERYTHING ELSE IS BROKEN (sorta)
Array passes all specs, without warnings. The only Delegator implementations to do so across all ruby versions are ExplicitBlockDelegator and FancyDelegator.
To see this in the real world, try these (Rails model with a has_many relationship):
Model.things.all.each_slice(2) {|a,b| puts [a,b].inspect } #=> CORRECT because this is an actual Array
Model.things.each_slice(2) {|a,b| puts [a,b].inspect } #=> WRONG
Rails 2.3 uses the DoubleSplatDelegator pattern in association_proxy.rb and association_collection.rb.
= BONUS!
Did you know, `super` implicitly supplies the arguments and block?. As evidenced by the passing tests for SuperDelegator, there is no need for anything like this:
if block_given?
super(method,*args, &block) # or FancyDelegator variant
else
super(method,*args)
end
for klass in Array ExplicitBlockDelegator DoubleSplatDelegator SingleSplatYieldDelegator \
SingleSplatArgsDelegator NoSplatDelegator FancyDelegator SuperDelegator; do
echo "###### $klass"
rvm 1.8.6,1.8.7,1.9.2,ruby-head,jruby,rbx-head exec \
"echo -n '=== ' && ruby -v && ruby -rubygems -w yields.rb $klass && echo"
done
require 'minitest/spec'
require 'minitest/autorun'
require 'enumerator' unless [].respond_to?(:each_slice)
class BaseDelegator
attr_accessor :target
def initialize(target)
@target = target
end
end
class ExplicitBlockDelegator < BaseDelegator
def method_missing(method, *args, &block)
@target.send(method, *args, &block)
end
end
class DoubleSplatDelegator < BaseDelegator
def method_missing(method, *args)
if block_given?
then @target.send(method, *args) {|*a| yield(*a) }
else @target.send(method, *args)
end
end
end
class SingleSplatYieldDelegator < BaseDelegator
def method_missing(method, *args)
if block_given?
then @target.send(method, *args) {|a| yield(*a) }
else @target.send(method, *args)
end
end
end
class SingleSplatArgsDelegator < BaseDelegator
def method_missing(method, *args)
if block_given?
then @target.send(method, *args) {|*a| yield(a) }
else @target.send(method, *args)
end
end
end
class NoSplatDelegator < BaseDelegator
def method_missing(method, *args)
if block_given?
then @target.send(method, *args) {|a| yield(a) }
else @target.send(method, *args)
end
end
end
class FancyDelegator < BaseDelegator
def method_missing(method, *args)
if block_given?
then @target.send(method, *args) {|*a| yield(a.length == 1 ? a[0] : a) }
else @target.send(method, *args)
end
end
end
class SuperDelegator < FancyDelegator
def method_missing(method, *args)
super
end
end
klass = Object.const_get(ARGV.shift)
describe klass do
before do
@delegator = klass.new([1,2])
@results = []
end
it 'one block argument with #fetch' do
@delegator.fetch(2) {|i| i*i }.must_equal 4
end
it 'no block argument with #fetch' do
lambda { @delegator.fetch(2) }.must_raise(IndexError)
end
it 'single block argument with #each' do
@delegator.each {|n| @results << n }
@results.must_equal [1,2]
end
it 'single block argument with #each_slice' do
@delegator.each_slice(2) {|n| @results << n }
@results.must_equal [[1,2]]
end
it 'multi block arguments with #each' do
@delegator.each {|n,m| @results << [n,m] }
@results.must_equal [[1,nil], [2,nil]]
end
it 'multi block arguments with #each_with_index' do
@delegator.each_with_index {|n,m| @results << [n,m] }
@results.must_equal [[1,0], [2,1]]
end
it 'multi block arguments with #each_slice' do
@delegator.each_slice(2) {|n,m| @results << [n,m] }
@results.must_equal [[1,2]]
end
it 'should instance_eval' do
@delegator.instance_eval { size }.must_equal 2
end
end
###### Array
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 28079
# Running tests:
........
Finished tests in 0.001457s, 5490.7344 tests/s, 5490.7344 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 38797
# Running tests:
........
Finished tests in 0.001950s, 4102.5641 tests/s, 4102.5641 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
........
Finished in 0.001286 seconds.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 47414
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 52191
# Running tests:
........
Finished tests in 0.001920s, 4166.6667 tests/s, 4166.6667 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 57001
# Running tests:
........
Finished tests in 0.064000s, 125.0000 tests/s, 125.0000 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 52065
# Running tests:
........
Finished tests in 0.004378s, 1827.3184 tests/s, 1827.3184 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### ExplicitBlockDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 63007
# Running tests:
........
Finished tests in 0.001521s, 5259.6976 tests/s, 5259.6976 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 36505
# Running tests:
........
Finished tests in 0.001399s, 5718.3703 tests/s, 5718.3703 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
........
Finished in 0.001317 seconds.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 18551
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 41965
# Running tests:
........
Finished tests in 0.001905s, 4199.4751 tests/s, 4199.4751 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 21564
# Running tests:
........
Finished tests in 0.071000s, 112.6761 tests/s, 112.6761 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 30409
# Running tests:
........
Finished tests in 0.003877s, 2063.4511 tests/s, 2063.4511 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### DoubleSplatDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 60472
# Running tests:
.F......
Finished tests in 0.035452s, 225.6572 tests/s, 225.6572 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(DoubleSplatDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
8 tests, 8 assertions, 1 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 52679
# Running tests:
....F...
Finished tests in 0.040294s, 198.5407 tests/s, 198.5407 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(DoubleSplatDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
8 tests, 8 assertions, 1 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
........
Finished in 0.001824 seconds.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 64820
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 54919
# Running tests:
........
Finished tests in 0.002932s, 2728.5130 tests/s, 2728.5130 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 21103
# Running tests:
....F...
Finished tests in 0.134000s, 59.7015 tests/s, 59.7015 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(DoubleSplatDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
8 tests, 8 assertions, 1 failures, 0 errors, 0 skips
org.jruby.exceptions.RaiseException: (SystemExit) exit
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 55694
# Running tests:
........
Finished tests in 0.003802s, 2104.1557 tests/s, 2104.1557 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### SingleSplatYieldDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 54052
# Running tests:
.yields.rb:91: warning: multiple values for a block parameter (2 for 1)
from yields.rb:30
..yields.rb:30: warning: multiple values for a block parameter (2 for 1)
from yields.rb:31
yields.rb:30: warning: multiple values for a block parameter (2 for 1)
from yields.rb:31
.....
Finished tests in 0.001531s, 5225.3429 tests/s, 5225.3429 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 63103
# Running tests:
yields.rb:91: warning: multiple values for a block parameter (2 for 1)
from yields.rb:30
.yields.rb:30: warning: multiple values for a block parameter (2 for 1)
from yields.rb:91
yields.rb:30: warning: multiple values for a block parameter (2 for 1)
from yields.rb:91
.......
Finished tests in 0.001470s, 5442.1769 tests/s, 5442.1769 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
.....FF.
Finished in 0.001723 seconds.
1) Failure:
test_0006_multi_block_arguments_with_each_with_index(SinglesplatyielddelegatorSpec) [yields.rb:102]:
Expected [[1, 0], [2, 1]], not [[1, nil], [2, nil]].
2) Failure:
test_0004_single_block_argument_with_each_slice(SinglesplatyielddelegatorSpec) [yields.rb:92]:
Expected [[1, 2]], not [1].
8 tests, 8 assertions, 2 failures, 0 errors, 0 skips
Test run options: --seed 8177
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 50216
# Running tests:
....FF..
Finished tests in 0.047940s, 166.8753 tests/s, 166.8753 assertions/s.
1) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatYieldDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [1]
2) Failure:
test_0006_multi_block_arguments_with_each_with_index(SingleSplatYieldDelegator) [yields.rb:102]:
Expected: [[1, 0], [2, 1]]
Actual: [[1, nil], [2, nil]]
8 tests, 8 assertions, 2 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 47521
# Running tests:
./Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943 warning: multiple values for a block parameter (2 for 1)
..../Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943 warning: multiple values for a block parameter (2 for 1)
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943 warning: multiple values for a block parameter (2 for 1)
...
Finished tests in 0.100000s, 80.0000 tests/s, 80.0000 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 8386
# Running tests:
........
Finished tests in 0.003883s, 2060.2627 tests/s, 2060.2627 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### SingleSplatArgsDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 5775
# Running tests:
FF..F.E.
Finished tests in 0.041163s, 194.3493 tests/s, 170.0556 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(SingleSplatArgsDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
2) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatArgsDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [[[1, 2]]]
3) Failure:
test_0003_single_block_argument_with_each(SingleSplatArgsDelegator) [yields.rb:87]:
Expected: [1, 2]
Actual: [[1], [2]]
4) Error:
test_0001_one_block_argument_with_fetch(SingleSplatArgsDelegator):
TypeError: can't convert Array into Integer
yields.rb:78:in `*'
yields.rb:78:in `test_0001_one_block_argument_with_fetch'
yields.rb:39:in `method_missing'
yields.rb:39:in `fetch'
yields.rb:39:in `send'
yields.rb:39:in `method_missing'
yields.rb:78:in `test_0001_one_block_argument_with_fetch'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `__send__'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `run'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:781:in `_run_suite'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `map'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `_run_suite'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `map'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:740:in `_run_anything'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:903:in `run_tests'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `send'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `_run'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `each'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `_run'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:878:in `run'
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:658:in `autorun'
yields.rb:71
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 51213
# Running tests:
.FFE..F.
Finished tests in 0.059311s, 134.8822 tests/s, 118.0220 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(SingleSplatArgsDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
2) Failure:
test_0003_single_block_argument_with_each(SingleSplatArgsDelegator) [yields.rb:87]:
Expected: [1, 2]
Actual: [[1], [2]]
3) Error:
test_0001_one_block_argument_with_fetch(SingleSplatArgsDelegator):
TypeError: can't convert Array into Integer
yields.rb:78:in `*'
yields.rb:78:in `test_0001_one_block_argument_with_fetch'
yields.rb:39:in `method_missing'
yields.rb:39:in `fetch'
yields.rb:39:in `send'
yields.rb:39:in `method_missing'
yields.rb:78:in `test_0001_one_block_argument_with_fetch'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `__send__'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `run'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:781:in `_run_suite'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `map'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `_run_suite'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `map'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:740:in `_run_anything'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:903:in `run_tests'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `send'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `_run'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `each'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `_run'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:878:in `run'
/Users/dstrelau/.rvm/gems/ruby-1.8.7-p352/gems/minitest-2.5.1/lib/minitest/unit.rb:658:in `autorun'
yields.rb:71
4) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatArgsDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [[[1, 2]]]
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
.F.F.EF.
Finished in 0.001965 seconds.
1) Failure:
test_0003_single_block_argument_with_each(SinglesplatargsdelegatorSpec) [yields.rb:87]:
Expected [1, 2], not [[1], [2]].
2) Failure:
test_0004_single_block_argument_with_each_slice(SinglesplatargsdelegatorSpec) [yields.rb:92]:
Expected [[1, 2]], not [[[1, 2]]].
3) Error:
test_0001_one_block_argument_with_fetch(SinglesplatargsdelegatorSpec):
TypeError: can't convert Array into Integer
yields.rb:78:in `*'
yields.rb:78:in `block (3 levels) in <main>'
yields.rb:39:in `block in method_missing'
yields.rb:39:in `fetch'
yields.rb:39:in `method_missing'
yields.rb:78:in `block (2 levels) in <main>'
4) Failure:
test_0007_multi_block_arguments_with_each_slice(SinglesplatargsdelegatorSpec) [yields.rb:107]:
Expected [[1, 2]], not [[[1, 2], nil]].
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
Test run options: --seed 3591
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 36899
# Running tests:
F.F.F.E.
Finished tests in 0.050945s, 157.0321 tests/s, 137.4031 assertions/s.
1) Failure:
test_0007_multi_block_arguments_with_each_slice(SingleSplatArgsDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
2) Failure:
test_0003_single_block_argument_with_each(SingleSplatArgsDelegator) [yields.rb:87]:
Expected: [1, 2]
Actual: [[1], [2]]
3) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatArgsDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [[[1, 2]]]
4) Error:
test_0001_one_block_argument_with_fetch(SingleSplatArgsDelegator):
TypeError: can't convert Array into Integer
yields.rb:78:in `*'
yields.rb:78:in `block (3 levels) in <main>'
yields.rb:39:in `block in method_missing'
yields.rb:39:in `fetch'
yields.rb:39:in `method_missing'
yields.rb:78:in `block (2 levels) in <main>'
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 49744
# Running tests:
..E.FFF.
Finished tests in 0.244000s, 32.7869 tests/s, 28.6885 assertions/s.
1) Error:
test_0001_one_block_argument_with_fetch(SingleSplatArgsDelegator):
TypeError: can't convert Array into Integer
org/jruby/RubyArray.java:2980:in `*'
yields.rb:78:in `__file__'
yields.rb:39:in `method_missing'
org/jruby/RubyArray.java:807:in `fetch'
org/jruby/RubyKernel.java:2096:in `send'
yields.rb:39:in `method_missing'
yields.rb:78:in `__file__'
org/jruby/RubyProc.java:274:in `call'
org/jruby/RubyKernel.java:2092:in `send'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `run'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:781:in `_run_suite'
org/jruby/RubyArray.java:2336:in `collect'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `_run_suite'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
org/jruby/RubyArray.java:2336:in `collect'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:740:in `_run_anything'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:903:in `run_tests'
org/jruby/RubyKernel.java:2092:in `send'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `_run'
org/jruby/RubyArray.java:1603:in `each'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `_run'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:878:in `run'
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:658:in `autorun'
org/jruby/RubyProc.java:274:in `call'
org/jruby/RubyProc.java:233:in `call'
2) Failure:
test_0007_multi_block_arguments_with_each_slice(SingleSplatArgsDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
3) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatArgsDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [[[1, 2]]]
4) Failure:
test_0003_single_block_argument_with_each(SingleSplatArgsDelegator) [yields.rb:87]:
Expected: [1, 2]
Actual: [[1], [2]]
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
org.jruby.exceptions.RaiseException: (SystemExit) exit
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 21452
# Running tests:
EF.F..F.
Finished tests in 0.711145s, 11.2495 tests/s, 9.8433 assertions/s.
1) Error:
test_0001_one_block_argument_with_fetch(SingleSplatArgsDelegator):
TypeError: Coercion error: [2].to_int => Fixnum failed
kernel/common/type.rb:23:in `coerce_to'
kernel/common/array.rb:399:in `*'
yields.rb:78:in `__script__'
yields.rb:39:in `method_missing'
kernel/common/array.rb:782:in `fetch'
yields.rb:39:in `fetch (method_missing)'
yields.rb:78:in `__script__'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:943:in `run'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:781:in `_run_suite'
kernel/bootstrap/array.rb:97:in `map'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:774:in `_run_suite'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
kernel/bootstrap/array.rb:97:in `map'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:764:in `_run_suites'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:740:in `_run_anything'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:903:in `run_tests'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:890:in `_run'
kernel/bootstrap/array.rb:76:in `each'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:889:in `_run'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:878:in `run'
/Users/dstrelau/.rvm/gems/rbx-head/gems/minitest-2.5.1/lib/minitest/unit.rb:658:in `autorun'
kernel/loader.rb:659:in `epilogue'
kernel/loader.rb:790:in `main'
2) Failure:
test_0003_single_block_argument_with_each(SingleSplatArgsDelegator) [yields.rb:87]:
Expected: [1, 2]
Actual: [[1], [2]]
3) Failure:
test_0004_single_block_argument_with_each_slice(SingleSplatArgsDelegator) [yields.rb:92]:
Expected: [[1, 2]]
Actual: [[[1, 2]]]
4) Failure:
test_0007_multi_block_arguments_with_each_slice(SingleSplatArgsDelegator) [yields.rb:107]:
Expected: [[1, 2]]
Actual: [[[1, 2], nil]]
8 tests, 7 assertions, 3 failures, 1 errors, 0 skips
###### NoSplatDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 14808
# Running tests:
.....yields.rb:48: warning: multiple values for a block parameter (2 for 1)
from /Users/dstrelau/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31
yields.rb:48: warning: multiple values for a block parameter (2 for 1)
from /Users/dstrelau/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31
...
Finished tests in 0.002121s, 3771.8058 tests/s, 3771.8058 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 52389
# Running tests:
...yields.rb:48: warning: multiple values for a block parameter (2 for 1)
from yields.rb:49
yields.rb:48: warning: multiple values for a block parameter (2 for 1)
from yields.rb:49
.....
Finished tests in 0.002578s, 3103.1808 tests/s, 3103.1808 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
......F.
Finished in 0.002060 seconds.
1) Failure:
test_0006_multi_block_arguments_with_each_with_index(NosplatdelegatorSpec) [yields.rb:102]:
Expected [[1, 0], [2, 1]], not [[1, nil], [2, nil]].
8 tests, 8 assertions, 1 failures, 0 errors, 0 skips
Test run options: --seed 30781
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 17636
# Running tests:
.....F..
Finished tests in 0.080665s, 99.1756 tests/s, 99.1756 assertions/s.
1) Failure:
test_0006_multi_block_arguments_with_each_with_index(NoSplatDelegator) [yields.rb:102]:
Expected: [[1, 0], [2, 1]]
Actual: [[1, nil], [2, nil]]
8 tests, 8 assertions, 1 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 16491
# Running tests:
...../Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943 warning: multiple values for a block parameter (2 for 1)
/Users/dstrelau/.rvm/gems/jruby-1.6.4/gems/minitest-2.5.1/lib/minitest/unit.rb:943 warning: multiple values for a block parameter (2 for 1)
...
Finished tests in 0.113000s, 70.7965 tests/s, 70.7965 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 24758
# Running tests:
........
Finished tests in 0.004752s, 1683.5017 tests/s, 1683.5017 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### FancyDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 7656
# Running tests:
........
Finished tests in 0.001386s, 5772.0058 tests/s, 5772.0058 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 40331
# Running tests:
........
Finished tests in 0.001835s, 4359.6730 tests/s, 4359.6730 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
........
Finished in 0.006378 seconds.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 4419
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 48456
# Running tests:
........
Finished tests in 0.002462s, 3249.3907 tests/s, 3249.3907 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 34186
# Running tests:
........
Finished tests in 0.088000s, 90.9091 tests/s, 90.9091 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 56629
# Running tests:
........
Finished tests in 0.004502s, 1776.9880 tests/s, 1776.9880 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
###### SuperDelegator
=== ruby 1.8.6 (2010-09-02 patchlevel 420) [x86_64-darwin11.0.0]
/Users/dstrelau/.rvm/gems/ruby-1.8.6-p420/gems/minitest-2.5.1/lib/minitest/unit.rb:276: warning: parenthesize argument(s) for future version
Run options: --seed 17220
# Running tests:
........
Finished tests in 0.001389s, 5759.5392 tests/s, 5759.5392 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-darwin11.0.0]
Run options: --seed 12185
# Running tests:
........
Finished tests in 0.002299s, 3479.7738 tests/s, 3479.7738 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
Loaded suite yields
Started
........
Finished in 0.001729 seconds.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 19819
=== ruby 1.9.4dev (2011-08-26 trunk 33078) [x86_64-darwin11.0.0]
Run options: --seed 29592
# Running tests:
........
Finished tests in 0.002032s, 3937.0079 tests/s, 3937.0079 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Run options: --seed 22352
# Running tests:
........
Finished tests in 0.089000s, 89.8876 tests/s, 89.8876 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
=== rubinius 1.2.4dev (1.8.7 7ae451a1 yyyy-mm-dd JI) [x86_64-apple-darwin11.1.0]
Run options: --seed 18644
# Running tests:
........
Finished tests in 0.003930s, 2035.6234 tests/s, 2035.6234 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment