File: include_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 (60 lines) | stat: -rw-r--r-- 1,731 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
require 'spec_helper'
require 'set'

describe Immutable::Set do
  [:include?, :member?].each do |method|
    describe "##{method}" do
      let(:set) { S['A', 'B', 'C', 2.0, nil] }

      ['A', 'B', 'C', 2.0, nil].each do |value|
        it "returns true for an existing value (#{value.inspect})" do
          set.send(method, value).should == true
        end
      end

      it 'returns false for a non-existing value' do
        set.send(method, 'D').should == false
      end

      it 'returns true even if existing value is nil' do
        S[nil].include?(nil).should == true
      end

      it 'returns true even if existing value is false' do
        S[false].include?(false).should == true
      end

      it 'returns false for a mutable item which is mutated after adding' do
        item = ['mutable']
        item = [rand(1000000)] while (item.hash.abs & 31 == [item[0], 'HOSED!'].hash.abs & 31)
        set  = S[item]
        item.push('HOSED!')
        set.include?(item).should == false
      end

      it 'uses #eql? for equality' do
        set.send(method, 2).should == false
      end

      it 'returns the right answers after a lot of addings and removings' do
        array, set, rb_set = [], S.new, ::Set.new

        1000.times do
          if rand(2) == 0
            array << (item = rand(10000))
            rb_set.add(item)
            set = set.add(item)
            set.include?(item).should == true
          else
            item = array.sample
            rb_set.delete(item)
            set = set.delete(item)
            set.include?(item).should == false
          end
        end

        array.each { |item| set.include?(item).should == rb_set.include?(item) }
      end
    end
  end
end