require 'spec_helper' describe Enumerable do describe "#average" do it "to be 0" do expect([].average).to eq(0) end it "to be nil" do expect([].average(nil)).to eq(nil) end it "to be 2" do expect([1, 2, 3].average).to eq(2) end it "to be 2.5" do expect([1, 2, 3, 4].average).to eq(2.5) end end describe "#drop_last" do it "to be [2, 3]" do expect([1, 2, 3].drop_last(1)).to eq([1, 2]) end it "to be []" do expect([].drop_last(3)).to eq([]) end end describe "#drop_last_while" do it "to be [1, 2]" do expect([1, 2, 3].drop_last_while(&:odd?)).to eq([1, 2]) end it "to be []" do expect([].take_last_while(&:odd?)).to eq([]) end end describe "#exactly?" do it "to be true" do expect([1, false, nil].exactly?(1)).to eq(true) expect([false, nil].exactly?(0)).to eq(true) expect([1, 2, 3].exactly?(3)).to eq(true) expect([1, 2, 3, 4].exactly?(1) { |n| n > 3 }).to eq(true) expect([1, 2, 3, 4].exactly?(2, &:even?)).to eq(true) end it "to be false" do expect([].exactly?(1)).to eq(false) expect([1, false, nil].exactly?(3)).to eq(false) expect([1, 1, 3, 3].exactly?(2, &:even?)).to eq(false) end end describe "#frequencies" do it "to be {}" do expect([].frequencies).to eq({}) end it "to be { 1 => 2, :symbol => 2, 'string' => 1, 3 => 1 }" do expect([1, :symbol, 'string', 3, :symbol, 1].frequencies).to eq({ 1 => 2, :symbol => 2, 'string' => 1, 3 => 1 }) end end describe "#several?" do it "to be true" do expect([1, 2, 3].several?).to eq(true) expect([1, 2, 3, 4].several?(&:even?)).to eq(true) end it "to be false" do expect([].several?).to eq(false) expect([1, false, nil].several?).to eq(false) expect([1, 1, 3, 3].several?(&:even?)).to eq(false) end end describe "#sum" do it "to be 0" do expect([].sum).to eq(0) end it "to be nil" do expect([].sum(nil)).to eq(nil) end it "to be 6" do expect([1, 2, 3].sum).to eq(6) end end describe "#take_last" do it "to be [2, 3]" do expect([1, 2, 3].take_last(2)).to eq([2, 3]) end it "to be []" do expect([].take_last(3)).to eq([]) end end describe "#take_last_while" do it "to be [3, 5]" do expect([1, 2, 3, 5].take_last_while(&:odd?)).to eq([3, 5]) end it "to be []" do expect([].take_last_while(&:odd?)).to eq([]) end end end