File: flat_map_spec.rb

package info (click to toggle)
ruby-hamster 3.0.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,932 kB
  • sloc: ruby: 16,915; makefile: 4
file content (51 lines) | stat: -rw-r--r-- 1,356 bytes parent folder | download | duplicates (2)
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