diff options
-rw-r--r-- | tests/test_util_async.lua | 167 |
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 |