2018-03-04 15:09:32 +00:00
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
2017-05-07 12:04:49 +00:00
describe " Enumerable # chunk " do
before do
ScratchPad . record [ ]
end
2019-04-27 18:53:23 +02:00
it " returns an Enumerator if called without a block " do
chunk = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 1 , 2 ) . chunk
chunk . should be_an_instance_of ( Enumerator )
result = chunk . with_index { | elt , i | elt - i } . to_a
result . should == [ [ 1 , [ 1 , 2 , 3 ] ] , [ - 2 , [ 1 , 2 ] ] ]
2017-05-07 12:04:49 +00:00
end
it " returns an Enumerator if given a block " do
EnumerableSpecs :: Numerous . new . chunk { } . should be_an_instance_of ( Enumerator )
end
it " yields the current element and the current chunk to the block " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 )
e . chunk { | x | ScratchPad << x } . to_a
ScratchPad . recorded . should == [ 1 , 2 , 3 ]
end
it " returns elements of the Enumerable in an Array of Arrays, [v, ary], where 'ary' contains the consecutive elements for which the block returned the value 'v' " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 2 , 3 , 2 , 1 )
result = e . chunk { | x | x < 3 && 1 || 0 } . to_a
result . should == [ [ 1 , [ 1 , 2 ] ] , [ 0 , [ 3 ] ] , [ 1 , [ 2 ] ] , [ 0 , [ 3 ] ] , [ 1 , [ 2 , 1 ] ] ]
end
it " returns elements for which the block returns :_alone in separate Arrays " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 2 , 1 )
result = e . chunk { | x | x < 2 && :_alone } . to_a
result . should == [ [ :_alone , [ 1 ] ] , [ false , [ 2 , 3 , 2 ] ] , [ :_alone , [ 1 ] ] ]
end
it " does not return elements for which the block returns :_separator " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 3 , 2 , 1 )
result = e . chunk { | x | x == 2 ? :_separator : 1 } . to_a
result . should == [ [ 1 , [ 1 ] ] , [ 1 , [ 3 , 3 ] ] , [ 1 , [ 1 ] ] ]
end
it " does not return elements for which the block returns nil " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 2 , 1 )
result = e . chunk { | x | x == 2 ? nil : 1 } . to_a
result . should == [ [ 1 , [ 1 ] ] , [ 1 , [ 3 ] ] , [ 1 , [ 1 ] ] ]
end
it " raises a RuntimeError if the block returns a Symbol starting with an underscore other than :_alone or :_separator " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 , 2 , 1 )
2019-07-27 12:40:09 +02:00
- > { e . chunk { | x | :_arbitrary } . to_a } . should raise_error ( RuntimeError )
2017-05-07 12:04:49 +00:00
end
2018-04-28 19:50:06 +00:00
it " does not accept arguments " do
e = EnumerableSpecs :: Numerous . new ( 1 , 2 , 3 )
2019-07-27 12:40:09 +02:00
- > {
2018-04-28 19:50:06 +00:00
e . chunk ( 1 ) { }
} . should raise_error ( ArgumentError )
2017-05-07 12:04:49 +00:00
end
it 'returned Enumerator size returns nil' do
e = EnumerableSpecs :: NumerousWithSize . new ( 1 , 2 , 3 , 2 , 1 )
enum = e . chunk { | x | true }
enum . size . should == nil
end
end