File: flatten_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 (59 lines) | stat: -rw-r--r-- 1,754 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
52
53
54
55
56
57
58
59
require "spec_helper"
require "hamster/vector"

describe Hamster::Vector do
  describe "#flatten" do
    it "recursively flattens nested vectors into containing vector" do
      V[V[1], V[2]].flatten.should eql(V[1,2])
      V[V[V[V[V[V[1,2,3]]]]]].flatten.should eql(V[1,2,3])
      V[V[V[1]], V[V[V[2]]]].flatten.should eql(V[1,2])
    end

    it "flattens nested arrays as well" do
      V[[1,2,3],[[4],[5,6]]].flatten.should eql(V[1,2,3,4,5,6])
    end

    context "with an integral argument" do
      it "only flattens down to the specified depth" do
        V[V[V[1,2]]].flatten(1).should eql(V[V[1,2]])
        V[V[V[V[1]], V[2], V[3]]].flatten(2).should eql(V[V[1], 2, 3])
      end
    end

    context "with an argument of zero" do
      it "returns self" do
        vector = V[1,2,3]
        vector.flatten(0).should be(vector)
      end
    end

    context "on a subclass" do
      it "returns an instance of the subclass" do
        subclass = Class.new(Hamster::Vector)
        instance = subclass.new([1,2])
        instance.flatten.class.should be(subclass)
      end
    end

    context "on a vector with no nested vectors" do
      it "returns an unchanged vector" do
        vector = V[1,2,3]
        vector.flatten.should.eql?(V[1,2,3])
      end

      context "on a Vector larger than 32 items initialized with Vector.new" do
        # Regression test, for problem discovered while working on GH issue #182
        it "returns an unchanged vector" do
          vector1,vector2 = 2.times.collect { V.new(0..33) }
          vector1.flatten.should eql(vector2)
        end
      end
    end

    it "leaves the original unmodified" do
      vector = V[1,2,3]
      vector.flatten
      vector.should eql(V[1,2,3])
    end
  end
end