Skip to content

Commit 072057e

Browse files
sampokuokkaneneregon
authored andcommitted
Add value packing specs for more Enumerable and Enumerator::Lazy methods
Reuse the :enumerable_value_packing shared examples from #1363 for drop, take_while, drop_while, select, reject and uniq, on both the eager Enumerable methods and their Enumerator::Lazy counterparts. compact and Enumerator::Lazy#with_index get dedicated examples since their output shape differs from the shared examples: compact removes the nil that a zero-argument yield packs to, and with_index pairs the packed value with the index ([packed_value, index]).
1 parent ceaa79d commit 072057e

15 files changed

Lines changed: 148 additions & 0 deletions

‎core/enumerable/compact_spec.rb‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22
require_relative 'fixtures/classes'
33

44
describe "Enumerable#compact" do
5+
describe "value packing of source yields" do
6+
it "packs a multi-argument source yield into an Array" do
7+
e = Enumerator.new { |y| y.yield 1, 2 }
8+
e.compact.should == [[1, 2]]
9+
end
10+
11+
it "removes a zero-argument source yield like nil" do
12+
e = Enumerator.new { |y| y.yield; y.yield :v }
13+
e.compact.should == [:v]
14+
end
15+
end
16+
517
it 'returns array without nil elements' do
618
arr = EnumerableSpecs::Numerous.new(nil, 1, 2, nil, true)
719
arr.compact.should == [1, 2, true]

‎core/enumerable/drop_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
3+
require_relative 'shared/value_packing'
34

45
describe "Enumerable#drop" do
6+
describe "value packing of source yields" do
7+
before :each do
8+
@take = -> e { e.drop(0) }
9+
end
10+
it_behaves_like :enumerable_value_packing, nil
11+
end
12+
513
before :each do
614
@enum = EnumerableSpecs::Numerous.new(3, 2, 1, :go)
715
end

‎core/enumerable/drop_while_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
33
require_relative 'shared/enumerable_enumeratorized'
4+
require_relative 'shared/value_packing'
45

56
describe "Enumerable#drop_while" do
7+
describe "value packing of source yields" do
8+
before :each do
9+
@take = -> e { e.drop_while { false } }
10+
end
11+
it_behaves_like :enumerable_value_packing, nil
12+
end
13+
614
before :each do
715
@enum = EnumerableSpecs::Numerous.new(3, 2, 1, :go)
816
end

‎core/enumerable/reject_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
33
require_relative 'shared/enumerable_enumeratorized'
4+
require_relative 'shared/value_packing'
45

56
describe "Enumerable#reject" do
7+
describe "value packing of source yields" do
8+
before :each do
9+
@take = -> e { e.reject { false } }
10+
end
11+
it_behaves_like :enumerable_value_packing, nil
12+
end
13+
614
it "returns an array of the elements for which block is false" do
715
EnumerableSpecs::Numerous.new.reject { |i| i > 3 }.should == [2, 3, 1]
816
entries = (1..10).to_a

‎core/enumerable/select_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
33
require_relative 'shared/enumerable_enumeratorized'
4+
require_relative 'shared/value_packing'
45

56
describe "Enumerable#select" do
7+
describe "value packing of source yields" do
8+
before :each do
9+
@take = -> e { e.select { true } }
10+
end
11+
it_behaves_like :enumerable_value_packing, nil
12+
end
13+
614
before :each do
715
ScratchPad.record []
816
@elements = (1..10).to_a

‎core/enumerable/take_while_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
33
require_relative 'shared/enumerable_enumeratorized'
4+
require_relative 'shared/value_packing'
45

56
describe "Enumerable#take_while" do
7+
describe "value packing of source yields" do
8+
before :each do
9+
@take = -> e { e.take_while { true } }
10+
end
11+
it_behaves_like :enumerable_value_packing, nil
12+
end
13+
614
before :each do
715
@enum = EnumerableSpecs::Numerous.new(3, 2, 1, :go)
816
end

‎core/enumerable/uniq_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
require_relative '../../spec_helper'
22
require_relative 'fixtures/classes'
3+
require_relative 'shared/value_packing'
34

45
describe 'Enumerable#uniq' do
6+
describe "value packing of source yields" do
7+
before :each do
8+
@take = -> e { e.uniq }
9+
end
10+
it_behaves_like :enumerable_value_packing, nil
11+
end
12+
513
it 'returns an array that contains only unique elements' do
614
[0, 1, 2, 3].to_enum.uniq { |n| n.even? }.should == [0, 1]
715
end

‎core/enumerator/lazy/compact_spec.rb‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22
require_relative 'fixtures/classes'
33

44
describe "Enumerator::Lazy#compact" do
5+
# Cannot use shared/value_packing.rb examples: the packed nil is removed by #compact.
6+
describe "value packing of source yields" do
7+
it "packs a multi-argument source yield into an Array" do
8+
e = Enumerator.new { |y| y.yield 1, 2 }
9+
args = nil
10+
e.lazy.compact.each { |*a| args = a }
11+
args.should == [[1, 2]]
12+
end
13+
14+
it "removes a zero-argument source yield like nil" do
15+
e = Enumerator.new { |y| y.yield; y.yield :v }
16+
collected = []
17+
e.lazy.compact.each { |*a| collected << a }
18+
collected.should == [[:v]]
19+
end
20+
end
21+
522
it 'returns array without nil elements' do
623
arr = [1, nil, 3, false, 5].to_enum.lazy.compact
724
arr.should.instance_of?(Enumerator::Lazy)

‎core/enumerator/lazy/drop_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
22

33
require_relative '../../../spec_helper'
44
require_relative 'fixtures/classes'
5+
require_relative '../../enumerable/shared/value_packing'
56

67
describe "Enumerator::Lazy#drop" do
8+
describe "value packing of source yields (matches Enumerable#drop)" do
9+
before :each do
10+
@take = -> e { e.lazy.drop(0) }
11+
end
12+
it_behaves_like :enumerable_value_packing, nil
13+
end
14+
715
before :each do
816
@yieldsmixed = EnumeratorLazySpecs::YieldsMixed.new.to_enum.lazy
917
@eventsmixed = EnumeratorLazySpecs::EventsMixed.new.to_enum.lazy

‎core/enumerator/lazy/drop_while_spec.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
22

33
require_relative '../../../spec_helper'
44
require_relative 'fixtures/classes'
5+
require_relative '../../enumerable/shared/value_packing'
56

67
describe "Enumerator::Lazy#drop_while" do
8+
describe "value packing of source yields (matches Enumerable#drop_while)" do
9+
before :each do
10+
@take = -> e { e.lazy.drop_while { false } }
11+
end
12+
it_behaves_like :enumerable_value_packing, nil
13+
end
14+
715
before :each do
816
@yieldsmixed = EnumeratorLazySpecs::YieldsMixed.new.to_enum.lazy
917
@eventsmixed = EnumeratorLazySpecs::EventsMixed.new.to_enum.lazy

0 commit comments

Comments
 (0)