# HG changeset patch # User Matthew Wild # Date 1553330875 0 # Node ID c8b75239846c0a060a7dc4c46a995e98ef0abb13 # Parent f2104b36f6737fffaabc6b683aaa3af582a9f328 util.queue: Add 'consume()' convenience iterator diff -r f2104b36f673 -r c8b75239846c spec/util_queue_spec.lua --- a/spec/util_queue_spec.lua Sat Mar 23 04:00:55 2019 +0100 +++ b/spec/util_queue_spec.lua Sat Mar 23 08:47:55 2019 +0000 @@ -100,4 +100,41 @@ end); end); + describe("consume()", function () + it("should work", function () + local q = queue.new(10); + for i = 1, 5 do + q:push(i); + end + local c = 0; + for i in q:consume() do + assert(i == c + 1); + assert(q:count() == (5-i)); + c = i; + end + end); + + it("should work even if items are pushed in the loop", function () + local q = queue.new(10); + for i = 1, 5 do + q:push(i); + end + local c = 0; + for i in q:consume() do + assert(i == c + 1); + if c < 3 then + assert(q:count() == (5-i)); + else + assert(q:count() == (6-i)); + end + + c = i; + + if c == 3 then + q:push(6); + end + end + assert.equal(c, 6); + end); + end); end); diff -r f2104b36f673 -r c8b75239846c util/queue.lua --- a/util/queue.lua Sat Mar 23 04:00:55 2019 +0100 +++ b/util/queue.lua Sat Mar 23 08:47:55 2019 +0000 @@ -64,6 +64,9 @@ return pos+1, t._items[read_pos]; end, self, 0; end; + consume = function (self) + return self.pop, self; + end; }; end