Software /
code /
prosody
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); |