2 -- Test passing nil to runner
3 -- Test runners work correctly after errors (coroutine gets recreated)
4 -- What happens if an error is thrown, but more items are in the queue? (I think runner might stall)
5 -- Test errors thrown halfway through a queue
8 function runner(new_runner, async)
9 local function new(func)
11 return new_runner(func, setmetatable({}, {
12 __index = function (_, event)
13 return function (runner, err)
14 print("event", event, err)
15 table.insert(log, { event = event, err = err });
22 local r, l = new(function (item) assert(type(item) == "number") end);
25 for k, v in ipairs(l) do print(k,v) end
30 local r, l = new(function (item)
31 assert(type(item) == "number")
33 wait, done = async.waiter();
39 assert(r.state == "ready");
41 assert(r.state == "ready");
43 assert(r.state == "waiting");
45 assert(r.state == "ready");
46 for k, v in ipairs(l) do print(k,v) end
51 local r, l = new(function (item)
52 assert(type(item) == "number")
53 assert(item == last_item + 1);
56 wait, done = async.waiter();
62 assert(r.state == "ready");
64 assert(r.state == "ready");
66 assert(r.state == "waiting");
68 assert(r.state == "waiting");
70 assert(r.state == "ready");
71 for k, v in ipairs(l) do print(k,v) end
76 local r, l = new(function (item)
77 assert(type(item) == "number")
78 assert((item == last_item + 1) or item == 3);
81 wait, done = async.waiter();
87 assert(r.state == "ready");
89 assert(r.state == "ready");
93 assert(r.state == "waiting");
95 assert(r.state == "waiting");
97 assert(r.state == "waiting");
99 assert(r.state == "waiting");
104 assert(r.state == "waiting");
108 assert(r.state == "ready");
109 for k, v in ipairs(l) do print(k,v) end
114 local r, l = new(function (item)
115 assert(type(item) == "number")
116 assert((item == last_item + 1) or item == 3);
119 wait, done = async.waiter();
125 assert(r.state == "ready");
127 assert(r.state == "ready");
131 assert(r.state == "waiting");
133 assert(r.state == "waiting");
138 assert(r.state == "waiting");
142 assert(r.state == "ready");
144 assert(r.state == "ready");
146 assert(r.state == "ready");
147 for k, v in ipairs(l) do print(k,v) end