aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_util_async.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_util_async.lua')
-rw-r--r--tests/test_util_async.lua167
1 files changed, 160 insertions, 7 deletions
diff --git a/tests/test_util_async.lua b/tests/test_util_async.lua
index a0c16b88..1a74e79c 100644
--- a/tests/test_util_async.lua
+++ b/tests/test_util_async.lua
@@ -6,12 +6,12 @@
-- Multiple runners
function runner(new_runner, async)
- local function new(func)
+ local function new(func, name)
local log = {};
return new_runner(func, setmetatable({}, {
__index = function (_, event)
return function (runner, err)
- print("event", event, err)
+ print(name, "event", event, err)
table.insert(log, { event = event, err = err });
end;
end;
@@ -22,7 +22,7 @@ function runner(new_runner, async)
local r, l = new(function (item) assert(type(item) == "number") end);
r:run(1);
r:run(2);
- for k, v in ipairs(l) do print(k,v) end
+ --for k, v in ipairs(l) do print(k,v) end
--------------------
local wait, done;
@@ -43,7 +43,7 @@ function runner(new_runner, async)
assert(r.state == "waiting");
done();
assert(r.state == "ready");
- for k, v in ipairs(l) do print(k,v) end
+ --for k, v in ipairs(l) do print(k,v) end
--------------------
local wait, done;
@@ -68,7 +68,7 @@ function runner(new_runner, async)
assert(r.state == "waiting");
done();
assert(r.state == "ready");
- for k, v in ipairs(l) do print(k,v) end
+ --for k, v in ipairs(l) do print(k,v) end
--------------------
local wait, done;
@@ -106,7 +106,7 @@ function runner(new_runner, async)
end
assert(r.state == "ready");
- for k, v in ipairs(l) do print(k,v) end
+ --for k, v in ipairs(l) do print(k,v) end
--------------------
local wait, done;
@@ -144,5 +144,158 @@ function runner(new_runner, async)
assert(r.state == "ready");
assert(r.state == "ready");
- for k, v in ipairs(l) do print(k,v) end
+ --for k, v in ipairs(l) do print(k,v) end
+
+ -- Now with multiple runners
+ --------------------
+ local wait1, done1;
+ local last_item1 = 0;
+ local r1, l1 = new(function (item)
+ assert(type(item) == "number")
+ assert((item == last_item1 + 1) or item == 3);
+ last_item1 = item;
+ if item == 3 then
+ wait1, done1 = async.waiter();
+ wait1();
+ end
+ end, "r1");
+
+ local wait2, done2;
+ local last_item2 = 0;
+ local r2, l2 = new(function (item)
+ assert(type(item) == "number")
+ assert((item == last_item2 + 1) or item == 3);
+ last_item2 = item;
+ if item == 3 then
+ wait2, done2 = async.waiter();
+ wait2();
+ end
+ end, "r2");
+
+ r1:run(1);
+ assert(r1.state == "ready");
+ r1:run(2);
+ assert(r1.state == "ready");
+
+ local dones = {};
+ r1:run(3);
+ assert(r1.state == "waiting");
+ r1:run(3);
+ assert(r1.state == "waiting");
+
+ r2:run(1);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ r2:run(2);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ r2:run(3);
+ assert(r1.state == "waiting");
+ assert(r2.state == "waiting");
+ done2();
+
+ r2:run(3);
+ assert(r1.state == "waiting");
+ assert(r2.state == "waiting");
+ done2();
+
+ r2:run(2);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ for i = 1, 2 do
+ done1();
+ if i < 2 then
+ assert(r1.state == "waiting");
+ end
+ end
+
+ assert(r1.state == "ready");
+ r1:run(4);
+ assert(r1.state == "ready");
+
+ assert(r1.state == "ready");
+ --for k, v in ipairs(l1) do print(k,v) end
+
+
+ --------------------
+ local wait1, done1;
+ local last_item1 = 0;
+ local r1, l1 = new(function (item)
+ assert(type(item) == "number")
+ assert((item == last_item1 + 1) or item == 3);
+ last_item1 = item;
+ if item == 3 then
+ wait1, done1 = async.waiter();
+ wait1();
+ end
+ end, "r1");
+
+ local wait2, done2;
+ local last_item2 = 0;
+ local r2, l2 = new(function (item)
+ assert(type(item) == "number")
+ assert((item == last_item2 + 1) or item == 3);
+ last_item2 = item;
+ if item == 3 then
+ wait2, done2 = async.waiter();
+ wait2();
+ end
+ end, "r2");
+
+ r1:run(1);
+ assert(r1.state == "ready");
+ r1:run(2);
+ assert(r1.state == "ready");
+
+ r1:run(5);
+ assert(r1.state == "ready");
+
+ local dones = {};
+ r1:run(3);
+ assert(r1.state == "waiting");
+ r1:run(5); -- Will error, when we get to it
+ assert(r1.state == "waiting");
+ r1:run(3);
+ assert(r1.state == "waiting");
+
+ r2:run(1);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ r2:run(2);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ r2:run(3);
+ assert(r1.state == "waiting");
+ assert(r2.state == "waiting");
+ done2();
+
+ r2:run(3);
+ assert(r1.state == "waiting");
+ assert(r2.state == "waiting");
+ done2();
+
+ r2:run(2);
+ assert(r1.state == "waiting");
+ assert(r2.state == "ready");
+
+ for i = 1, 2 do
+ done1();
+ if i < 2 then
+ assert_equal(r1.state, "waiting");
+ end
+ end
+
+ assert(r1.state == "ready");
+ r1:run(4);
+ assert(r1.state == "ready");
+
+ assert(r1.state == "ready");
+ --for k, v in ipairs(l1) do print(k,v) end
+
+
end