diff --git a/lib/async/queue.rb b/lib/async/queue.rb index d4aed6a1..4a380f31 100644 --- a/lib/async/queue.rb +++ b/lib/async/queue.rb @@ -38,12 +38,15 @@ def empty? end # Add an item to the queue. - def <<(item) + def push(item) @items << item @available.signal unless self.empty? end + # Compatibility with {::Queue#push}. + alias << push + # Add multiple items to the queue. def enqueue(*items) @items.concat(items) @@ -60,6 +63,9 @@ def dequeue @items.shift end + # Compatibility with {::Queue#pop}. + alias pop dequeue + # Process each item in the queue. # # @asynchronous Executes the given block concurrently for each item. diff --git a/test/async/queue.rb b/test/async/queue.rb index 39941fda..e6dde6c7 100644 --- a/test/async/queue.rb +++ b/test/async/queue.rb @@ -15,6 +15,22 @@ AQueue = Sus::Shared("a queue") do let(:queue) {subject.new} + with "#push" do + it "adds an item to the queue" do + queue.push(:item) + expect(queue.size).to be == 1 + expect(queue.dequeue).to be == :item + end + end + + with "#pop" do + it "removes an item from the queue" do + queue.push(:item) + expect(queue.pop).to be == :item + expect(queue.size).to be == 0 + end + end + with '#each' do it 'can enumerate queue items' do reactor.async do |task|