Comparison

spec/util_smqueue_spec.lua @ 12055:daced16154fa

util.smqueue: Abstract queue with acknowledgements and overflow Meant to be used in mod_smacks for XEP-0198 Meant to have a larger virtual size than actual number of items stored, on the theory that in most cases, the excess will be acked before needed for a resumption event.
author Kim Alvefur <zash@zash.se>
date Tue, 14 Dec 2021 19:58:53 +0100
child 12058:4860da718e87
comparison
equal deleted inserted replaced
12054:0116fa57f05c 12055:daced16154fa
1 describe("util.smqueue", function()
2
3 local smqueue
4 setup(function() smqueue = require "util.smqueue"; end)
5
6 describe("#new()", function()
7 it("should work", function()
8 local q = smqueue.new(10);
9 assert.truthy(q);
10 end)
11 end)
12
13 describe("#push()", function()
14 it("should allow pushing many items", function()
15 local q = smqueue.new(10);
16 for i = 1, 20 do q:push(i); end
17 assert.equal(20, q:count_unacked());
18 end)
19 end)
20
21 describe("#resumable()", function()
22 it("returns true while the queue is small", function()
23 local q = smqueue.new(10);
24 for i = 1, 10 do q:push(i); end
25 assert.truthy(q:resumable());
26 q:push(11);
27 assert.falsy(q:resumable());
28 end)
29 end)
30
31 describe("#ack", function()
32 it("allows removing items", function()
33 local q = smqueue.new(10);
34 for i = 1, 10 do q:push(i); end
35 assert.same({ 1; 2; 3 }, q:ack(3));
36 assert.same({ 4; 5; 6 }, q:ack(6));
37 assert.falsy(q:ack(3), "can't go backwards")
38 assert.falsy(q:ack(100), "can't ack too many")
39 for i = 11, 20 do q:push(i); end
40 assert.same({ 11; 12 }, q:ack(12), "items are dropped");
41 end)
42 end)
43
44 describe("#resume", function()
45 it("iterates over current items", function()
46 local q = smqueue.new(10);
47 for i = 1, 12 do q:push(i); end
48 assert.same({ 3; 4; 5; 6 }, q:ack(6));
49 assert.truthy(q:resumable());
50 local resume = {}
51 for _, i in q:resume() do resume[i] = true end
52 assert.same({ [7] = true; [8] = true; [9] = true; [10] = true; [11] = true; [12] = true }, resume);
53 end)
54 end)
55 end);