Comparison

tests/test_util_async.lua @ 8209:39f24de4f53f

tests: Add failing tests for util.async
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Sep 2017 16:16:28 +0100
parent 7437:ff74188488ab
comparison
equal deleted inserted replaced
8208:b69b40a828fd 8209:39f24de4f53f
4 -- What happens if an error is thrown, but more items are in the queue? (I think runner might stall) 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 5 -- Test errors thrown halfway through a queue
6 -- Multiple runners 6 -- Multiple runners
7 7
8 function runner(new_runner, async) 8 function runner(new_runner, async)
9 local function new(func) 9 local function new(func, name)
10 local log = {}; 10 local log = {};
11 return new_runner(func, setmetatable({}, { 11 return new_runner(func, setmetatable({}, {
12 __index = function (_, event) 12 __index = function (_, event)
13 return function (runner, err) 13 return function (runner, err)
14 print("event", event, err) 14 print(name, "event", event, err)
15 table.insert(log, { event = event, err = err }); 15 table.insert(log, { event = event, err = err });
16 end; 16 end;
17 end; 17 end;
18 })), log; 18 })), log;
19 end 19 end
20 20
21 -------------------- 21 --------------------
22 local r, l = new(function (item) assert(type(item) == "number") end); 22 local r, l = new(function (item) assert(type(item) == "number") end);
23 r:run(1); 23 r:run(1);
24 r:run(2); 24 r:run(2);
25 for k, v in ipairs(l) do print(k,v) end 25 --for k, v in ipairs(l) do print(k,v) end
26 26
27 -------------------- 27 --------------------
28 local wait, done; 28 local wait, done;
29 29
30 local r, l = new(function (item) 30 local r, l = new(function (item)
41 assert(r.state == "ready"); 41 assert(r.state == "ready");
42 r:run(3); 42 r:run(3);
43 assert(r.state == "waiting"); 43 assert(r.state == "waiting");
44 done(); 44 done();
45 assert(r.state == "ready"); 45 assert(r.state == "ready");
46 for k, v in ipairs(l) do print(k,v) end 46 --for k, v in ipairs(l) do print(k,v) end
47 47
48 -------------------- 48 --------------------
49 local wait, done; 49 local wait, done;
50 local last_item = 0; 50 local last_item = 0;
51 local r, l = new(function (item) 51 local r, l = new(function (item)
66 assert(r.state == "waiting"); 66 assert(r.state == "waiting");
67 r:run(4); 67 r:run(4);
68 assert(r.state == "waiting"); 68 assert(r.state == "waiting");
69 done(); 69 done();
70 assert(r.state == "ready"); 70 assert(r.state == "ready");
71 for k, v in ipairs(l) do print(k,v) end 71 --for k, v in ipairs(l) do print(k,v) end
72 72
73 -------------------- 73 --------------------
74 local wait, done; 74 local wait, done;
75 local last_item = 0; 75 local last_item = 0;
76 local r, l = new(function (item) 76 local r, l = new(function (item)
104 assert(r.state == "waiting"); 104 assert(r.state == "waiting");
105 end 105 end
106 end 106 end
107 107
108 assert(r.state == "ready"); 108 assert(r.state == "ready");
109 for k, v in ipairs(l) do print(k,v) end 109 --for k, v in ipairs(l) do print(k,v) end
110 110
111 -------------------- 111 --------------------
112 local wait, done; 112 local wait, done;
113 local last_item = 0; 113 local last_item = 0;
114 local r, l = new(function (item) 114 local r, l = new(function (item)
142 assert(r.state == "ready"); 142 assert(r.state == "ready");
143 r:run(4); 143 r:run(4);
144 assert(r.state == "ready"); 144 assert(r.state == "ready");
145 145
146 assert(r.state == "ready"); 146 assert(r.state == "ready");
147 for k, v in ipairs(l) do print(k,v) end 147 --for k, v in ipairs(l) do print(k,v) end
148
149 -- Now with multiple runners
150 --------------------
151 local wait1, done1;
152 local last_item1 = 0;
153 local r1, l1 = new(function (item)
154 assert(type(item) == "number")
155 assert((item == last_item1 + 1) or item == 3);
156 last_item1 = item;
157 if item == 3 then
158 wait1, done1 = async.waiter();
159 wait1();
160 end
161 end, "r1");
162
163 local wait2, done2;
164 local last_item2 = 0;
165 local r2, l2 = new(function (item)
166 assert(type(item) == "number")
167 assert((item == last_item2 + 1) or item == 3);
168 last_item2 = item;
169 if item == 3 then
170 wait2, done2 = async.waiter();
171 wait2();
172 end
173 end, "r2");
174
175 r1:run(1);
176 assert(r1.state == "ready");
177 r1:run(2);
178 assert(r1.state == "ready");
179
180 local dones = {};
181 r1:run(3);
182 assert(r1.state == "waiting");
183 r1:run(3);
184 assert(r1.state == "waiting");
185
186 r2:run(1);
187 assert(r1.state == "waiting");
188 assert(r2.state == "ready");
189
190 r2:run(2);
191 assert(r1.state == "waiting");
192 assert(r2.state == "ready");
193
194 r2:run(3);
195 assert(r1.state == "waiting");
196 assert(r2.state == "waiting");
197 done2();
198
199 r2:run(3);
200 assert(r1.state == "waiting");
201 assert(r2.state == "waiting");
202 done2();
203
204 r2:run(2);
205 assert(r1.state == "waiting");
206 assert(r2.state == "ready");
207
208 for i = 1, 2 do
209 done1();
210 if i < 2 then
211 assert(r1.state == "waiting");
212 end
213 end
214
215 assert(r1.state == "ready");
216 r1:run(4);
217 assert(r1.state == "ready");
218
219 assert(r1.state == "ready");
220 --for k, v in ipairs(l1) do print(k,v) end
221
222
223 --------------------
224 local wait1, done1;
225 local last_item1 = 0;
226 local r1, l1 = new(function (item)
227 assert(type(item) == "number")
228 assert((item == last_item1 + 1) or item == 3);
229 last_item1 = item;
230 if item == 3 then
231 wait1, done1 = async.waiter();
232 wait1();
233 end
234 end, "r1");
235
236 local wait2, done2;
237 local last_item2 = 0;
238 local r2, l2 = new(function (item)
239 assert(type(item) == "number")
240 assert((item == last_item2 + 1) or item == 3);
241 last_item2 = item;
242 if item == 3 then
243 wait2, done2 = async.waiter();
244 wait2();
245 end
246 end, "r2");
247
248 r1:run(1);
249 assert(r1.state == "ready");
250 r1:run(2);
251 assert(r1.state == "ready");
252
253 r1:run(5);
254 assert(r1.state == "ready");
255
256 local dones = {};
257 r1:run(3);
258 assert(r1.state == "waiting");
259 r1:run(5); -- Will error, when we get to it
260 assert(r1.state == "waiting");
261 r1:run(3);
262 assert(r1.state == "waiting");
263
264 r2:run(1);
265 assert(r1.state == "waiting");
266 assert(r2.state == "ready");
267
268 r2:run(2);
269 assert(r1.state == "waiting");
270 assert(r2.state == "ready");
271
272 r2:run(3);
273 assert(r1.state == "waiting");
274 assert(r2.state == "waiting");
275 done2();
276
277 r2:run(3);
278 assert(r1.state == "waiting");
279 assert(r2.state == "waiting");
280 done2();
281
282 r2:run(2);
283 assert(r1.state == "waiting");
284 assert(r2.state == "ready");
285
286 for i = 1, 2 do
287 done1();
288 if i < 2 then
289 assert_equal(r1.state, "waiting");
290 end
291 end
292
293 assert(r1.state == "ready");
294 r1:run(4);
295 assert(r1.state == "ready");
296
297 assert(r1.state == "ready");
298 --for k, v in ipairs(l1) do print(k,v) end
299
300
148 end 301 end