File: indices_spec.rb

package info (click to toggle)
ruby-immutable-ruby 0.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,852 kB
  • sloc: ruby: 16,556; makefile: 4
file content (61 lines) | stat: -rw-r--r-- 1,641 bytes parent folder | download
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
60
61
require 'spec_helper'

describe Immutable::List do
  describe '#indices' do
    context 'when called with a block' do
      it 'is lazy' do
        count = 0
        Immutable.stream { count += 1 }.indices { |item| true }
        count.should <= 1
      end

      context "on a large list which doesn't contain desired item" do
        it "doesn't blow the stack" do
          -> { BigList.indices { |x| x < 0 }.size }.should_not raise_error
        end
      end

      [
        [[], 'A', []],
        [['A'], 'B', []],
        [%w[A B A], 'B', [1]],
        [%w[A B A], 'A', [0, 2]],
        [[2], 2, [0]],
        [[2], 2.0, [0]],
        [[2.0], 2.0, [0]],
        [[2.0], 2, [0]],
      ].each do |values, item, expected|
        context "looking for #{item.inspect} in #{values.inspect}" do
          it "returns #{expected.inspect}" do
            L[*values].indices { |x| x == item }.should eql(L[*expected])
          end
        end
      end
    end

    context 'when called with a single argument' do
      it 'is lazy' do
        count = 0
        Immutable.stream { count += 1 }.indices(nil)
        count.should <= 1
      end

      [
        [[], 'A', []],
        [['A'], 'B', []],
        [%w[A B A], 'B', [1]],
        [%w[A B A], 'A', [0, 2]],
        [[2], 2, [0]],
        [[2], 2.0, [0]],
        [[2.0], 2.0, [0]],
        [[2.0], 2, [0]],
      ].each do |values, item, expected|
        context "looking for #{item.inspect} in #{values.inspect}" do
          it "returns #{expected.inspect}" do
            L[*values].indices(item).should eql(L[*expected])
          end
        end
      end
    end
  end
end