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 44 45 46 47 48 49 50 51
|
require "spec_helper"
require "hamster/vector"
describe Hamster::Vector do
let(:vector) { V[*values] }
describe "#flat_map" do
let(:block) { ->(item) { [item, item + 1, item * item] } }
let(:flat_map) { vector.flat_map(&block) }
let(:flattened_vector) { V[*flattened_values] }
shared_examples "checking flattened result" do
it "returns the flattened values as a Hamster::Vector" do
expect(flat_map).to eq(flattened_vector)
end
it "returns a Hamster::Vector" do
expect(flat_map).to be_a(Hamster::Vector)
end
end
context "with an empty vector" do
let(:values) { [] }
let(:flattened_values) { [] }
include_examples "checking flattened result"
end
context "with a block that returns an empty vector" do
let(:block) { ->(item) { [] } }
let(:values) { [1, 2, 3] }
let(:flattened_values) { [] }
include_examples "checking flattened result"
end
context "with a vector of one item" do
let(:values) { [7] }
let(:flattened_values) { [7, 8, 49] }
include_examples "checking flattened result"
end
context "with a vector of multiple items" do
let(:values) { [1, 2, 3] }
let(:flattened_values) { [1, 2, 1, 2, 3, 4, 3, 4, 9] }
include_examples "checking flattened result"
end
end
end
|