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
|
require 'spec_helper'
describe Immutable::Vector do
[:reject, :delete_if].each do |method|
describe "##{method}" do
[
[[], []],
[['A'], ['A']],
[%w[A B C], %w[A B C]],
[%w[A b C], %w[A C]],
[%w[a b c], []],
].each do |values, expected|
describe "on #{values.inspect}" do
let(:vector) { V[*values] }
context 'with a block' do
it "returns #{expected.inspect}" do
vector.send(method) { |item| item == item.downcase }.should eql(V[*expected])
end
end
context 'without a block' do
it 'returns an Enumerator' do
vector.send(method).class.should be(Enumerator)
vector.send(method).each { |item| item == item.downcase }.should eql(V[*expected])
end
end
end
end
it 'works with a variety of inputs' do
[1, 2, 10, 31, 32, 33, 1023, 1024, 1025].each do |size|
[0, 5, 32, 50, 500, 800, 1024].each do |threshold|
vector = V.new(1..size)
result = vector.send(method) { |item| item > threshold }
result.size.should == [size, threshold].min
result.should eql(V.new(1..[size, threshold].min))
end
end
end
end
end
end
|