File: base_shared.rb

package info (click to toggle)
ruby-concurrent 1.1.6%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 30,284 kB
  • sloc: ruby: 30,875; java: 6,117; javascript: 1,114; ansic: 288; makefile: 10; sh: 6
file content (134 lines) | stat: -rw-r--r-- 2,859 bytes parent folder | download | duplicates (3)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
RSpec.shared_examples :channel_buffer do

  specify do
    expect(subject).to respond_to(:blocking?)
  end

  context '#capacity' do
    specify { expect(subject.capacity).to be >= 0 }
  end

  context '#size' do
    it 'returns zero upon initialization' do
      expect(subject.size).to eq 0
    end
  end

  context '#empty?' do
    it 'returns true when empty' do
      expect(subject).to be_empty
    end
  end

  context '#full?' do
    it 'returns false when not full' do
      expect(subject).to_not be_full
    end
  end

  context '#put' do

    it 'does not enqueue the item when closed' do
      subject.close
      subject.put(:foo)
      expect(subject).to be_empty
    end

    it 'returns false when closed' do
      subject.close
      expect(subject.put(:foo)).to be false
    end
  end

  context '#offer' do

    it 'returns true on success' do
      subject # initialize on this thread
      t = in_thread do
        subject.take
      end
      t.join(0.1)

      expect(subject.offer(:foo)).to be true
    end

    it 'does not enqueue the item when closed' do
      subject.close
      subject.offer(:foo)
      expect(subject).to be_empty
    end

    it 'returns false immediately when closed' do
      subject.close
      expect(subject.offer(:foo)).to be false
    end
  end

  context '#take' do
    it 'returns Concurrent::NULL when closed' do
      subject.close
      expect(subject.take).to eq Concurrent::NULL
    end
  end

  context '#next' do
    it 'returns Concurrent::NULL, false when closed' do
      subject.close
      item, more = subject.next
      expect(item).to eq Concurrent::NULL
      expect(more).to be false
    end
  end

  context '#poll' do

    it 'returns the next item immediately if available' do
      subject # initialize on this thread
      t = in_thread do
        subject.put(42)
      end
      t.join(0.1)

      # TODO (pitr-ch 15-Oct-2016): fails on JRuby https://travis-ci.org/pitr-ch/concurrent-ruby/jobs/167937038
      expect(subject.poll).to eq 42
    end

    it 'returns Concurrent::NULL immediately if no item is available' do
      expect(subject.poll).to eq Concurrent::NULL
    end

    it 'returns Concurrent::NULL when closed' do
      subject.close
      expect(subject.poll).to eq Concurrent::NULL
    end
  end

  context '#close' do

    it 'sets #closed? to false' do
      subject.close
      expect(subject).to be_closed
    end

    it 'returns true when not previously closed' do
      expect(subject.close).to be true
    end

    it 'returns false when already closed' do
      subject.close
      expect(subject.close).to be false
    end
  end

  context '#closed?' do

    it 'returns true when new' do
      expect(subject).to_not be_closed
    end

    it 'returns false after #close' do
      subject.close
      expect(subject).to be_closed
    end
  end
end